Я строю систему среднего размера и столкнулся с проблемой, с которой, возможно, некоторые из вас сталкивались ранее.На своем бизнес-уровне я возвращаю бизнес-объекты с подмножеством свойств, которые важны для этого бизнес-метода, я обеспокоен тем, что могу получить много объектов с бессмысленными именами или только один, в котором в данном задании заполнено только подмножество свойствметод.Позвольте мне привести пример.
Случай 1
Например, пользователь принадлежит городу, который, в свою очередь, принадлежит государству и стране, User
, City
, State
и Country
- это таблицы в моей базе данных с большим количеством полей, но я хочу получить список пользователей со списком заказов, поэтому я создаю бизнес-объект, который называется, например, UserWithOthers
только сважные свойства (UserId, UserName, CityName, StateName, CountryName, List<Order>
) и мой DAL извлекают только те поля из базы данных.
Дело 2
Теперь я хочу вернуть пользователя с количеством заказовЯ заканчиваю со следующими полями в моем бизнес-объекте (UserId, UserName, CityName, StateName, CountryName, OrdersCount
), и класс может быть вызван, например, UserWithOrderCount
Я думал в некоторых вариантах:
- Makeчто два бизнес-класса и заполняют их отдельно в каждом методе DAL (эти объекты просты, но учтите, что метод может иметь сложный запрос на выборку, который необходимо инкапсулировать для повторного использования, поэтому шаблон репозитория здесь не очень подходит, по крайней мере, я так думаю).
- Создать толькоy один объект
User
со всеми свойствами (UserId, UserName, CityName, StateName, CountryName, OrdersCount, List<Order>
) и заполнение только подмножества в каждом методе DAL, но это подразумевает семантическую связь при использовании метода, потому что вы должны знать, какое подмножество полей заполнено из базы данных, исемантическая связь - худшая из всех связей. - Вариант 1 не работает должным образом, если мне понадобится позже в другом представлении, оба свойства,
List<Order>
и OrdersCount
. - Теперь рассмотрим, чтоесли вы используете ASP.NET MVC, хорошие практики говорят о том, что вам нужен ViewModel для перехода к представлению, я решил вернуть ViewModels из моего слоя Businnes, но я не думаю, что это хорошая идея, похоже, что я что-то нарушаю,и также невозможно, потому что мой бизнес-уровень находится в другой сборке, а не в веб-приложении.
- Я не хочу писать один и тот же запрос Linq снова и снова, но если использовать NHibernate или EFCodeFirst, это "похоже навариант один, и мне нужно будет создать тонны объектов малого бизнеса.
Как вы справляетесь с этой ситуацией?Я думаю, что это дизайнерское решение высокого уровня.