Что должно быть реализовано на уровне данных, а что на бизнес-уровне?

Я все еще путаю в том, что должно быть закодировано на уровне данных и на уровне бизнеса. потому что некоторые из методов могут быть реализованы в обеих темах. например, я хочу, чтобы сотрудники работали между двумя датами или чем-то вроде этого. поэтому я должен сделать это в 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 ответа

Во многих случаях, особенно с большими наборами данных; Вы хотите, чтобы такой метод был на уровне данных. Я также утверждаю, что это должно быть там в любом случае; запросы между двумя датами не являются бизнес-логикой.

Причина, по которой вы хотите это на своем уровне данных, заключается в том, что, поместив его туда, вы можете получить логику как можно ближе к реальному запросу БД (в идеале в самом запросе); таким образом, позволяя механизму БД выполнять фильтр (что они довольно хорошо умеют) вместо того, чтобы возвращать в программу кучу данных, которые вам на самом деле не нужны (потенциально по сети!), и заставить его выполнять этот фильтр.

Эмпирическое правило: если это просто запрос и все, что он делает, это общается с базой данных, он принадлежит к уровню данных (это ваш случай). Но если есть бизнес-правила относительно того, каких сотрудников вы получаете, это должно перейти на бизнес-уровень. Пожалуйста, прочитайте это для более подробной информации.

Другие вопросы по тегам