压缩DAO层的类


Compress Classes of DAO layer

我正在处理一个MVC应用程序,它可以被认为是大的或中等的,它涉及MYSQL上的数百个功能和400多个表。作为一个ORM工具,我们通过依赖注入采用了Doctrine,还采用了DAO(数据访问对象)模式来存储每个实体类的查询,换句话说,每个表都有一个Entity类,每个Entity类都有一个子DAO类。

我不知道这是否正常,但问题是哪些DAO类变得越来越大,有些已经有30多个方法,每个方法代表一个查询或业务规则。

我们正在尝试以更通用和参数化的方式创建方法,此外,所有DAO类都是AbstractDAO类的子类,该类已经实现并提供了insert、update、find、list等通用方法。

你给我什么建议?一些技术、模式或工具,试图更多地压缩我的代码,或者至少更好地组织它?

如果不看代码和正在执行的查询类型,很难说。

我喜欢DAO方法的另一种选择是每个查询有一个类,这应该允许您在这些查询上有一些行为,最终可以减少类的数量。当然,在最坏的情况下,如果您有500个查询,您将以500个新类结束,这可能远非理想。

根据经验,这500个查询中的许多查询有很多共同点,相同的查询但有一个额外的参数,相同的询问但有分页,等等。如果这与您的情况相匹配,您可以使您的查询成为重用大部分代码的构建器。您还可以将某些常见的东西移动到基本查询类等。

另一个优点是,当你需要添加新的查询时,你只需要不断添加类,而不需要触摸你已经很大的、单片的DAO

看到我前段时间问的这个问题,是针对c#的,但同样的概念应该延续到php:建模NHibernate查询