Если вы действительно настаиваете на том, чтобы скрыть слой ORM за слоем BO, то Dependency Injection все равно сможет вам помочь. Обратите внимание, что вы не сможете избежать ссылки на библиотеку DI из вашего потока пользовательского интерфейса, потому что именно отсюда будут поступать ваши бизнес-объекты.
Подход:
- Создание интерфейса, который содержит методы для загрузки данных для заполнения
User
объектов
- Реализация этого интерфейса в вашем проекте ORM
- При запуске зарегистрируйте реализацию ORM для интерфейса, используя какой-либо DI-контейнер (прочитайте подробности о любой используемой вами DI-библиотеке, например, www.ninject.org, чтобы узнать что-нибудь более легкое)
- Дайте объекту
User
конструктор, который принимает экземпляр интерфейса заполнения для загрузки данных из
Затем, когда вам нужен объект User
, вы просите библиотеку DI создать его, и библиотека DI создаст User
и даст ему ссылку на реализацию ORM. Вам нужно будет ввести некоторые свойства в вызов DI, чтобы «имя пользователя» и «пароль» могли полностью заполнить его значениями.
Обратите внимание, что это не совсем то, для чего был изобретен DI ... Код приложения действительно должен иметь дело с ORM напрямую для создания / чтения / обновления / удаления бизнес-объектов.