web服务程序设计探索(1)——俄罗斯套娃模型
一、模型图
“service/logic/dao/db”是一种非常常见的分层架构,从代码层次上看,同一层次代码可以放在同一个package,或以…Logic, …Dao等类名来区分;在程序实现处理过程中,都严格遵循上层调用下层函数的方式进行,不会出现跨层、反向调用,一直调用到最底层。
二、优点
在使用过程中,感觉到这种模型的好处就是比较简单,对于每一个请求,都是一层一层代码往下写,如果下层代码可复用,就直接调用,如果不能复用,则新增接口。
三、缺点
层次之间耦合性强
层与层之间通过函数调用,层层包裹,下一层的变动,对上一层都会带来影响;上层还需要对下层抛出的异常进行处理;这使得每一层都不是真正独立的,很难保证各层的稳定性;
副作用
这种俄罗斯套娃模型,最里层是带副作用的数据库操作或网络读写操作,这中副作用从里到外污染了整个程序。因为逻辑处理过程中的一些数据来源于数据库文件、网络数据、随机值等,而这些数据来源很可能被别人修改,使得处理过程不能被稳定测试。
另外,如果在逻辑处理代码中,存在没有返回值的写操作,这些副作用的操作,相当于给逻辑处理代码暗藏下一颗“雷”,这颗雷暗藏的效果是不会体现在逻辑处理函数返回值中的,而一旦爆炸,则会炸毁整个处理逻辑。
测试复杂
要想测试这种带副作用的逻辑,一种方式是为测试用例提供一个真实稳定的数据来源(如稳定的数据库,远程网络服务);另一种方法是使用mock的方法来指定副作用的结果;这些都是副作用带来的额外工作。