NHibernate + Mappings + Domain Model = Избыточное проектирование? - PullRequest
2 голосов
/ 25 февраля 2010

Фон

Мне очень нравится Fluent NHibernate - это довольно здорово. Мне не нужно писать эти обычные хранимые процедуры на основе CRUD SQL, и это здорово (не то, чтобы в этом было что-то не так)!

Я немного прошел по этому пути в приложении, над которым мы работаем. И теперь я сижу с парой дюжин доменных объектов, каждый с интерфейсом хранилища и соответствующим конкретным хранилищем. Уф!

Но подождите - это действительно сэкономило мне столько времени? Мне казалось, что это заняло больше времени. Мне пришлось написать все эти доменные объекты, которые имеют 99% свойств и 1% бизнес-логики, а затем я должен был определить сопоставления. Это занимает примерно столько же времени, сколько и написание хранимой процедуры. Так какое же преимущество дает мне использование Fluent NHibernate по сравнению с написанием хранимых процедур?

Вопрос

Существуют ли надежные решения для генерации этих доменных объектов "пакета свойств" (в .NET), поэтому мне не нужно их писать? Я мог бы увидеть в этом некоторую выгоду, если объекты предоставляли некоторую расширяемость для добавления дополнительной бизнес-логики по мере необходимости.

Ответы [ 3 ]

1 голос
/ 25 февраля 2010

Может быть, вы должны думать наоборот. При разработке вы можете сгенерировать вашу SQL-схему из ваших объектов (FluentNhibernate поддерживает это). Таким образом, вы можете разработать свою модель предметной области в итеративном процессе, вероятно, со многими изменениями. Модель данных может быть просто приложением.

Написание объектов с моей точки зрения так же просто, как создание таблиц и добавление полей в инструменте управления схемами. На самом деле я считаю, что написание бизнес / предметного объекта происходит быстрее: -)

Если у вас анемичная модель предметной области, возможно, это потому, что ваше приложение молодое. Больше функциональности придет :-)

1 голос
/ 25 февраля 2010

Вы можете создать отображение с помощью Автоматическое отображение . NHibernate идеально подходит для новых приложений, большинство людей, использующих NHibernate, пишут свои доменные объекты и генерируют из него базу данных. Вам нравится делать наоборот, у вас есть существующая база данных и вы хотите сгенерировать доменные объекты. В NHiberante для этого нет решения, но вы можете написать небольшой скрипт, используя MyGeneration, CodeSmith или какой-либо подобный инструмент для генерации кода.

0 голосов
/ 07 марта 2010

Вместо отдельных интерфейсов хранилища и конкретных классов хранилища для каждого агрегатного корня, попробуйте создать единый универсальный интерфейс хранилища и конкретную реализацию.

Если вам нужно добавить какую-то конкретную функциональность для одного конкретного типа сущности, хорошо, методы расширения могут вам помочь.

Посмотрите на этот пример от Себа Ламбла: http://serialseb.blogspot.com/2009/08/nhibernate-repository-that-oren-wont.html

...