Доброе время суток. Программирую на Delphi , но постоянно читаю ваш новости из мира .Net для "портирования" паттернов и практик программирования в своих Delphi продуктах. Прошу совета по реализации уровня сервисов в своём приложении.
Следуя Dependency Injection, нужно в конструкторы "инжектировать" экземпляры классов, вместо создания их в конструкторе конечного класса. Но где - то же должны быть созданы инжектируемые объекты, где должна быть эта точка?
Попробую пояснить на абстракции текущего проекта (прикрепил набросок со схемой). Не забываем что речь идёт о Delphi, где многое реализуется на готовых компонентах.
Имеем:
- TDataModule - невизуальный контейнер-хранилище, в данном случае открытых соединений с базами данных 1 и 2, для последующего использования их в других частях программы.
- TMainForm - главная форма приложения, где используются интересующие меня классы.
- TBaseDBManager - родительский класс с реализацией базовых операций с базой, который в конструкторе требует экземпляр класса с открытым соединением с базой: constructor Create(ADbConnection: TFirebirdConnection)
- TFileManager, TProjectManager - наследники TbaseDBMAnager, которые реализуют уже логику работы с файлами проекта и данными проекта как такового.
Создаются эти классы в TMainForm, то есть там при создании я должен передать TFirebirdConnection - открытые соединения с базой. Тогда получается что форма должна знать о базе и где взять эти соединения, соответствующим include. Если я делаю include в TBaseDBManager, то я там жёстко прописываю что FDBConncection = TDataModule.Connection (упрощённая запись).
Ка в таком случае лучше поступить?
