DDD Book, Эрик Эванс: Что означает "ФАБРИКА должна быть абстрагирована к желаемому типу, а не к созданному конкретному классу (классам)"?

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

"Два основных требования к любому хорошему ЗАВОДУ:

...

"2. ФАБРИКА должна быть абстрагирована к желаемому типу, а не к созданному конкретному классу (классам)".

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

2 ответа

Решение

Карлос Лот ответит правильно, но вы всегда должны помнить об использовании Абстрактной фабрики, поскольку это позволит вам соединять конкретные фабрики с конкретными типами, не привязывая потребителей к конкретным фабрикам или типам.

public interface ISomethingFactory
{
    ISomething Create();
}

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

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

public ISomething Create() { ... }

Вместо

public SomethingBase Create() { ... }

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

Другие вопросы по тегам