Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是DAO管理器模式吗?什么是合适的类和接口名称?_Java_Oop_Design Patterns - Fatal编程技术网

Java 这是DAO管理器模式吗?什么是合适的类和接口名称?

Java 这是DAO管理器模式吗?什么是合适的类和接口名称?,java,oop,design-patterns,Java,Oop,Design Patterns,我有一个接口,SomethingDao,还有一个实现类,SomethingDaoImpl。该接口仅由11个方法组成,但每个方法都需要一个或多个复杂的SQL查询 我将实现类分为几个较小的类,让我们称它们为Helper1,Helper2,Helper3帮助者因为没有更好的名字。SomethingDaoImpl每个都有一个实例,并将方法调用路由到每个实例 public class SomethingDaoImpl implements SomethingDao { private Helper

我有一个接口,
SomethingDao
,还有一个实现类,
SomethingDaoImpl
。该接口仅由11个方法组成,但每个方法都需要一个或多个复杂的SQL查询

我将实现类分为几个较小的类,让我们称它们为
Helper1
Helper2
Helper3
<代码>帮助者因为没有更好的名字。
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;
    }
}
public类SomethingDaoImpl实现SomethingDao{
私人佣工1名佣工1名;
私人佣工2名佣工2名;
私人佣工3名佣工3名;
// ...
私人佣工8名佣工8名;
公共列表getX(…){
return helper1.getX();
}
公共列表getY(…){
return helper2.getY();
}
公共列表getDetailedX(…){
列表ds=getX(…);
助手6.添加到(ds);
助手7.添加到(ds);
助手8.添加到(ds);
返回ds;
}
}
这种技术有名字吗?一个复杂的刀有几个“工蜂”为它做所有的工作,而它只是管理它们

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

我还看到了“服务”这个名称的使用,在这种情况下,
SomethingDao
接口将被重命名为
SomethingService
,工蜂类将在其名称的末尾携带
DAO


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

我认为代码是“坏代码”模式,更确切地说是紧耦合代码。8个帮手是很多,这显然是一个糟糕的设计对象。我知道这是java,可能你没有像c#扩展这样的方法,这些方法非常适合帮助者,所以我认为正确的方法是通过DI容器使用依赖注入

每个需要DAO或服务的对象都会将它们作为抽象依赖项,主要是构造函数参数

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

关键是,如果只使用与上下文相关的对象,代码会将这些对象作为依赖项。我很怀疑你可能需要8个帮手。如果是这样的话,那么代码就太多了,需要重新设计。

如果DAO类中只有11个方法,那么很奇怪,需要这么多帮助器类来实现它们

问题是,为什么SQL查询如此复杂

确保数据库/数据源中的每个实体/表都有一个不同的DAO接口/类。 这将帮助您拥有更简单的DAO类并减少紧耦合

更新

正如你在评论中所写的,我认为把你的<代码> SomethingDao <代码>作为一个复杂逻辑的外观界面是比较正确的。(对此非常清楚)

因此,您可以为每个实体创建不同的DAO,并在
SomethingDaoImpl
中使用这些类,实现facade接口


如果你想遵循某种命名约定,你可以在
somethingfaceadeimpl
SomethingFacadeImpl

中简单地重命名你的类。我同意@MikeSW,似乎“DAO”做了太多的事情。它访问了多少个表?DAO接口(已经存在,我正在维护实现)可能访问15到20个表。原因是每个方法都规范化了来自多个源的数据,这意味着每个方法平均查询4到5个表。为什么我觉得DAO“管理器”是存储库模式,实现得非常糟糕?接口本来应该是针对单个DAO的,但是。。。考虑到接口的任何实现都需要访问15-20个表,返回10个不同数据结构的实例,这只是一个设计拙劣的概念。。。然而,很多应用程序都使用它,我认为正确的解决方案是将我的实现变成一个facade,它使用几个(8个左右)DAO。但仍然存在命名问题。我们可能需要进行重构,将其命名为
SomethingService
,以及
SomethingServiceImpl
。您需要的名称是Repository