Я создаю приложение с несколькими классами Connector
, которые взаимодействуют с различными хранилищами данных. Например, см. Предыдущий мой вопрос here. В любом случае, как и в моем примере, почти все эти источники данных имеют дорогостоящий временный доступ, поэтому каждый Connector
поддерживает кеш, чтобы ограничить доступ. Для каждого силоса данных есть IDataSource
, который извлекает данные, и Connector
, который кэширует. Доступ к Connector
осуществляется путем передачи в IDataSource
заводского метода в моем классе AppFactory
.Является ли это нарушением концептуальной целостности?
К сожалению, есть точно 1 Connector
, который не подходит этой модели. Силос Active Directory достаточно быстр, чтобы не требоваться кеш, поэтому нет необходимости в ActiveDirectoryConnector
, и не было бы фабричного метода в моем классе AppFactory
. Как я уже говорил, в любом другом случае данные запрашиваются у объекта Connector
, который может быть получен только от вызова метода до AppFactory
с параметром IDataSource
.
Насколько я могу сказать, мои варианты имеют неглубокую ActiveDirectoryConnector
объект, который просто пересылает запросы прямо в его IActiveDirectoryDataSource
или не иметь ActiveDirectoryConnector
вообще. В первом случае я сохраняю концептуальную целостность с остальными моими Connector
, но у меня есть бесполезный уровень косвенности. В последнем я жертвую концептуальной честностью для прямоты. Что представляет собой меньшее зло?
В некотором смысле, это просто вырожденный случай: кеш нулевого размера. –
Мне очень нравится аналогия с методами доступа. ActiveDirectorConnector аналогичен общедоступному типу Type {get; set;}, который подтверждает его существование. – DonaldRay