如何保持大型 SOLID 项目的可管理性?

How to keep a big SOLID project manageable?

拥有大量代码需要某种原则才能使其易于管理。 SOLID 是使用较多的原则集之一。即使它解决了问题,它似乎也创造了另一个问题。

对于不同的大型代码库,遵循 SOLID 模型将大大增加 classes、接口和注入的数量。

第一个问题是,当我找到一个对象时,并不总是清楚我可以用这个对象做什么或如何使用它。

例如,如果我想显示它,通常我只需键入对象并点击点,列表就会显示我可以使用该对象做什么。使用 SOLID 会有另一个 class "somewhere" 来处理显示样式。我如何找到这个 class?我怎么知道它甚至存在?参考文献听起来像是要走的路,但它可以显示超过 100 个参考文献,其中很多可能与 class.

的功能无关

第二个问题(可能不是 SOLID 问题)是在使用注入时,在特定流程中真正执行的代码可能变得不清楚。注入使用接口,可以有多个 class 实现此接口。因此,当调查特定流程并遇到注入时,我们需要深入了解真正注入的对象以了解执行了哪些代码。在大型代码中,这可能会很费时才能找到。

我是不是用错了 SOLID,或者我该如何解决这些问题?

您可能会有更多的代码,并且肯定每个实施都会花费更多,因为例如,您将不得不创建一个与现有基础设施交互的新服务,而不是修改特定服务,并且如果您的修改也会影响其他模块化部分,您必须在不耦合模型、服务等的情况下重构所有其他相关接口。

Modules/Services 必须相互作用但不必耦合。解耦的部分越多,花费的成本就越高 (time/effort)。第一个问题是您对真正强大的 SOLID 应用程序有多感兴趣,实施它有什么好处。

无论如何,当你说:

References sounds like the way to go but it could show over 100 ref and a lot of them may not have anything to do with functionality of the class.

这似乎与I原则相悖:接口隔离原则

因为你应该有更具体、更小的接口而不是胖接口。但是可以肯定的是,您可能会有更多的嵌套调用(例如通过接口交互服务)

你的第二个问题也是:

So when investigating a specific flow and we encounter a injection we need to dig in to what object that really is injected to know which code that is executed

似乎与问题1有关。因为界面更小更具体,流程更具体,你应该了解所涉及的代码,它应该比非SOLID应用程序更清晰