在我的 C 项目中,我有一个相当大的 utils.c 文件。它确实充满了许多不同类型的实用程序。只是在里面塞入不同的杂项功能,我觉得有点调皮。例如,它有一些与低级相关的实用程序,例如小写()函数,它还有一些非常复杂的实用程序,例如转换为/从不同的颜色格式转换。
我的问题是,有这么大的 utils.c 里面有许多不同类型的实用程序是不是很顽皮?我应该把它分解成许多不同类型的实用程序文件吗?比如graphics_utils.c等等你怎么看?
在我的 C 项目中,我有一个相当大的 utils.c 文件。它确实充满了许多不同类型的实用程序。只是在里面塞入不同的杂项功能,我觉得有点调皮。例如,它有一些与低级相关的实用程序,例如小写()函数,它还有一些非常复杂的实用程序,例如转换为/从不同的颜色格式转换。
我的问题是,有这么大的 utils.c 里面有许多不同类型的实用程序是不是很顽皮?我应该把它分解成许多不同类型的实用程序文件吗?比如graphics_utils.c等等你怎么看?
根据类别(即图形、字符串等)将它们分解为单独的文件将导致更好的组织,更容易找到某些代码片段,通过更小的文件,而不是只有一个大文件。
您想要分解它,不仅仅是出于组织原因,还因为您将有许多其他文件依赖于这个文件。因为一切都依赖于这个文件,这使得这个文件很难更改,因为它可能会导致广泛的破坏。
http://ifacethoughts.net/2006/04/15/stable-dependencies-principle/
当合适时,我倾向于将它们分解为各种子工具(graphics_utils)。
如果只有您自己会维护这些东西,那么复杂性何时达到您发现自己在寻找东西的地步是一个问题。那将是重构和重组的时候(重组是有成本的,就像不重组是有成本一样)。
如果其他人可能会维护一个包含您的实用程序的项目,那么您在决定何时重组时必须考虑他们的痛点。他们的比你的低很多。
分开来。东西会更容易找到、更容易重用、更容易重构、更容易进行单元测试。我最近需要从一个庞大的 Java 实用程序类的静态方法中获取一组 ISO-8601 日期处理方法,而且很难找到我需要的 5% 的代码。
这绝对不是 kosher,因为下一个通过您的代码的人将不知道在哪里寻找任何东西。按功能分解,你的同事会感谢你的!
将文件拆分为单独文件的另一个好处是,当您将其置于源代码控制之下时,您可以进行更细粒度的控制。如果您有经常调整/扩展/专门化的位,以及其他相对稳定的位,这真的很有用。
另一点:你应该组织你的代码,即将它分解成更小的模块并对其进行分类,因为在某个时间点你最终会为同一件事编写第二个和第三个函数,仅仅是因为你不会发现你知道它在那里,但你不记得它的名字的功能。
我有一个带有这样一个模块的(相当大的)项目,并且有多达 5-6 个实现的编程逻辑(对于同一件事)。
像其他人一样,我会把他们拆散。但是我现在倾向于使用扩展方法,所以我会为每个类扩展一个类(和一个文件)(例如StringExtensions
,SqlDataReaderExtensions
等)。我发现这往往会很好地分解实用程序方法。