Search code examples
oopdomain-driven-designfactory-pattern

DDD Book, Eric Evans: What is meant by "The FACTORY should be abstracted to the type desired rather than the concrete class(es) created."?


In the book Domain Driven Design, by Eric Evans, in Chapter 6 in the section on "Factories" (page 139) it says the following:

"The two basic requirements for any good FACTORY are:

...

"2. The FACTORY should be abstracted to the type desired rather than the concrete class(es) created."

Could you please elaborate on what is meant by that statement about basic requirement number 2.


Solution

  • Carlos Loth's answer is correct, but you should always remember to use an Abstract Factory as well, as this will allow you to couple concrete factories to concrete types without coupling consumers to concrete factories or types.

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