Преобразование двухуровневой архитектуры в трехуровневую архитектуру - PullRequest
0 голосов
/ 02 октября 2018

Да, это уже заданный вопрос, и возможно быть рядом.Но я хочу точных ответов.

Я создал простую систему с использованием C #, я использовал 2-уровневую архитектуру, теперь я хочу перейти на 3-уровневую архитектуру, я прочитал много документации, блогов и вопросов.StackOverflow.Я хочу знать, правильное ли мое преобразование, или, если нет, пожалуйста, дайте мне знать.

Любые идеи окажут большую помощь.

Это мой код в 2-уровневой архитектуре:

 dtpfromdate.MaxDate = DateTime.Today;
 dtptodate.MaxDate = DateTime.Today;
 dtpfromdate.Value = DateTime.Today;
 dtptodate.Value = DateTime.Today;
 this.Text = FormName;     

 Db = new DBLayer.DBLayer();
 cmbRD.DataSource = Db.getRSetSQL("exec IMC_DCNE..usp_Get_Shift_Timing", DBLayer.DBLayer.SqlType.SqlQuery);
 cmbRD.DisplayMember = "Shift_Complete_Details";
 cmbRD.ValueMember = "Shift_Name";

Это мой код, когда я преобразую его в трехуровневую архитектуру:

 dtpfromdate.MaxDate = DateTime.Today;
 dtptodate.MaxDate = DateTime.Today;
 dtpfromdate.Value = DateTime.Today;
 dtptodate.Value = DateTime.Today;
 this.Text = FormName;

 Generate_Report_BL obj_Generate_Report = new Generate_Report_BL();
 Shift_Timing shift = new Shift_Timing();
 List<Shift_Timing> ShiftList = obj_Generate_Report.Get_Shift_Timing("Shift_Name", "Shift_Complete_Details");
 cmbRD.DisplayMember = shift.Shift_Name;
 cmbRD.ValueMember = shift.Shift_Complete_Details;

Это мой бизнес-уровень:

public class Generate_Report_BL
{
    public List<Shift_Timing> Get_Shift_Timing(string strShift_tName, string str_Shift_Complete_Details)
    {
        List<Shift_Timing> lstUser = new List<Shift_Timing>();
        try
        {
            DataSet ds = Application_Level_Processing_DL.Get_Shift_Timing(strShift_tName,str_Shift_Complete_Details);
            if (ds != null && ds.Tables.Contains("Shift_Timing"))
            { 
                lstUser = new Shift_Timing().getShift_Timing(ds.Tables["Shift_Timing"]);
            }
        }
        catch
        {
            throw;
        }
        return lstUser;
    }
}

Это мой код для уровня данных:

 public static DataSet Get_Shift_Timing(string strShift_tName, string str_Shift_Complete_Details)
    {
            DataSet dsReturn = new DataSet();
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand command = db.GetStoredProcCommand("usp_Get_Shift_Timing");
            db.AddInParameter(command, "@Shift_Name", DbType.String, strShift_tName);
            db.AddInParameter(command, "@Shift_Complete_Details", DbType.String, str_Shift_Complete_Details);
            db.ExecuteDataSet(command);
            if (dsReturn != null && dsReturn.Tables.Count > 0)
            {
                dsReturn.Tables[0].TableName = "Shift_Timing";
            }
            return dsReturn;
    }

И это класс:

public class Shift_Timing
{
    public int Shift_ID { get; set; }
    public string Shift_Complete_Details { get; set; }
    public string Shift_Name { get; set; }
    public string Shift_From { get; set; }
    public string Shift_To { get; set; }
    public string RD_Code { get; set; }
    public string From_Date { get; set; }
    public string To_Date { get; set; }

    public List<Shift_Timing> getShift_Timing(DataTable dtShiftTime)
    {
        List<Shift_Timing> lstEntry = new List<Shift_Timing>();
        try
        {
            if (dtShiftTime.Rows.Count > 0)
            {
                lstEntry = dtShiftTime.AsEnumerable().Select(r => new Shift_Timing
                {
                    Shift_ID = r.Field<int>("Shift_ID"),
                    Shift_Complete_Details = r.Field<string>("Shift_Complete_Details"),
                    Shift_Name = r.Field<string>("Shift_Name"),
                    Shift_From = r.Field<string>("Shift_From"),
                    Shift_To = r.Field<string>("Shift_To"),
                    RD_Code = r.Field<string>("RD_Code"),
                    From_Date = r.Field<string>("From_Date"),
                    To_Date = r.Field<string>("To_Date"),
                }).ToList();
            }
        }
        catch
        {
            throw;
        }
        return lstEntry;
    }
}

1 Ответ

0 голосов
/ 02 октября 2018

Для меня общее преобразование выглядит нормально с парой предложений (IMHO):

  • Должен быть общий бизнес-объект между уровнем данных и бизнес-уровнем.Идея состоит в том, что если вы хотите изменить методологию доступа к данным завтра, это не должно повлиять на ваш бизнес-уровень.В основном ваша основная бизнес-логика не должна иметь никакого влияния на внешние факторы, такие как то, как вы сохраняете данные, как вы представляете данные в пользовательском интерфейсе и т. Д.
  • Указанный выше пункт также применим, когда вы разделяете контракты между BL и UI (Shift_Timing вваш пример) Обычно это может быть достигнуто через сервисный адаптер между ними, который может позаботиться о преобразовании BO в модель пользовательского интерфейса и наоборот.
  • Возможно, вы захотите внедрить зависимость вашего уровня данных в свой BL и получить к нему доступ.через interface.Это сделало бы ваш дизайн расширяемым.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...