【问题标题】:What should be implemented in data layer and what in business layer?数据层应该实现什么,业务层应该实现什么?
【发布时间】:2018-08-01 07:41:44
【问题描述】:

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

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

【问题讨论】:

标签: c# data-layer business-layer


【解决方案1】:

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

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

【讨论】:

  • 不错的答案,具有有意义的表示。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2011-06-20
    • 2011-06-01
    • 1970-01-01
    • 2014-01-25
    • 2012-01-28
    • 2017-03-09
    • 2017-08-01
    • 2010-10-05
    相关资源
    最近更新 更多