我对dnn三层体系结构的理解(2):
Dnn在DataProvider.vb中应用了Reflection factory模式和Singleton 模式,对这里Singleton 模式的应用理解的不透彻。
我思考的过程:
Singleton的应用场景是什么?全局访问和实例化控制。
全局化访问好理解,为什么只能有一个实例我就不是很明白了。
我能想到的原因:
1. dataprovider实例因为长期使用,而且其本身占用资源较高,使用Singleton模式保证系统中只有一个静态实例,用长期占用空间换取因实例化而造成的时间上的浪费,以提高性能。这个原因只是为了提高性能,并不是必需的,那么这里有没有一个必需使用的原因呢?
2.DataProvider是对数据库的一层抽象,或者说一个代理层,为其上层的业务逻辑层提供数据(通过idatareader),如果没有这层那么在业务逻辑层的对象中就需要写sql语句直接从数据库中取数据然后把取得的数据赋值给它的属性,在这种情况下业务对象访问的数据库只有一个!既然DataProvider是数据库之上的一个抽象层,那么只存在一个实例也是合情合理的。
我不知道理解的对不对,期盼高手指点。
学习了dnn的数据访问策略才真正明白什么是三层体系结构,像我们公司的门户系统及其他产品,号称是三层体系结构,在业务逻辑对象中写入sql语句,而且在业务逻辑对象的方法中直接返回表示层的东西,比如类似printweblist( out strHtml), strHtml 是一个经过格式控制的列表(<table> <tr>……)(令人崩溃) ,其实根本不分层,因为任何一层都和其他层都是紧耦合,改变了某一层是绝对要影响到其他层的,我跟同事说咱们的产品是一层结构,他们还认为我是开玩笑呢,呵呵