什么是构建可伸缩(可扩展)、易于维护和松散耦合软件的最佳技术?

4
我一直在试验一些mvc框架所实现的“模块”概念,感觉这是一种不错的解决方案,同时也尝试了测试驱动开发(TDD),但我认为还必须有更多的东西,比如我可能错过的设计模式(我只知道一些),可以让我构建无限制扩展(代码)的应用程序。
你有什么想法吗?
另外,模块的另一个好处是它们可以以独立于应用程序的方式构建,因此可以重复使用。

问题的标题不足以描述问题本身,问题是关于模块的,请更新标题。同时,这个问题很难回答,因为没有通用的规则。真正的答案是:这取决于具体情况。并不存在所谓的“好的应用程序”设计模式。 - takeshin
这个问题不是关于模块的,模块只是我找到的构建可扩展、可维护和松耦合组件的唯一解决方案,我正在寻找新的解决方案。但是Bill K.已经给出了一个令人满意的答案,你应该阅读它。 - HappyDeveloper
1个回答

3
在《软件工程中的事实和谬误》一书中,Robert L. Glass说:
事实15:在小规模重用方面已经有了很好的解决方案。
事实16:在大规模重用方面仍然是一个基本未解决的问题。
事实17:在相关系统族群中,大规模重用效果最佳。
换句话说,你可以重用模块,但只能在非常相似的应用程序之间进行。试图使模块如此通用,以至于可以在任何应用程序中重用,这太难了。你最终会制作出过于复杂的可配置模块,并包含处理对给定应用程序无用的情况的大量代码。
为每个应用程序编写定制模块,只做每个应用程序需要的事情,而不多做其他事情,这样做会更好。对于像PHP这样的语言,每个请求都会加载代码,因此代码的数量对性能有显着影响,这一点尤其重要。
更细粒度的功能重用是不同的。例如,日志记录的用途在不同的应用程序中是相当相似的,无论这些应用程序彼此之间有多么不同。这就是为什么大多数框架都使用通用服务类的原因。
关于@A_Var的评论:
如果您事先知道了可能的功能范围,以及需要扩展的部分,那么您可以使类可重用。这对于在每个应用程序中使用类似的简单类来说相对容易。我提到了日志记录的例子。这就是Glass所说的小规模重用。
但我们不是在谈论简单的类。如果你尝试对一个复杂模块(比如多个类来处理多个屏幕、表单、不同的数据库架构等)进行同样的操作,编写足够通用以覆盖每个应用程序特定需求的代码就太难了。你最终需要在通用模块中添加更多代码,而这些代码总和比为每个应用程序编写单独的模块所需的代码还要多。
此外,测试成本非常高,因为你对基础模块所做的任何更改都需要重新测试使用和扩展它的所有应用程序。
最终,为每个应用程序编写新模块是更少的工作量,而且你可以通过使用更细粒度的可重用组件来获得效率。

谢谢你的回答。我会记下那个标题,听起来很有趣。 - HappyDeveloper
难道我们在面向对象编程中不是有抽象类的概念来解决模块化问题吗?我们使用抽象类并实现更通用的方法,留下其他派生自抽象类的类的方法实现。通过这种方式,我们可以获得适当的模块行为。 - A_Var

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接