ASP.NET(十一)--三层架构 

一、简单三层架构:

    无论是用webform前台传递数据到后台操作,还是用Ajax异步对象将页面数据传到一般处理程序(.ashx)去处理,增删查改、分页、登录还是对数据库的操作。如果数据的接收、逻辑的判断、和对数据库的操作都写在一起,则不利于扩展。为了实现“对修改封闭,对扩展开放”的原则,一般推荐使用三层架构。

1、三层架构:

1)界面层UI(User Interface)

2)业务逻辑层BLL(business logic layer )
3)数据访问层DAL(Data Access Layer)
4)实体层Model: 

2、引用关系:

UI层调用BLL、BLL调用DAL,UI不能直接调用DAL。数据用Model传递,所以UI、BLL、DAL层都会调用Model。 

3、各层分工:

    UI层负责前台页面展示。

    对数据进行操作的代码只应写在DAL中,SQL语句、ADO.Net的类一般只应该出现在DAL中。DAL只有对数据的操作,没有“如果金额大于20则不能删除”这样的逻辑。   

    BLL调用DAL中的代码进行逻辑操作,比如“如果金额大于20则不能删除”。BLL、DAL中的方法一般不声明为静态的,为以后工厂三层提供扩展
    Model是在三层之间进行数据传递的。Model不是一个层。

    三层和所有代码写在一起的区别就像分工明确的麦当劳和收钱、做饭一起的卖煎饼的区别。 

4、三层的优缺点:

    UI层和BLL打交道,不用处理SQL语句,没有复杂的代码,利于解耦,容易改变UI层技术。如果由Winform改成asp.net只要修改UI即可,如果由SQLServer改成Oracle只要修改DAL即可

    三层一般会比不分层慢,但是为了分工明确,这样的少量的性能下降是可以的,很多时候效率不是唯一追求的因素。 

二、简单工厂模式:
1、面向抽象原则:凡是可变的都要抽象。

2、先搭起三层架构:UI-BLL-IDAL-FACTORY-DAL-MODEL

3、引用关系:
0.数据接口层(IDAL):实体层(MODEL)
1.数据层(DAL):数据接口层(IDAL),实体层(MODEL)(DAL引用IDAL是为了实现接口.)
2.工厂层(Factory):数据接口层(IDAL),数据层(DAL),另一个数据层(MySqlDAL),config
3.业务层(BLL):数据接口层(IDAL),实体层(MODEL),工厂层(Factory)
4.表现层(UI):业务层(BLL),实体层(MODEL)
 
 4、DAL工厂:读取配置文件内容,选择实现接口的DAL层。
    由于面向抽象,BLL层只调用IDAL接口对象。至于由谁来具体实现IDAL层,则需要由工厂层(Factory)去读取配置文件,选择适当的DAL层去实现接口。这样做的好处是,如果要改变数据库,如由SqlServer改成MySql,只需要在配置文件上修改相应appsetting项则行。无需再修改代码。 

//工厂层:读取配置文件,提供选择实现数据接口层的静态方法
namespace Factory
{
   public class SimpleFactory
    {
       static string strSql = System.Configuration.ConfigurationManager.AppSettings["sql"].Trim();
 
          public static IDAL.IEnumeration GetIEnu()
        {
            if (strSql == "sql")
            {
                return new DAL.Enumeration();
            }
            else return MySqlDAL.Enumeration();
        }
}
//BLL层:调用工厂的静态方法去实例化接口对象(里氏替换原则父类指向子类),然后调用接口对象的方法。
private readonly IDAL.IBlogUser idal = Factory.SimpleFactory.GetDAL();idal.Add(id);
 
//IDAL是接口层,要加public访问修饰符,里面的方法不加访问修饰符:public interface IBlogUser()
{
void Add(int id);
}