使用NHibernate编写可重用的组件DataBase

时间:2013-01-22 15:23:06

标签: c# nhibernate design-patterns reusability

我正在尝试使用NHibernate编写可重用的类/项目DataBase(也许Fluent但我不知道)所以我可以在任何解决方案中添加类/项目。< / p>

我有这段代码:

public class DataBase
{
    private ISession _session;
    private static DataBase _instance;

    public static DataBase Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new DataBase();
            }
            return _instance;
        }

    }

    private DataBase(Assembly assembly)
    {
        var cfg = new Configuration();
        cfg.Configure();
        cfg.AddAssembly(assembly);
        this._session = cfg.BuildSessionFactory().OpenSession();
    }

    public void SaveAll<T>(IEnumerable<T> objects)
    {
        foreach (object obj in objects)
        {
            T specificObject = (T)obj;
            _session.Save(specificObject);
        }
        _session.Flush();
    }
}

但是带参数的单身人士并不是一个好主意。创建此组件的最佳方法/模式是什么?

1 个答案:

答案 0 :(得分:2)

我预测你将继续努力,直到随着时间的推移,DataBase类几乎暴露了NHibernate.Cfg命名空间和ISession接口所暴露的任何东西。

根据我的经验,自举代码通常是项目特定的,不能重复使用(很多)。

包装ISession API和/或查询方法通常不是一个好主意,因为最终,当在几个项目和几年中使用时,您将不得不包装所有内容。

总之,要小心包装。然而,封装和抽象可能是有用的,可以使您的代码避免重复并且更易于理解。它还可能导致NHibernate暴露于代码的较小部分。