java - 这是 DAO 管理器模式吗?适当的类和接口(interface)名称是什么?

标签 java oop design-patterns

我有一个接口(interface) SomethingDao 和一个实现类 SomethingDaoImpl。该接口(interface)仅包含 11 个方法,但每个方法都需要一个或多个复杂的 SQL 查询。

我将实现类分解为几个较小的类,我们称它们为 Helper1Helper2Helper3、... HelperN 因为缺乏更好的名字。 SomethingDaoImpl 每个都有一个实例,并将方法调用路由到每个。

public class SomethingDaoImpl implements SomethingDao {
    private Helper1 helper1;
    private Helper2 helper2;
    private Helper3 helper3;
    // ...
    private Helper8 helper8;

    public List<X> getX(...) {
        return helper1.getX();
    }

    public List<Y> getY(...) {
        return helper2.getY();
    }


    public List<X> getDetailedX(...) {
        List<X> ds = getX(...); 

        helper6.addTo(ds);
        helper7.addTo(ds);
        helper8.addTo(ds);

        return ds;
    }
}

这种技术有名字吗?一个复杂的 DAO 有几只“工蜂”来为它完成所有工作,而它只是管理它们?

这只是 DAO 管理器模式吗?其中 Helper1、Helper2、Helper3 是 DAO 对象?我对正确的命名约定感兴趣,因此在本例中,我会将 SomethingDaoImpl 重命名为 SomethingDaoManager,而 Helper 将变为 HelperDao .

我还看到名称“Service”被用来代替它,在这种情况下,SomethingDao 接口(interface)将被重命名为 SomethingService,并且工蜂类将携带DAO 位于其名称末尾。

谢谢...我想我只是在寻找与此场景相关的命名约定和设计模式。我希望实现尽可能清晰,并且具有表明我正在使用的模式的名称会非常有帮助。

最佳答案

IMO 该代码是“坏代码”模式,更准确地说是紧密耦合的代码。 8 个助手太多了,而且它显然是一个设计糟糕的对象。我知道这是 java,并且可能没有类似 c# 扩展方法之类的东西,这些方法非常适合帮助程序,所以我认为正确的方法是通过 DI 容器使用依赖注入(inject)。

每个需要 DAO 或服务的对象都会将它们作为抽象依赖项获取,大部分作为构造函数参数。

public class MyObject
{
    public MyObject(ISomeService serv,IRepository repo){}
} 

要点是,仅使用与上下文相关的对象,代码会将这些对象作为依赖项。我非常怀疑你可能需要 8 个 helper 来完成任何事情。如果是这样的话,那么该代码的作用就太大了,需要重新设计。

关于java - 这是 DAO 管理器模式吗?适当的类和接口(interface)名称是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16071103/

相关文章:

java - 构造函数 PrintWriter(BufferedWriter) 未定义

javascript - 重新评估的匿名构造函数的原型(prototype)绑定(bind)可追溯至原始实例化对象

Java方法流程状态设计

java - 在 ElasticSearch 中存储 News Feed 的最佳设计模式

java - Android中Content Provider的Uri中的 "content://"可以替换吗?

java - 删除父项和所有子项

php - 在面向对象的 PHP 中使用函数之前是否需要定义它们?

java - 使用对集合的接口(interface)引用

java - 序列循环

javascript - 在 JavaScript 中用字符串调用类