Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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 接口是否通过代码复制解决DDD?_Java_Php_C++_Interface - Fatal编程技术网

Java 接口是否通过代码复制解决DDD?

Java 接口是否通过代码复制解决DDD?,java,php,c++,interface,Java,Php,C++,Interface,AccountController不能同时扩展BaseCount和BaseController。如果我将所有BaseCount或BaseController方法都设为空,我可以拥有一个接口,但如果我在两个不同的位置实现该接口,也就是说,我签订了在两个不同的位置实现方法的合同,我将拥有重复的代码。接口是否通过代码复制解决DDD interface A { function doStuff() { } } class B implements A { function do

AccountController不能同时扩展BaseCount和BaseController。如果我将所有BaseCount或BaseController方法都设为空,我可以拥有一个接口,但如果我在两个不同的位置实现该接口,也就是说,我签订了在两个不同的位置实现方法的合同,我将拥有重复的代码。接口是否通过代码复制解决DDD

interface A {
    function doStuff() {
    }
}

class B implements A {
    function doStuff() {
        // a code
    }
}

class C implements A {
    function doStuff() {
        // the same code!!!
    }
}

对你的最后一句话有点困惑,但是如果你想要多重继承,那么你需要这样做:

AccountController扩展BaseCount,BaseCount扩展BaseController

BaseController
  |
BaseAccount
  |
AccountController

使用此方法将使您能够使用$this从AccountController访问BaseAccount和BaseController的所有成员函数。

对您的最后一句话有点困惑,但如果您想要多重继承,则需要执行以下操作:

AccountController扩展BaseCount,BaseCount扩展BaseController

BaseController
  |
BaseAccount
  |
AccountController

使用此方法将使您能够使用$this从AccountController访问BaseCount和BaseController的所有成员函数。

接口解决DDD问题,因为DDD问题与实现的模糊性有关。接口不包含实现,因此,如果您从单个类和多个接口继承,则无法获得这种模糊性

在您描述的情况下,如果在BaseController和BaseCount中有具有相同签名的方法,则可以获得DDD。如果你只继承其中一个,你就不会有这个问题

也许你可以重新考虑一下为什么你想让某个东西同时成为一个账户和一个控制者。在我看来,你让一个班做得太多了

另一方面,我建议使用“Controller”而不是“BaseController”这样的名称,因为这样做更自然:

Controller con = ControllerFactory.Create();
相对于

BaseController con = ControllerFactory.Create();

在本例中,“con”不一定是BaseController。它可以是任何控制器子类。

接口解决DDD问题,因为DDD问题与实现的模糊性有关。接口不包含实现,因此,如果您从单个类和多个接口继承,则无法获得这种模糊性

在您描述的情况下,如果在BaseController和BaseCount中有具有相同签名的方法,则可以获得DDD。如果你只继承其中一个,你就不会有这个问题

也许你可以重新考虑一下为什么你想让某个东西同时成为一个账户和一个控制者。在我看来,你让一个班做得太多了

另一方面,我建议使用“Controller”而不是“BaseController”这样的名称,因为这样做更自然:

Controller con = ControllerFactory.Create();
相对于

BaseController con = ControllerFactory.Create();

在本例中,“con”不一定是BaseController。它可以是任何控制器子类。

简而言之:您想用DDD在Java中调试继承模型吗?最后一句有点奇怪……能解释一下“DDD”代表什么吗?我一直在想“域驱动设计”,但这似乎不适合…致命的死亡钻石,一种oop错误简而言之:你想用DDD在Java中调试你的继承模型吗?最后一句有点奇怪……能解释一下“DDD”代表什么吗?我一直在想“域驱动设计”,但这似乎不适合…致命的死亡钻石,一种oop错误我不关心其他任何事情,只关心+1推荐
Controller
over
BaseController
。它使代码更具可读性和直观性,而且完全没有成本。我不关心其他任何事情,只关心+1推荐
Controller
over
BaseController
。它使代码更具可读性和直观性,而且完全没有成本。