项目应该相互独立多少?
我有一个非常大的Visual Studio解决方案,其中所有项目都相互依赖。我无法从解决方案中获取单个项目并将其添加到另一台计算机中的另一个解决方案中,因为它们都是相互关联的。
我正确地做了什么吗?
例如;
考虑我的这三个项目(磁盘文件,数据转换器和数学 - .h和.cpp文件对是C ++类;我将按其各自的名称提及这些):
The Solution
|
|---- Disk File
| |
| |---- BinaryFile.h, BinaryFile.cpp
| |---- TextFile.h, TextFile.cpp
|
|---- Data Converter
| |
| |---- Utf8.h, Utf8.cpp
| |---- XmlParser.h, XmlParser.cpp
| |---- StringFormatter.h, StringFormatter.cpp
|
|---- Math
|
|---- Plotter2D.h, Plotter2D.cpp
|---- Matrix.h, Matrix.cpp
TextFile
使用Utf8
进行字符编码。这使得Disk File
依赖于Data Converter
。XmlParser
使用TextFile
。这使得Data Converter
依赖于Disk File
。Plotter2D
使用TextFile
转储一些数据以与外部软件一起使用,Matrix
在其::ToString()
方法中使用了一些字符串格式化工具。这使得Math
依赖于Disk File
和Data Converter
。这只是几个类之间依赖关系的一个例子。事实上,我的解决方案中有更多文件。这完全是代码依赖的混乱。
我将和我的一个朋友开始一个项目。他的解决方案需要我的Math
项目。但是要让它适应自己的解决方案并不容易,因为它会给这些依赖关系带来很多编译器错误。
这种依赖性是否正常?我做得对吗?如何在每个项目中保留所有常见文件的副本(这可能很愚蠢,我只是问它)?
我需要你的建议。
总会有这样的依赖,但你可以使用一些方法来避免它们:
管理依赖关系通常是一个复杂的问题。您似乎遵循的要点是依赖关系应该创建一个非循环图。
除此之外,您应该尝试尽可能地打破依赖关系。例如,XmlParser
真的需要TextFile
吗?或者,想要解析文本文件的应用程序是否可以实例化后者,将内容读入字符串并将其传递给XmlParser
?如果你设法到第二,那么XmlParser
不再依赖于TextFile
。
另一件需要考虑的事情是您正在创建的依赖类型。使用相同的例子,TextFile
是在XmlParser
的公共界面中使用的吗?是否需要在那里使用?如果XmlParser
依赖于TextFile
,你将需要链接库,如果它是界面的一部分,那么XmlParser
的用户将必须包括TextFile
的标题创建更高的耦合。在这种情况下,您可以将文件名传递给XmlParser
而不是TextFile
,以从接口中删除依赖项。
在一天结束时,这是一个艺术。专注于尽可能少的依赖项和那些需要的,尝试使耦合最小化。
另一件事是数学库。我会打破对TextFile
的依赖。额外的功能可以在一个单独的库中提供,该库处理数学组件的序列化。这将允许不需要文件备份的Math
用户不依赖于TextFile
组件。