应该在数据层中实现什么以及在业务层中实现什么?

时间:2018-02-21 16:24:39

标签: c# data-layer business-layer

我仍然在应该在数据层和业务层编码的内容中感到困惑。因为有些方法可以在两个主题中实现。例如,我希望在两个日期或类似事件之间使用Employs。我应该在BL或AL中这样做。

namespace DataLayer
{
    public class EmployeRepository : IEmployeRepository
    {
        public List<Employe> GetList()
        {
            using (ADON3Entities db = new ADON3Entities())
            {
                return db.Employes.ToList();
            }
        }

        public List<Employe> GetEmploysBetweenDates(DateTime start, DateTime end)
        {
            using (ADON3Entities db = new ADON3Entities())
            {
                return db.Employes.Where(em => em.NaissEmploye >= start && em.NaissEmploye <= end).ToList();
            }
        }

    }
}

或者我应该这样做:

namespace BusinessLayer
{
    public static class EmployeServices
    {
        static IEmployeRepository repository;

        static EmployeServices()
        {
            repository = new EmployeRepository();
        }

        public static List<Employe> GetList()
        {
            return repository.GetList();
        }

        public static List<Employe> GetEmploysBetweenDates(DateTime start, DateTime end)
        {
            return repository.GetList().Where(em => em.NaissEmploye >= start && em.NaissEmploye <= end).ToList();
        }
   }
}

感谢先进的任何帮助或参考,以了解树层架构!

2 个答案:

答案 0 :(得分:4)

在许多情况下,特别是对于大型数据集;您希望这种方法在数据层中。我还会争辩说它应该在那里;在两个日期之间查询不是业务逻辑。

您希望它在数据层中的原因是,通过将其放在那里,您可以获得尽可能接近实际数据库查询的逻辑(理想情况下在查询本身中);从而允许数据库引擎做过滤器(它们非常擅长),而不是将一堆你实际上并不需要的数据(可能是通过网络!)返回给程序并让它进行过滤。

答案 1 :(得分:0)

经验法则是,如果它只是一个查询而且它所做的只是与数据库交谈,它属于数据层(这是你的情况)。但是,如果有关于您要检索的员工的业务规则,则应该进入业务层。有关详细信息,请阅读this