2010-10-01 1 views
2

Я проектированием C# приложениюПроектирование слоистого приложения с NHibernate и контекст изменения базы данных

  • Презентации (веб-сайт + сгибать приложения)
  • Бизнеса логического слой (может быть WCF для того, чтобы многоканальные клиентских платформ)
  • Data Access Layer (с NHibernate)

мы собираемся интегрировать наше решение в environnements базы данных многих preexistant клиента, и мы хотели бы использовать NHibernate в DAL .. M y коллега отметил, что генерация классов из БД клиента (например, User или Image) с NHibernate приведет к тому, что BLL взорвется в нашем лице при каждом изменении БД! Итак, вопрос в том, как предотвратить это? Мы думаем о создании бизнес-объектов и отображать объекты NHibernate для этих BO (гул, это делает их DTO?) С помощью AutoMapper и предотвращать изменения dal от влияния BLL .. Это путь?

Спасибо!

EDIT:

Чтобы дать лучшее понимание того, что мы пытаемся достичь, возможно, потребуется контекст: Мы строим приложение фото хранения/обмена в Flex для переднего плана и C# на back-end основном для нашей компании, поэтому мы обрабатываем все аспекты кода и БД.

Но: этот продукт также может быть куплен ярусами, которые, в конечном итоге, уже имеют базу данных с таблицей пользователя или таблицей изображений. Я думаю здесь о новой перспективе, у которой таблица изображений с несколькими сотнями миллионов строк и добавление столбцов для нашей бизнес-логики не произойдет из-за слишком длительного АЛЬТЕРИРОВАНИЯ таблицы.

Несмотря на то, что это возможно (таблица пользователя, например, может быть изменена из-за меньших строк), мы спрашиваем себя, как обрабатывать изменения структуры таблицы, не влияя на все наше решение каждый раз, когда нам приходится интегрироваться в уровень базы данных, от BLL до клиентского приложения в Flex!

ответ

2

По моему опыту, ваши бизнес-объекты (объекты домена AKA) должны быть смоделированы в OO, чтобы представлять ваши бизнес-объекты реальной жизни и ваши таблицы в третьей нормальной форме (это может измениться в зависимости от того, какой дизайн вы после скорости и размера файла)

NHibernate должен отображаться между вашими BO и таблицами, используя его файлы сопоставления.

теперь у вас есть законные случаи:

  • Вам нужно добавить/удалить столбец, мы решили удалить addressline4, это эхо изменения в вашем адрес объекте, то отлично.
  • Вы перемещаете столбец в лучшее место, наш объект Client содержит заметки, которые в настоящее время хранятся в таблице Contract_Extra, которая будет перемещена в таблицу Client. перемещая колонки в лучшее место только эффект файла сопоставления, в этом случае

Я сомневаюсь, есть одеяло рассуждения, однако я надеюсь, что примеры заставляют думать об этом

Я не пробовал NH по нескольким Db's, также должен each database have its own service on top?

здесь некоторые ссылки

  • Multi table entites
  • PoEAA < - посмотреть на единичное наследовании таблицы, наследовании таблицы классов, а другого

Надеется, что это помогает

+0

Мне нравится этот ответ. Я вижу, что op говорит в терминах PL, BLL и DAL, и, напротив, этот ответ касается DDD. Я хотел бы получить немного больше информации в этом отношении. – blu

+0

Я отредактировал первое сообщение, чтобы дать вам больше контекста. Я думаю, что несколько элементов таблицы + пользовательский доступ к данным являются частью решения! – Breakdown

0

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

Способ, которым вы предлагаете, создавать DTO из каждой базы данных с помощью генераторов кода, может быть вариантом. Другим было бы создание пользовательских сопоставлений NHibernate для каждой существующей базы данных. Возможно, вам придется использовать некоторые DTO, чтобы сделать некоторые из отображений менее трудными, но это может дать вам больше контроля.

Это лишь некоторые мысли. Более опытные пользователи с NHibernate, вероятно, будут лучше понимать вашу ситуацию.

+0

NHibernate отображению должны сделать трюк, но что, если таблицы БД содержат больше столбцов, чем мой класс DTO? У меня нет контроля над несколькими конкретными таблицами (при интеграции нашего решения в другую клиентскую БД), и поэтому я могу только адаптироваться, это проблема? – Breakdown

Смежные вопросы