最近有许多网友在谈论三层的结构,我也来凑个热闹
以下纯属天南地北,说的错了,各位大哥不要奸笑:>
对于采用分层的模式,一直是不太明白
对于三层的理解是:表示层、逻辑层、数据层
他们的关系可能是
:没有层依赖表示层,但是
:表示层依赖逻辑层和数据层、逻辑层依赖数据层
好象是一种层层依赖的关系,虽然满足了上层只依赖下层的原则。但是这样逻辑层依赖数据层。
在逻辑层中的代码,有的时候要这样写,来调用数据层:
new dataaccess.dbdoc().addDoc() ;
//调用数据层的具体的类的方法
我们很多的时候是想把逻辑层给完全对立出来,因为一般来说,这一层是最有用的,也是最有价值进行复用的。
但是我们看到上面的情况是逻辑层依赖数据层,那么要真正的实现逻辑层的独立,就要脱离数据层的束缚,或者说是把逻辑层的职责进一步进行分离,把更抽象的逻辑独立出来。
设计模式说,要针对接口编程,就是要针对抽象,不要针对具象。
昨天回家没事,就想了这个问题,那么要消除逻辑层和数据层的依赖,就要定义他们的一个抽象接口,但是象上面的那种语句最好不要包含在真正的逻辑层,放到数据层也不合适,放到我们上面说的将要定义的接口也不可以,因为接口是不可以包含逻辑的。
那么,就最好就定义一个新的层,他的作用是:
1.消除逻辑层对数据层的依赖
2.协调逻辑层和数据层的工作
3.对表示层提供一个统一的接口
那么上面的代码就变成了:
//在newlayer中
1.
//调用逻辑层的逻辑方法
2.
//调用数据层的具体的类的方法
new dataaccess.dbdoc().addDoc() ;
3.
//继续调用逻辑层的逻辑方法
对于上面的代码实现好象有点把一个完整的逻辑拆分的很分散了,那么可以在逻辑层中使用模板模式来定义一个实现的框架,那么可能好一点
比如:
本来在逻辑层中代码如下:
//逻辑1
//new dataaccess.dbdoc().addDoc() ;
//逻辑二
那么添加新的层newlayer后,
逻辑层的代码可能如下:
//逻辑1
//virtual addDoc()
//逻辑二
新的层newlayer,继承上面的类,实现上面的虚函数
virtual addDoc()
{
new dataaccess.dbdoc().addDoc() ;//调用数据层
}
咦,好象有点象外观模式吗,当初看petshop还不是什么示例的时候听说过,也没有意识到有什么好处呀,不就是提供一个统一的外观吗。
不管类试什么模式,上面是小弟的一些学习中的不成熟的思考,大家路过的看个热闹,是好淫的再指点一下小弟(不是说不指点的就不是好人了:>)
发表于 @ 2005年04月09日 10:15:00 | 评论( loading... ) | 举报| 收藏