Задумывались ли вы о создании класса ContextManager
и использовании "конфигурации по соглашению"?
То, что я бы сделал, это добавление члена getName
к вашему IContext
интерфейсу - это просто возвращает красивую понятную человеку строку для каждой реализации - так же просто, как "ContextXML" для вашего ContextXML
класса.
Когда ваш ContextManager
(возможно, Singleton, BTW) запускается, он сканирует известный каталог для реализаций IContext
, создавая их экземпляры с помощью отражения (или какого-либо другого механизма, который яЯ не знаком с VB.Net, но я уверен, что есть способ и помещаю их в коллекцию.
Теперь, когда вы создаете Context
объектов, вы можете попросить у ContextManager
подходящий IContext
- либо явно [например, getIContextByName("ContextDB")
], либо с более простым методом, который просто возвращает то, что было сконфигурировано каким-либо другим механизмом - то есть набор методов примерно такой:
getPossibleIContextImplementationNames()
setCurrentIContextImplementation({name})
getCurrentIContext()
Как и в стороне, вы застряли с этим наименованием?Потому что наличие Context
объекта, который использует и IContext
, кажется немного необычным.Если ваши IContext
реализации фактически используются для получения данных откуда-то, почему бы не вызвать интерфейс IDAO
или IDataAccessor
?