0

我仍然对数据层和业务层应该编码的内容感到困惑。因为一些方法可以在两个主题中实现。例如,我想要两个日期之间的 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();
        }
   }
}

并提前感谢任何帮助或参考以了解树层架构!

4

2 回答 2

4

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

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

于 2018-02-21T16:31:02.713 回答
0

经验法则是,如果它只是一个查询并且它所做的只是与数据库通信,它属于数据层(这是你的情况)。但是,如果有关于您要检索的员工的业务规则,那应该进入业务层。请阅读本文了解更多详情。

于 2018-02-21T16:36:13.300 回答