В проекте, над которым я работаю, используется n-уровневая архитектура. Наши слои следующие:
- Доступ к данным
- Бизнес-логика
- Субъекты хозяйствования
- Презентация
Бизнес-логика вызывает уровень доступа к данным, а уровень представления вызывает уровень бизнес-логики, и все они ссылаются на бизнес-объекты.
Наши бизнес-сущности по существу соответствуют нашей модели данных 1-1. Для каждой таблицы у нас есть класс. Первоначально, когда была разработана структура, не уделялось внимания управлению отношениями «главный-элемент» или «потомок-родитель». Таким образом, вся бизнес-логика, доступ к данным и бизнес-объекты ссылались только на одну таблицу в базе данных. Как только мы начали разработку приложения, быстро стало очевидно, что отсутствие этих отношений в нашей объектной модели серьезно нам мешает.
Все ваши слои (включая базу данных) генерируются из внутренней базы данных метаданных, которую мы используем для работы нашего собственного генератора кода.
Вопрос в том, как лучше всего загрузить или отложить загрузку отношений в наших сущностях. Например, предположим, что у нас есть класс людей, который имеет отношение «главный-дочерний» к таблице адресов. Это отображается в бизнес-сущности как свойство коллекции Addresses в объекте Person. Если у нас есть взаимно-однозначные отношения, это будет отображаться как свойство единой сущности. Как лучше всего заполнить и сохранить объекты отношений? Наши бизнес-объекты не знают об уровне бизнес-логики, поэтому это невозможно сделать внутренне, когда свойство вызывается.
Я уверен, что для этого есть какой-то стандартный шаблон. Какие-либо предложения?
Также есть одно предостережение: уровень DataAcess использует отражение для построения наших сущностей. Хранимые процедуры возвращают один результат на основе одной таблицы, и, используя отражение, мы заполняем наш бизнес-объект, сопоставляя имена свойств с именами столбцов. Так что присоединиться будет сложно.