繁体   English   中英

松散耦合的依赖关系:如何?

[英]Loosely coupled dependencies: How?

如何最好地分离两个类,但仍然使它们彼此依赖?

我有带有类型提示的构造函数参数:

public function __construct(\namespace\Interface1 $class1,
    \namespace\Interface2 $class2,
    \other\namespace\Abstract1 $class3){

但这与说的话紧密相关吗?

new \namespace\Class1();

任何其他方法都欢迎。

使用接口意味着您与实现分离。

您必须至少与某些组件耦合才能使用其他组件(即依赖项)。 问题是如何最小化这种耦合:

  • 自己实例化依赖关系意味着将其耦合到该类,该类的构造函数以及依赖关系的所有子依赖关系。 那是非常糟糕的。
  • 要求/类型提示(在构造函数参数中)特定类的对象意味着您已与该类紧密耦合。 如果您想更改班级,那将很麻烦。 这不好。
  • 需要/类型提示一个实现接口的对象意味着您只能将自己耦合到该接口。 这意味着您可以对该接口进行任何实现。 很好,您并没有非常依赖于依赖项,只需要一个可以执行X的对象(X是接口定义的协定)。

最后,那就是选择涉及较少耦合的解决方案。

一种替代方法是使用事件:您的类可以引发事件,并让依赖项侦听这些事件。 这样,您的类仅耦合到EventManager的接口。

但是事件解决方案并不能真正适合所有用例:您不能保证有人实际注册了该事件,并且实际上对该事件做了任何事情。 而且,您无法像调用方法一样获得返回的结果。

结论:使用像您一样的界面是好的,这里没有问题。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM