关于Dao层职责的思考

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

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

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

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

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

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

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

相关文章
相关标签/搜索