A “tall” DAO factory can be defined as a big class that contains too much methods for each business class that compounds your domain model.
public class DAOFactory
{
GetClass1DAO() { ... }
IClass1DAO GetClass2DAO() { ... }
IClass2DAO GetClass3DAO() { ... }
IClass3DAO GetClass4DAO() { ... }
IClass4DAO GetClass5DAO() { ... }
IClass5DAO GetClass6DAO() { ... }
IClass6DAO GetClass7DAO() { ... }
IClass7DAO GetClass8DAO() { ... }
IClass8DAO GetClass9DAO() { ... }
IClass9DAO GetClass10DAO() { ... }
IClass10DAO : : : :
}
Besides big, these kind of class should be modified every time a new domain class is added to your system.
In order to avoid that to happen, one good option is to use a generic method for all DAO interfaces.
public class DAOFactory
{
< I > ( ) where I : ICommonDAO { ... }
ICommonDAO GetDAO }
The action of searching the corresponding DAO interface implementation can be easily achieved by using .NET reflection support for Assemblies and Types.