Книга DDD, Эрик Эванс: Что подразумевается под "The w770>, следует абстрагироваться от желаемого типа, а не от конкретного созданного класса."?

В книге Domain Driven Design Эрика Эванса в главе 6 раздела "Фабрики" (стр. 139) говорится следующее:

"Двумя основными требованиями для любого хорошего FACTORY являются:

...

"2. FACTORY следует абстрагировать до желаемого типа, а не из созданного конкретного класса (ов).

Не могли бы вы рассказать о том, что подразумевается под этим утверждением о базовом требовании номер 2.

Ответ 1

Ответ Карлоса Лота правильный, но вы всегда должны помнить, что Аннотация Factory, так как это позволит вам пара бетонных заводов к конкретным типам без подключения потребителей к конкретным заводам или типам.

public interface ISomethingFactory
{
    ISomething Create();
}

public class SomethingFactory : ISomethingFactory
{
    public ISomething Create()
    {
        return new Something();
    }
}

Ответ 2

Я думаю, это означает, что вы никогда не должны возвращать конкретный тип с вашего завода.

Например, если у вас есть интерфейс, скажем, ISomething, абстрактный класс SomethingBase и, наконец, некоторые классы, которые реализуют этот интерфейс и наследуются от базового класса. Ваш метод создания должен возвращать тип интерфейса, а не базовый тип. Я думаю, что это идея.

public ISomething Create() { ... }

вместо

public SomethingBase Create() { ... }

Надеюсь, это поможет, Карлос.