• N层架构学习笔记(可下载实例代码)


    数据访问层、业务逻辑层、表示层、业务实体层;

    1、数据访问层的设计:首先定义一个接口,里面定义了对一张表或一个对象的增删改查操作,然后定义一个类去实现上面的接口;

    2、业务逻辑层:同样先定义一个接口,里面定义各种业务逻辑,然后定义一个类去实现上面的接口;

    3、表示层:引用业务逻辑层的接口,调用其中的方法;

    4、业务实体层;

    改进(1)

    泛型的引入:首先在设计数据访问层时,第一个接口就定义为泛型接口  

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace IData
    {
      public   interface IData<T>
        {
          IList<T> GetAll();
        }
    }
    

                                                                                           

    然后每个实体类去分别实现泛型接口:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using DomainTest;
    using IData;
    using System.Data.SqlClient;
    namespace IDataLLimpl
    {
       public  class CustomerDataimpl:IData<Customer>
        {
           public  IList<Customer> GetAll()
           {
               SqlConnection con = new SqlConnection(Connectionstring.str);
               SqlCommand cmd = new SqlCommand("select CustomerID,CompanyName from Customers", con);
               con.Open();
               SqlDataReader reader = cmd.ExecuteReader();
               IList<Customer> ls = new List<Customer>();
    
               while (reader.Read())
               {
                   Customer c = new Customer();
                   c.CustomerId = reader[0].ToString ();
                   c.CompanyName = reader[1].ToString ();
                   ls.Add(c);
               }
               con.Close();
               return ls;
           }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using IData;
    using DomainTest;
    using System.Data.SqlClient;
    using System.Configuration;
    namespace IDataLLimpl
    {
       public  class ProductDataimpl:IData<Product>
        {
          
           public IList<Product> GetAll()
           {  
               SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["constr"]);
               SqlCommand cmd = new SqlCommand("select ProductId,ProductName from Products",con);
               con.Open();
               SqlDataReader reader = cmd.ExecuteReader();
               List<Product> ls = new List<Product>();
               while (reader.Read())
               {
                   Product p = new Product();
                   p.Id = reader[0].ToString();
                   p.Productname = reader[1].ToString();
                   ls.Add(p);
               }
               con.Close();
               return ls;
           }
        }
    }
    

    这样一来数据访问层就基本实现了,如果以后需要增加业务对象,只需要直接继承和实现泛型接口,利于扩展,下面开始业务逻辑层的设计:

    这里需要也需要一个接口,里面定义了一些泛型方法:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using DomainTest;
    namespace IBLL
    {
       public  interface IBLLTest
        {
           IList<T> GetAll<T>();
        }
    }
    

    然后接着在另一个程序集里引用并实现这些泛型方法;

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using DomainTest;
    using IBLL;
    using IData;
    using IDataLLimpl;
    namespace Bllimpl
    {
       public  class BllimplTest:IBLLTest 
        {
           private IData<T> GetObj<T>( )
           {
               if (typeof(T) == typeof(Product))
               {
                   return (IData<T>)new ProductDataimpl();
               }
               else
               {
                   return (IData<T>)new CustomerDataimpl();
               }
            
           }
           public   IList<T> GetAll<T>()
           {
               return GetObj<T>().GetAll();
            }
        }
    }
    

    客户端调用:

     protected void Page_Load(object sender, EventArgs e)
        {
            IBLLTest h = new BllimplTest();
            GridView1.DataSource = h.GetAll<Customer>();
            GridView1.DataBind();
        }
    

    这样一个结构就算是基本完成了;引入泛型的好处是使得程序的扩展性更强,

    实例下载

    另外添加工厂设计模式,通过 IoC 或者 "配置反射" 来获得具体的数据层DAL实现类,可以减少层之间的耦合,也便于数据系统的替换(多层加IOC模式);

  • 相关阅读:
    代码规范
    今日头条广告投放
    网络广告计费方式CPM、CPA、CPS、CPT、CPC及比较分析
    dedecms arclist分页
    nginx配置http访问自动跳转到https
    阿里云《nginx服务器配置SSL证书》 配置参数
    JavaScript 通过身份证号获取出生日期、年龄、性别 、籍贯
    Bootstrap自适应各种设备
    css3动画大全
    golang
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/1876374.html
Copyright © 2020-2023  润新知