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