关于Dao层职责的思考

一直被Dao层应该如何抽象,Dao职责如何划分这样的问题困扰,忽然间,我仿佛看到了真理。

  • 一个Dao只操作一个数据实体。Dao提供接口,你不用管接口怎么实现的(你别管接口的实现是否涉及了多张表,这是写Dao层代码的程序员该关注的问题)只要它实现了它的接口所描述的面向其数据实体的功能就行。

以前我对Dao的理解是下面这样的:

dao层只提供操作接口,不处理业务逻辑。也就是只处理数据存储的规约,而非业务逻辑。这一点需要特别注意。什么是存储规约?例如,数据类型转换。什么是业务逻辑?例如,你的sql语句出现了某些写死的固定状态查询,而这种固定状态代表了某种特定的业务。实际上你应该通过接收参数的方式来查询不同状态的数据。

这是不对的!!!存取数据本身就是业务的一部分,按照上面的逻辑思考这个问题,会出现业务逻辑因为分页,联表等操作被强行带入sql的问题。但如果按照新的原则来思考,Dao为一个确定的数据实体提供操作接口,问题就迎刃而解了!

这个原则没有限制Dao和表的一对一关系(也就是数据实体和表的关系),一个Dao可以对应多个表,也可以只对应一个表。不过我倾向于一对一的解决方案。

这个原则没有制约业务逻辑入侵sql,但由于Dao的操作是聚焦于一个特定数据实体的,其接口从某种意义上说,就只是数据存取。

猜你喜欢

转载自my.oschina.net/u/3039151/blog/1928964