Я пытаюсь найти наилучший способ разделить проблемы моей логики предметной области и логики постоянства.Я использую Linq-2-Sql для доступа к данным, и я следую учебному пособию NerdDinner .Если вы посмотрите на страницу 40, то увидите, что они используют частичные классы для бизнес-правил в своих классах, сгенерированных Linq.Для меня это кажется неправильным (не так ли?), И я хотел бы иметь свои собственные POCO, которые представлены на уровне представления моего приложения.Похоже, что одна опция здесь , это использовать отдельный класс DTO.Мне это кажется лучше, но он добавляет гораздо больше кода для тестирования и поддержки.
Мне нравится простота простого добавления частичных классов для обеспечения соблюдения бизнес-правил в классах Linq, но я не люблю выставлять Linqклассы для моего уровня презентации, так как если база данных изменится, мне также потребуется обновить уровень презентации.
Подход DTO чувствует себя чище, поскольку мне никогда не нужно обновлять уровень презентации, если база данных изменяется, но это гораздо больше кода, чтобы иметь дело с.
Таким образом, мой текущий подход состоит в том, что две библиотеки классов - одна с Linq-2-Sql DBML + частичные классы, а вторая - с набором классов, которые не имеют ничего, кроме автоматически сгенерированных свойств, а затем класс «репо»который управляет получением данных из сборки Linq и преобразованием их в IQueryable<T>.
Есть ли лучший способ?Есть ли лучшая золотая середина?Могу ли я взять лучшее из обоих миров?Если да, как бы вы разделили их на разные сборки?
update
Может быть, мне действительно нужно объединить всю логику Persitence / Domain водна сборка (тот же подход, который использовался в образце NerdDinner), а затем создание разных «объектов просмотра» на уровне представления, которые являются денормализованными версиями моих сущностей Linq-2-Sql?