如何使类使用特定方法

本文关键字:方法 何使类 | 更新日期: 2023-09-27 18:31:07

我正在努力改进编写代码的方式,这是我最近遇到的问题之一,它给了我相当大的头。

我正在使用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();
    }
}

这导致了一些问题,因为存储库可以使用不同的配置文件并且工作正常,没有人会注意到错误。对于不同的配置,存储库的结果将始终为 0。不会有任何错误。

现在我的问题是:

如何使存储库使用特定于 ony 的类。

例如,对于 obj 类型 PlannedShiftsEvent 仅使用静态类 NHibernateHelperScheduler 中的方法。这里应该通过接口使用某种合约吗?

干杯!

如何使类使用特定方法

如果我正确理解你的问题,这听起来更像是一个设计问题。我建议研究一些 GOF 设计模式,例如桥和访客设计模式。我看到您已经在使用工厂模式的良好实现,所以也许您应该研究其他一些。