在MVC架构中,Service层负责业务逻辑实现,Dao层负责和数据库交互。那么Dao层就有两种设计角度,以业务驱动和以数据驱动。以业务驱动,即每种业务都有对应的数据查询,Dao的接口也依据业务需求来定。比如按条件查询数据,若service中收到的根据业务制定的查询类为A,那么Dao中就应有根据A来查询的接口。这样设计,如果A和Dao中直接能用的查询类一致还好说。如果不一致,则Dao还需将A转换成它能直接用的查询类(如hibernate的Restriction或sql语句),再与数据库交互。这会导致Dao变得复杂庞大,因为它担负着两种功能。而且这样设计Dao与业务耦合度过高。若以数据驱动,则Dao可制定查询接口供Service使用。所有业务实现均和Dao的查询接口对接,可增加Dao的重复使用率,也可降低Dao层的复杂度。而Dao也应提供基础通用的方法。让Dao来提供查询接口也更符合单一权责原则。显然,以业务驱动,Dao难以避免地至少要承担两种责任(转换查询类和与数据库交互)。
Dao层设计
最新推荐文章于 2024-08-20 15:47:26 发布