У меня есть проект с 3 слоями.Пользовательский интерфейс, бизнес-уровень и уровень данных.
Пользовательский интерфейс вызывает BL.BL Calls DL.DL выполняет операции с базой данных.Это так просто.
Я хотел провести модульное тестирование моих методов BL, поэтому я немного его изменил, и теперь я принимаю DL в качестве параметра в конструкторе BL, чтобы я мог создать объект Mock из DL.
Это заставляет меня менять свой уровень пользовательского интерфейса, так как мой пользовательский интерфейс вызывает мой BL, и в соответствии с правилами архитектуры я считаю, что это не очень хороший дизайн, если я добавляю ссылку на мой DL в свой пользовательский интерфейс.
Может кто-нибудь предложить лучший вариантпуть?Нужно ли менять архитектуру или я что-то здесь не так делаю?Может быть, я могу представить Facade Manager здесь?Пример вашего предложения будет высоко оценен.
- Правка -
Вот код:
в BL:
public MyBusinessLayer()
{
}
//To pass mock object of WCF Service
public MyBusinessLayer(ISomeServices svc)
{
someServiceRef = svc;
}
//To pass mock object of Data Layer.
public MyBusinessLayer(ISomeDataLayer dl)
{
someDlRef = dl;
}
в пользовательском интерфейсе:
//To do this i have to add DL reference to UI
MyBusinessLater b = new MyBusinessLayer(new ISomeService());