Какой хороший способ обработки объектов в совокупности, которые сохраняются в нескольких базах данных

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

Суть проблемы заключается в том, что я имею дело с рядом устаревших систем и баз данных и пытаюсь использовать подход DDD для создания новых приложений и замены старых. Основная проблема заключается в том, что, хотя мои доменные сущности, объекты значений и агрегаты имеют деловой смысл, при рассмотрении вопроса о сохранении у меня возникает одна большая проблема... сущности внутри агрегата в настоящее время сохраняются в нескольких базах данных.

Например, допустим, у меня есть объекты A, B и C, где A - совокупный корень. У меня есть репозиторий для A, и я использую Unit of Work вокруг сессии NHibernate для сохранения. Все отлично, если A, B и C сохраняются на одном сервере / базе данных. В моем случае, однако, A и B могут находиться на одном сервере / базе данных, а C может сохраняться на совершенно другом сервере / базе данных.

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

Короче говоря, у меня есть доморощенный фреймворк на C#, состоящий из Fluent/NHibernate для персистентности, Unity для IoC и использующий стандартные (или, по крайней мере, узнаваемые) шаблоны репозитория и единицы работы. Что касается баз данных, я имею дело с MS SQL Server и Oracle.

Какие-нибудь мысли?

1 ответ

Решение

Совокупный корень не должен жить в нескольких базах данных.

Грег Янг говорит об этой же проблеме здесь.


Что-то вроде этого - то, что Вы должны делать.

Другие вопросы по тегам