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() { ... }
Надеюсь, это поможет, Карлос.