我正在努力改进我编写代码的方式,这是我最近遇到的问题之一,它给了我很多的基础。
我正在使用NHibernate作为ORM。
在我的存储库中,我使用静态类(即NHibernateHelperScheduler)来打开会话:
public class PlannedShiftsRepository : Repository<PlannedShiftsEvent>
{
///<summary>
///Get all records for provided machine_id
///</summary>
public IList<PlannedShiftsEvent> SelectForMachine(string machine_id)
{
using (ISession session = NHibernateHelperScheduler.OpenSession())
{
var myList = session.Query<PlannedShiftsEvent>().Where(c => c.machine_id == machine_id).ToList();
return myList;
}
}
}
问题是我有多个NHibernateHelper类,它们具有不同配置,适用于某些配置方面不同的不同数据库。
public class NHibernateHelperScheduler
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var NHibernateConfig = new Configuration();
NHibernateConfig.Configure(HttpContext.Current.Server.MapPath(
@"~\Models\NHibernate\hibernate.cfg.xml"), "Scheduler");
NHibernateConfig.AddDirectory(new System.IO.DirectoryInfo(HttpContext.Current.Server.MapPath(
@"~\Models\NHibernate\Mapping\Scheduler")));
_sessionFactory = NHibernateConfig.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
这导致了一些问题,因为存储库可以使用不同的配置文件并且工作正常,没有人会注意到错误。对于不同的配置,repo的结果将始终为0.不会有任何错误。
现在我的问题是:
如何使存储库使用特定的类。
例如,对于obj类型,PlannedShiftsEvent仅使用静态类NHibernateHelperScheduler中的方法。是否应该通过接口使用某种合同?
干杯!
答案 0 :(得分:0)
如果我理解你的问题,这听起来更像是一个设计问题。我建议研究一些GOF设计模式,例如Bridge和Visitor设计模式。我看到你已经在使用Factory模式的一个很好的实现,所以也许你应该看看其他一些。