Module 如何构造模块?

Module 如何构造模块?,module,package,Module,Package,在我第一次尝试创建一个太大而无法装入一个源文件的程序时,我一直遇到将其拆分为多个源文件的问题。例如,如果一个模块被其他几个模块使用,而这些模块最终被包含在另一个模块中,我该怎么办。比如说,线性代数.cpp(或.py或其他)需要张量运算.cpp,它们都需要矩阵运算.cpp。我应该将matrix_operations.cpp同时包含在其他两个文件中,还是只包含在其中一个文件中?如果我把矩阵运算加入到其他的模中,在某个点上突然发现需要线性代数呢? 这整件事一直让我困惑不已。有时我会想出来,但必须有一个

在我第一次尝试创建一个太大而无法装入一个源文件的程序时,我一直遇到将其拆分为多个源文件的问题。例如,如果一个模块被其他几个模块使用,而这些模块最终被包含在另一个模块中,我该怎么办。比如说,线性代数.cpp(或.py或其他)需要张量运算.cpp,它们都需要矩阵运算.cpp。我应该将matrix_operations.cpp同时包含在其他两个文件中,还是只包含在其中一个文件中?如果我把矩阵运算加入到其他的模中,在某个点上突然发现需要线性代数呢? 这整件事一直让我困惑不已。有时我会想出来,但必须有一个“正确”的方法,这样你就不必自己去想了


那么,我在哪里可以找到一本关于如何正确处理这类事情的手册(或者至少他们怎么称呼它,因为我说“这类事情”时谷歌不理解我的意思)?

听起来你在试图避免循环依赖关系,这是你想要搜索的关键术语

例如,如果您有模块A和B,并且您发现A需要引用BB需要引用A,那么A和B之间存在循环依赖关系。(换句话说,如果您将模块之间的关系绘制为带有箭头的图形,其中箭头显示了依赖关系,则A和B之间将有一对箭头。)

解决方案是识别A中B所需的代码位,将该位重构为新的模块C,然后从A和B中引用C(这意味着B不再需要引用A)

所以你从

A <----> B

通过这样做,您可以从几个大模块过渡到许多较小的模块,这些模块之间的耦合更加松散。这反过来会使您的代码更易于维护和重用。

这不仅仅是循环依赖关系(尽管感谢您至少澄清了这一点)。问题更一般:在一般情况下如何安排和构造程序模块?有完整的手册吗?看看《代码完成》或《实用程序员》之类的书。这些将为您提供一些需要遵循的原则,例如松耦合和高内聚性。但并没有“按数字绘制”的解决方案——每个程序都是不同的。
A -----> B
|        |
\/       |
   /     |
C  ------
   \