Eric Evans 著 Domain Driven Design の第 6 章「ファクトリ」セクション (139 ページ) では、次のように述べられています。
「優れた FACTORY の 2 つの基本的な要件は次のとおりです。
...
「2. FACTORY は、作成された具体的なクラスではなく、必要なタイプに抽象化する必要があります。」
基本要件番号 2 に関するそのステートメントの意味を詳しく説明していただけますか。
Eric Evans 著 Domain Driven Design の第 6 章「ファクトリ」セクション (139 ページ) では、次のように述べられています。
「優れた FACTORY の 2 つの基本的な要件は次のとおりです。
...
「2. FACTORY は、作成された具体的なクラスではなく、必要なタイプに抽象化する必要があります。」
基本要件番号 2 に関するそのステートメントの意味を詳しく説明していただけますか。
工場から具体的な型を返してはならないということだと思います。
たとえば、インターフェースがある場合ISomething
、抽象クラスSomethingBase
と、最後にこのインターフェースを実装して基本クラスから継承するいくつかのクラスがあります。作成メソッドは、基本型ではなくインターフェイス型を返す必要があります。それが考え方だと思います。
public ISomething Create() { ... }
それ以外の
public SomethingBase Create() { ... }
カルロス・ロスの答えは正しいですが、抽象ファクトリも使用することを常に忘れないでください。これにより、消費者を具体的なファクトリまたはタイプに結合することなく、具体的なファクトリを具体的なタイプに結合できるようになります。
public interface ISomethingFactory
{
ISomething Create();
}
public class SomethingFactory : ISomethingFactory
{
public ISomething Create()
{
return new Something();
}
}