Рекомендуемый шаблон для доменных сущностей, содержащих данные из нескольких баз данных - PullRequest
2 голосов
/ 02 августа 2010

Я поддерживаю приложение, в котором есть много сущностей домена, которые получают данные из более чем одной базы данных. Обычно это работает так, что объекты загружаются из базы данных A (в которой хранится большинство их полей). когда вызывается свойство, соответствующее данным в базе данных B, объект запускает SQL для базы данных B, чтобы получить все соответствующие данные.

В настоящее время я использую ORM «накатить по-своему», который уродлив, но эффективен (и прост для понимания). Недавно я начал использовать NHibernate для сущностей, взятых исключительно из базы данных A, но мне интересно, как я мог бы использовать NHibernate для сущностей, извлеченных из баз данных A и B.

Лучший способ, которым я могу придумать, заключается в следующем. Я продолжаю использовать библиотеку классов на основе NHibernate для сущностей в базе данных A. Те сущности, которым также нужны данные из базы данных B, представляют все свои данные из базы данных B в одном классе, доступ к которому осуществляется через свойство. Когда это свойство вызывается, оно вызывает соответствующий репозиторий, и объект возвращается. Поэтому к библиотеке классов для доступа к базе данных B нужно обращаться из библиотеки классов для доступа к базе данных A.

Имеет ли это какой-то смысл, и есть ли более устоявшийся шаблон для этой ситуации (который должен быть довольно распространенным).

Спасибо

David

1 Ответ

0 голосов
/ 03 августа 2010

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

Если он не работает для вас как есть, он может по крайней мере предоставить некоторые интересные шаблоны для рассмотрения.

РЕДАКТИРОВАТЬ (на основе комментариев):

Похоже, это не соответствует вашей ситуации, так как Shards говорит о горизонтальном разделении данных.

Если вам нужно разделить по вертикали, вам, вероятно, потребуется определить несколько единиц персистентности. Запросы и транзакции с участием обеих баз данных, вероятно, станут интересными. Боюсь, я не могу сильно помочь с этим. Этот вопрос определенно связан между собой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...