对三层架构的简单改进
三层架构是很常见的架构方式,被很多公司所使用,特别是asp.net。优点是使用简单,缺点是BLL层与DAL层经常会很多重复。
今天不是要讨论它的优缺点,而是讨论使用它时存在的问题。
我们在使用过程中,BLL层一般不会用来存储持久化的变量,而且BLL经常被这样使用的:
SomeBLL bll=new SomeBLL( ); bll.doSomething( );
图1:DAL,BLL和Page的关系
这就有个问题,如果有十个页面需要访问这个类,那么就需要创建十次这个变量。如果同时有一千人在访问,那可能是一万个BLL对象。还有,每个BLL对象,还要new一个DAL对象……
当然,.net也不见得会这么傻,毕竟还有共用,垃圾回收机制等等。可是,我们真的有必要这么做吗?
由于BLL对象一般不是用来储存持久化变量,里面只有一些逻辑方法,那么我们是否可以只创建一次BLL对象,而且是所有浏览的用户都使用同一个对象呢?
当然是可以的,什么单例模式,什么工厂模式……今天,我们学一下 DataRow,也来使用一个自己的方式。
图2:改进的设计
我们使用BLLCreator来创建唯一的一个静态的SomeBLL。
public class BLLCreator { private static SomeBLL _someBll; public static SomeBLL CreateSomeBLL( ) { if(_someBll == null) { _someBll = new SomeBLL( ); } return _someBll; } } public class SomeBLL() { private SomeDAL someDal = new SomeDAL( ); protected internal SomeBLL() { // todo something init here } public void doSomething() { } } public class Page1:WebPage { SomeBLL someBll = BLLCreator.CreateSomeBLL( ); someBll.doSomething( ); }
搞定。以后无论多少人访问,永远是一个对象。当然,如果想用泛型什么的,自由发挥了。