Я пытаюсь создать класс, который выполняет всевозможные низкоуровневые действия, связанные с базой данных, но представляет действительно простой интерфейс для уровня пользовательского интерфейса.
Этот класс представляет совокупность данных в пределах определенного совокупного корня, извлеченных по одному идентификатору int.
Конструктор принимает четыре параметра:
public AssetRegister(int caseNumber, ILawbaseAssetRepository lawbaseAssetRepository, IAssetChecklistKctcPartRepository assetChecklistKctcPartRepository, User user)
{
_caseNumber = caseNumber;
_lawbaseAssetRepository = lawbaseAssetRepository;
_assetChecklistKctcPartRepository = assetChecklistKctcPartRepository;
_user = user;
LoadChecklists();
}
Уровень пользовательского интерфейса обращается к этому классу через интерфейс IAssetRegister
. Castle Windsor может сам предоставить параметры ILawbaseAssetRepository и IAssetChecklistKctcPartRepository, но код пользовательского интерфейса должен предоставить два других, используя анонимный тип, например:
int caseNumber = 1000;
User user = GetUserFromPage();
IAssetRegister assetRegister = Moose.Application.WindsorContainer.Resolve<IAssetRegister>(new { caseNumber, user});
С точки зрения дизайна API это чушь. Разработчик уровня пользовательского интерфейса не знает, что IAssetRegister требует целое число и User. Им необходимо знать о реализации класса, чтобы использовать его.
Я знаю, что у меня здесь должна быть какая-то проблема с дизайном. Кто-нибудь может дать мне несколько указателей?