0

У меня есть приложение, которое создает документ MS Word и запускает его. Я пытаюсь выяснить, на каком слое нужно вставить этот код.Запускает внешнюю часть документа слоя презентации?

Запустил бы внешний документ как часть уровня представления или часть уровня бизнес-логики?

С одной стороны, похоже, что это должно быть частью слоя презентации, поскольку в конечном итоге это приводит к тому, что пользователь «представляет» что-то (хотя и во внешнем приложении). С другой стороны, это больше похоже на уровень бизнес-логики, поскольку уровень представления может только быть заинтересованным в пользовательском интерфейсе текущего приложения, и поскольку все, что он действительно делает, когда дело доходит до него, - это запуск внешнего процесса - что-то которые могут быть использованы для нескольких внешних процессов, которые не все имеют для них «презентационный» аспект.

Кроме того, я не уверен, является ли SO правильным местом для этого вопроса. Я проверил https://softwareengineering.stackexchange.com/, но на те теги было только несколько последователей.

+0

IMHO он должен быть частью вашего уровня * Presentation *, поскольку данные, которые в нем переводятся, просто принимают форму этого документа MS Word. – ekostadinov

ответ

0

Это зависит от того, что вы подразумеваете под «частью слоя презентации». Если вы имеете в виду фактическую реализацию, то это определенно не так. Да, результатом является открытый документ Word, но это не имеет ничего общего с уровнем представления вашего приложения.

  1. Фактическая реализация должна перейти на уровень инфраструктуры, где должен идти весь код для работы с базами данных, файлами и сторонними приложениями.
  2. Возможно, у вас может быть другая реализация логики формирования документа. Например, для консольного приложения он должен просто записать файл в папку, чтобы веб-приложение записывало файл в ответ, чтобы затем загрузить его пользователем и т. Д.
  3. Поскольку фактическая логика является специфичной для приложения, она должна быть ИНЖЕКТИРОВАНА на прикладном уровне, если у вас нет этого, слой презентации также должен быть в порядке.
  4. Я предполагаю, что вы также хотите убедиться, что документ всегда создается для конкретного бизнес-кейса. Затем вы должны передать службу генерации введенных документов на свой бизнес-уровень. В этом случае, если вы хотите переместить свою бизнес-логику в другое приложение, вы не забудете реализовать новую логику генерации документа, если это необходимо.

Так что ваш код должен быть следующим:

public class BusinessLayerService 
{ 
    private IDocumentGenerator _documentGenerator; 

    public BusinessLayerService(IDocumentGenerator documentGenerator) 
    { 
     _documentGenerator = documentGenerator; 
    } 

    public void DoBusinessCase1() 
    { 
     // Do work here 
     _documentGenerator.GenerateDocument(); 
    } 
} 

Если вы используете любой контейнер IoC просто зарегистрировать необходимое внедрение (для веб, окна, мобил или консольного приложения) на прикладном Starup.

Надеюсь, это поможет!

+0

@ rory.ap - мой ответ полезен? –

Смежные вопросы