четверг, 25 октября 2012 г.

5."Пейджинг" в ASP.NET из БД OПодготовка слоя бизнес логики).racle (

После подготовки слоя доступа к данным, пришло время слоя бизнес логики.
В классе BLLJobs производится подключение к DAL слою (вот тут и пригодился инстанс, сконфигурированный в JobsProvider) извлечение DAL объектов, упаковка их в BLL объекты и предоставление пользовательскому интерфейсу.

using System;
using System.Collections.Generic;
using System.Linq;

namespace Paging
{
    /// <summary>
    /// //Реализуем BLL
    /// </summary>
    public class BLLJobs
    {
        public BLLJobs()
        {
            JobNm = String.Empty;
            JobId = 0;
        }

        public BLLJobs(String jobNm)
        {
            JobId = 0;
            JobNm = jobNm;
        }

        public BLLJobs(Int32 jobId, String jobNm)
        {
            JobId = jobId;
            JobNm = jobNm;
        }

        public int JobId { get; set; }
        public string JobNm { get; set; }

        //Упаковка объекта из DAL слоя в объект BLL слоя
        private static BLLJobs GetJobFromDalJobs(JobDetails record)
        {
            if (record == null)
                return null;
            var bllJob = new BLLJobs(record.JobId, record.JobNm);
            return bllJob;
 
        }
        //Получение списка BLL объектов
        private static List<BLLJobs> GetListJobsFromDalJobs(List<JobDetails> recordset)
        {
            return recordset.Select(record => GetJobFromDalJobs(record)).ToList();
        }

        //Метод для ObjectDataSource
        public static List<BLLJobs> GetJobs()
        {
            var daLjobscoll = JobsProvider.Instance.GetJobs();
            var blLjobscoll = GetListJobsFromDalJobs(daLjobscoll);
            return blLjobscoll;
        }
        //Метод для ObjectDataSource
        public static BLLJobs GetJobById(Int32 jobId)
        {
            var job = JobsProvider.Instance.GetJobById(jobId);
            var blljob = GetJobFromDalJobs(job);
            return blljob; 
        }
    }
}

Есть некоторое отличие в BLL классе BLLEmployees - придется добавить метод для пейджинга:GetPageIndex, который рассчитывает индекс страницы. в обоих классах BLL слоя совмещены функционал и создание свойств - оберток объекта DAL слоя. Разумно было бы разнести эти моменты в разные классы - но в небольшом демонстрационном проектике все таки внимание больше заострено на самом пейджинге, нежели на проектировании архитектуры. Итак класс BLLEmployees содержит методы, позволяющие подключиться к DAL слою через инстанс (методы GetEmployeeFromDalEmployees и GetListEmployeesFromDalEmployees ), получить данные, упаковать их в BLL объекты и предоставить объекту ObjectdataSource для последующей визуализации.


using System;
using System.Collections.Generic;
using System.Linq;

namespace Paging
{
    /// <summary>
    /// //Реализуем BLL
    /// </summary>
    public class BLLEmployees
    {
        public BLLEmployees()
        {
            LastName = "";
            FirstName = "";
            JobId = 0;
            EmpId = 0;
        }

        public BLLEmployees(Int32 empId, Int32 jobId, String firstName, String lastName, Double salary)
        {
            EmpId = empId;
            JobId = jobId;
            FirstName = firstName;
            LastName = lastName;
            Salary = salary; 
        }

        public int EmpId { get; set; }

        public int JobId { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public double Salary { get; set; }
       
        public String FullName
        {
            get {return LastName + "  " + FirstName;}
           
 
        }

        //Упаковка объекта из DAL слоя в объект BLL слоя
        private static BLLEmployees GetEmployeeFromDalEmployees(EmployeeDetails record)
        {
            if (record == null)     
                return null;

            var BLLEmployee =
                new BLLEmployees(record.EmpId, record.JobId, record.FirstName, record.LastName, record.Salary);
     
            return BLLEmployee;
 
        }
        //Получение списка BLL объектов
        private static List<BLLEmployees> GetListEmployeesFromDalEmployees(List<EmployeeDetails> recordset)
        {
            if (recordset == null)
                return null;
            return recordset.Select(record => GetEmployeeFromDalEmployees(record)).ToList();
        }

        //Метод для ObjectDataSource
        public static List<BLLEmployees> GetEmployees(int jobId, int startRowIndex, int maximumRows, String employeesSort)
        {     
            List<BLLEmployees> listEmployees;
            var recordset =                 EmployeesProvider.Instance.GetEmployees(jobId,GetPageIndex(startRowIndex,maximumRows),maximumRows,employeesSort);
            listEmployees = GetListEmployeesFromDalEmployees(recordset);
            return listEmployees; 
        }


        //Метод для ObjectDataSource
        public static Int32 GetEmployeesCount(Int32 jobId)
        {
            int employeesCount = EmployeesProvider.Instance.GetEmployeesCount(jobId);
            return employeesCount;
        }

        //Расчет индекса страницы для пейджинга
        protected static int GetPageIndex(int startRowIndex, int maximumRows)
        {
            if (maximumRows <= 0)
                return 0;           
                return (int)Math.Floor(startRowIndex / (double)maximumRows);
        }

        //Обновление колонки "Salary"
        public static bool UpdateEmployee(Int32 empId,Double salary)
        {
            var employee = new EmployeeDetails(empId,0, "", "", salary);
            var ret =  EmployeesProvider.Instance.UpdateEmployee(employee);
            return ret;  
        } 
    }
}

В следующем разделе создадим объекты пользовательского интерфейса и настроим их на соответствующие классы BLL.

Комментариев нет:

Отправить комментарий