MVC Как правильно добавить бизнес-уровень

Я (нуб) повторно использую некоторый обучающий код в MVC. Используя различные веб-статьи в качестве руководства, я помещаю бизнес-логику, такую ​​как «добавить запись», в отдельный проект. Чтобы избежать циклических ссылок, следует ли мне также переместить модель и другие компоненты в их собственный проект?

Также будет ли BL, модель инстанциирована в контроллере? Спасибо


person kenmtb    schedule 29.09.2014    source источник
comment
Модель должна быть бизнес-уровнем   -  person AD.Net    schedule 29.09.2014


Ответы (2)


Обычно ваш контроллер вызывает ваш бизнес-уровень. Это зависит от специфики, но в большинстве ситуаций ваш бизнес-уровень будет вызывать уровень данных, который будет создавать фактические объекты модели.

person Rocky Pulley    schedule 29.09.2014

Для начала лучше оставить модель в том же проекте, если размер решения является управляемым.

Это лучший способ избежать циклических ссылок. Это при условии, что создаваемая вами сборка не будет использоваться многими другими зависимыми проектами, и в этом случае проекты могут быть разделены - это зависит от размера и масштаба вашего приложения.

например Для небольшого веб-приложения я бы структурировал решение MVC следующим образом - используйте папку по умолчанию для модели. Он будет содержать классы, которые представляют объекты бизнес-домена и при необходимости могут быть украшены различными атрибутами.

Хорошо создать еще одну папку для уровня доступа к данным - я делаю папку «Репозиторий» для доступа к данным, и она содержит все обращения к источникам данных, такие как заполнение наборов данных через соединения oledb, linq и т. Д.

Контроллер вызывает классы из репозитория и заполняет объекты модели данными. Итак, отвечая на ваш вопрос, контроллер создает экземпляр модели и заполняет эту модель с помощью методов уровня доступа к данным.

Вот пример:

код контроллера:

PurchaseOrder model = new PurchaseOrder();

string orderNumber = "123";

model.ListOfItems = purchaseOrderRepository.GetPurchaseOrderItems(orderNumber);
person Robert Anderson    schedule 30.09.2014
comment
Спасибо за мудрость. Пример кода прекрасно показывает, как работать в одном и том же проекте. Я хотел бы перенести бизнес-код в собственный проект, чтобы смоделировать более крупное приложение, в котором было бы больше общего. В этом случае GetPurchaseOrderItems получит элементы из чего-то вроде контекста или получит элементы из модели? Я бы подумал, что использование модели создаст круговую ссылку? - person kenmtb; 30.09.2014
comment
Привет, вы можете создать проект уровня доступа к данным, который будет содержать классы в ранее упомянутой папке репозитория. Точно так же бизнес-проект, который будет содержать объекты модели. Затем вы можете добавить ссылку на эти проекты уровня доступа к данным и бизнес-проекты в свой проект, в котором есть контроллеры и представления. Циклические ссылки возникают, когда существует много связанных друг с другом классов, которые тесно связаны и зависимы. Если вы идете по пути отдельных сборок, вы также можете исследовать фабричные шаблоны для создания экземпляров этих классов. - person Robert Anderson; 30.09.2014
comment
Хорошо, в этом есть смысл. Я предполагал, что модель, представление и контроллеры должны быть в одном проекте. Если разделить их в рамках хорошей практики программирования, то это то, что я ищу, чтобы сделать код более пригодным для повторного использования. - person kenmtb; 30.09.2014