DDD Book, Эрик Эванс: Что подразумевается под «FACTORY должна быть абстрагирована к желаемому типу, а не к созданному конкретному классу (классам)»? - PullRequest
7 голосов
/ 03 февраля 2010

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

"Два основных требования для любого хорошего ЗАВОДА:

...

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

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

Ответы [ 2 ]

10 голосов
/ 03 февраля 2010

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

public ISomething Create() { ... }

Вместо

public SomethingBase Create() { ... }

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

8 голосов
/ 04 февраля 2010

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

public interface ISomethingFactory
{
    ISomething Create();
}

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