现在正在构建一个新的应用程序,在阅读了 Uncle Bob 的《Clean Architecture》一书后,我遵循了“封闭-开放”和“控制反转”原则的实现部分,并为此付出了很多努力。
如何用 Python 实现它们?
通常,这两个原则齐头并进,并在 UML 中描述为将控制从模块/包 A 反转到 B 的接口(interface)
。
我很困惑,因为:
- Python 不像 Java 和 C++ 那样拥有接口(interface)。是的,有
ABC
和@abstractmethod
,但它不是 Pythonic 风格,从我的角度来看,如果你不开发框架,它是多余的 - 将一个类传递给另一个类的方法(我理解这是一种实现开闭原则的方法)在 Python 中有点危险,因为它没有一个可以捕获问题的编译器(并且将会)如果两个松散耦合的对象之一发生变化,就会发生
- 在忽略接口(interface)并将顶级类传递给较低级别的类之后...我仍然需要在顶部模块的某个位置导入所有内容。这样一来,整个事情就被违反了。
所以,正如你所看到的,我非常困惑,并且很难根据我的设计进行编程。我想出了。你能帮我一下吗?
最佳答案
您只需传递一个实现您需要它实现的方法的对象。
确实,没有“接口(interface)”来定义这些方法必须是什么,但这就是 python 中的方式。
您始终传递必须是列表、映射、元组或其他形式的参数,并且这些参数都没有经过类型检查。您可以编写代码来调用这些东西上的任何内容,并且在该代码实际执行之前,Python 不会注意到任何类型的问题。
当您需要这些参数来实现您正在使用的任何 IoC 接口(interface)时,情况完全相同。确保在评论中详细说明要求。
是的,这非常危险。这就是为什么我们更喜欢具有复杂接口(interface)的大型系统的静态类型语言。
关于python - 如何在Python中应用闭-开和控制反转原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58828666/