我正在使用nHibernate。 我的类是POCO,用我的数据库表1:1映射。 我创建了一个IGenericDAO - > GenericDAO完成我所有的基本CRUD。 (资料库) 每个表都有一个DAO类,所以:
公共类UserDAO:GenericDAO
任何特定于表的查询都将在tableDAO类中进行。
然后我有一个工厂,IDAOFactory。
public class NHibernateDAOFactory : IDAOFactory
{
public static UserDAO GetUserDAO()
{
return new UserDAO();
}
}
可能的改进: 1.就这样,我的网络应用程序不会乱丢:
IDAOFactory dbFactory = new NHibernateDAOFactory();
我在想创造:
public class DAOFactoryFactory
{
public static IDAOFactory Load()
{
return new NHibernateDAOFactory();
}
}
这样我就可以在需要交换数据库层的情况下进行单点更改。 (即在linq2sql和nhibernate之间切换,但不确定实际上是否可行)
关于如何改进这一点的任何建议/指示,还是这个非常可靠?
答案 0 :(得分:1)
您可以考虑使用DI容器,而不是希望只有一个地方({1}}工厂保护您免受进一步的更改。此外,调用工厂方法new
有点令人困惑 - 为什么不调用它Load
?
答案 1 :(得分:0)
您将能够交换ORM实现的机会很小甚至没有。我会使用IoC容器(StructureMap)。定义Dao的接口,然后通过ioc容器将它们注入到您的服务中。