Я ищу несколько советов о том, как включить бизнес-правила в приложение asp.net mvc и как они связаны с моделью.
Сначала немного предыстории, чтобы мы знали, какие решения являются относительными для этого вопроса. На работе мы используем WinForms, MVP, BusinessObjects, DataAccessObjects и DataTransferObjects. Границы слоев используют DTO для отправки параметров в методы и в качестве возвращаемых типов, или возвращают типы списков.
Прямо сейчас мы добавляем фасадный слой для преобразования DTO в доменные объекты, чтобы пользовательский интерфейс мог работать с ним, поскольку архитектору не нравится, как в настоящее время работает использование DTO в PresentationLayer. Мне удобно все это в теории, кроме того, практично это или нет.
Я создаю веб-сайт для развлечения, но по соображениям, скажем, он обслуживает такой же объем трафика, что и SO, что-то вроде 60 000 посещений в месяц в последний раз, когда я слышал. Мне комфортно с механикой контроллеров и представлений, а также с тем, как модель интегрируется с двумя.
Я использую NerdDinner в качестве примера для построения сайта, и я следую за реализацией шаблона репозитория в примерах. Чего я не понимаю, так это как включить бизнес-объекты в смесь.
Я слышал, что люди говорят о LINQ как объектах DataAccessLayer / DataAccessObjects. Если я форсирую все свои запросы через бизнес-объекты, как я привык, я ввожу некоторые странные зависимости. И мой пользовательский интерфейс, и мой BO должны знать о моем DAO.
Что имело бы смысл использовать классы LINQ как настоящий слой DAO, скрыть его за BO и иметь преобразование BO между объектами POCO и LINQ.
Единственное, что меня беспокоит, так это то, что я в порядке с привязкой своего пользовательского интерфейса к классам LINQ, и мне действительно не нужна вся дополнительная работа, я доволен тонким облегченным подходом, как в NerdDinner.
По сути, у меня есть хранилище, которое создается в контроллерах, которые принимают и возвращают объекты LINQ. В моих бизнес-объектах есть статические методы, которые просто берут классы LINQ и выполняют некоторые вычисления, например, применяют определенный налог штатов% или w / e.
Поскольку многие из этих вычислений должны выполняться по результатам хранилища, я думаю объединить их в одну центральную область, например, фасадный слой, но такую, которая просто преобразуется в данные, а не переводится в другие объекты. наборы (DomainObjects <-> DTO).
Должен ли я сделать это, или я должен сказать, что эти бизнес-методы действительно являются частью моей модели и что они должны быть в методах репозитория, которые возвращают объекты?