【三层转七层】——起航篇

来源:互联网 发布:网络精灵怎么关闭 编辑:程序博客网 时间:2024/05/22 06:19

【背景】

    三层的学习拖了好久,出于对七层的无知,迟迟不肯进行七层的学习,看着今目标上项目时间又要到期,奈何该来的总是会来的,该学的总是要学的,不能再给自己创造一个继续拖拉的温床,始终相信一分耕耘一分收获,如果不去做,一切梦想就都是幻想,脚踏实地,改变坏习惯,从现在开始,下面就来进行三层转七层吧!

【三层回顾】

    三层是指界面层(UI)、业务逻辑层(BLL)、数据访问层(DAL),UI层主要是提供给用户一个视觉上的界面,通过界面层,用户输入数据、获取数据。界面层同时也提供一定的安全性,确保用户不用看到不必要的机密信息;BLL层是界面层和数据访问层的桥梁,它响应界面层的用户请求,执行任务并从数据层抓取数据,并将必要的数据传送给界面层;DAL层数据层定义、维护数据的完整性、安全性,它响应逻辑层的请求,访问数据。这一层通常由大型的数据库服务器实现,如Oracle 、Sybase、MS SQl Server等。

一张图来说明三层架构:


【七层学习】

     所说的七层就是在三层的基础上多加了两个设计模式,分别是外观模式和抽象工厂模式,外观层(Facade层)、工厂层(Factory)、接口层(IDAL),对三层的扩充,分的层多了,相互依赖性就少了,这就在向"高内聚低耦合"的程序设计方向靠拢,七层对于三层来说,帮助三层解决更加复杂的问题,在更加庞大,业务逻辑复杂的程序中应用较多。

     一张包图,把握全局观


根据图来了解七层

  Facade层:用来分离UI层和BLL层;

 外观模式:为子系统中的一组接口提供一个统一的入口,定义了一个高层接口,这个接口使得这一子系统更加容易使用,通过引入一个新的外观角色来降低原有系统的复杂度,同时降低客户类与子系统的耦合度。

由于在外观类中维持了对子系统对象的引用,客户端可以通过外观类来间接调用子系统对象多个业务方法,而无须与子系统对象直接交互,引入外观类后,客户端代码变得非常简单,其典型代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">class program {  static void Main(string[] args)  {    Facade facade = new Facade();    facade.Method();   }}</span>

Factory层:创建一个接口类层中的那个空方法类型的方法(这个行为叫……[空方法的实体化]),通过读取Config文件中的数据来控流数据库(调节是进入 那一个DAL层),将一个指定的DAL 层中的一个指定的类反射到接口层一个指定的接口类,所以工厂层返回的最终结果是一个接口类(DAL层因为数据库不同而产生分支,这里就是指定到某一个确定的分支)。工厂类的作用是将接口类中抽象方法的实体反射给接口,表现在将DAL类库中指定的类返回给相应的接口类对象。 。为了方便更换数据库,同时将DAL层中的类转换成IDAL层的接口。

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。

在实际应用开发中,可以对具体工厂的实例化过程进行改进,在客户端代码中不直接使用new关键字来创建工厂对象,而是将具体工厂类的类名存储在配置文件(例如XML文件)中,再通过程序集的反射机制,读取配置文件中存储的类名字符串生成对象。

反射+配置文件

<span style="font-family:KaiTi_GB2312;font-size:18px;">//导入命名空间using system.Reflection;object obj =Assembly.Load("程序集名称").CreateInstance("命名空间.类");</span>

客户端代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;">using System;using System.Configuration;using System.Reflection;namespace FactoyMethodSample{   class Program   {      static void Main(string[] args)      {       LoggerFactory factory;  //针对抽象工厂类编程       Logger logger;          //针对抽象产品类编程       //读取配置文件       string factorystring = ConfigurationManager.AppSetting["factory"];       //反射生成对象       factory = (LoggerFactory)Assembly.Load("FactoryMethodSample").CreatInstance(factoryString);       logger = factory.CreateLogger();       logger.WriteLog();       Console.Read();       }    }}</span>

SqlHelper:SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

【总结】

     无论做什么事,不管熟悉还是不熟悉,不要被内心的恐惧所打倒,一切还没有开始,just do it !

     不足之处,希望路过的你多多指教!

0 0