Рассмотрим этот код:
public class MyClass()
{
public MyClass()
{
}
public DoSomething()
{
using (var service = new CustomerCreditServiceClient())
{
var creditLimit = service.GetCreditLimit(
customer.Firstname, customer.Surname, customer.DateOfBirth);
}
}
}
Теперь мы хотим реорганизовать его, чтобы слабо связать его. Мы заканчиваем это:
public class MyClass()
{
private readonly ICustomerCreditService service;
public MyClass(ICustomerCreditService service)
{
this.service= service;
}
public DoSomething()
{
var creditLimit = service.GetCreditLimit(
customer.Firstname, customer.Surname, customer.DateOfBirth);
}
}
Выглядит нормально, верно? Теперь любая реализация может использовать интерфейс и все хорошо.
Что, если я сейчас скажу, что реализация представляет собой класс WCF и что оператор using до того, как был выполнен рефакторинг, существовал не просто так. т.е./закрыть соединение WCF.
Итак, теперь наш интерфейс должен реализовать вызов метода Dispose
, или мы используем фабричный интерфейс, чтобы получить реализацию и поместить вокруг нее оператор using.
Мне (хотя я новичок в этом вопросе) это кажется дырявой абстракцией. Нам приходится вставлять вызовы методов в наш код только ради того, как реализация обрабатывает вещи.
Может ли кто-нибудь помочь мне понять это и подтвердить, прав я или нет.
Спасибо