4

我一直在玩一些 mvc 框架实现的“模块”概念,它似乎是一个很好的解决方案,还有 TDD,但我认为必须有更多的东西,比如我错过的设计模式(我只知道一个很少),这将让我构建可以无限制地(在代码中)增长的应用程序。

有什么想法吗?

编辑:关于模块的另一个好处是它们可以以独立于应用程序的方式构建,因此它们可以被重用。

4

1 回答 1

3

在“软件工程的事实和谬误”中,Robert L. Glass 说:

事实 15. 小型重用是一个很好解决的问题。

事实 16. 大规模重用仍然是一个大部分未解决的问题。

事实 17. 大规模重用在相关系统系列中效果最好。

换句话说,您可以重用模块,但只能在工作非常相似的应用程序之间重用。试图使模块如此通用以至于您可以在任何应用程序中重复使用它们太难了。您最终会制作出可配置的模块,以至于它们使用起来过于复杂,并且包含大量代码来处理对给定应用程序无用的场景。

您最好为每个应用程序编写一个自定义模块,这正是每个应用程序需要的,仅此而已。这对于像 PHP 这样的语言尤其重要,因为在每个请求上都会加载代码,因此代码量对性能有很大影响。

重用更细粒度的功能是不同的。比如说,日志的使用在应用程序之间是相当相似的,无论应用程序彼此之间有多么不同。这就是为什么大多数框架在通用服务风格类方面做得很好的原因。


来自@A_Var 的重新评论:

如果您事先知道可能的功能范围,以及需要可扩展的部分,则可以使类可重用。对于在每个应用程序中类似使用的简单类来说,这相对容易。我提到了日志记录的例子。这就是 Glass 所指的小型再利用

但我们不是在谈论简单的类。如果您尝试对复杂的模块做同样的事情(考虑使用多个类来处理多个屏幕、表单、不同的数据库模式等),那么编写代码以使其通用到足以涵盖所有特定需求就太难了每个应用程序。与为每个应用程序编写单独模块所需的总代码相比,您最终需要在通用模块中添加更多代码。

此外,测试变得非常昂贵,因为您对基本模块所做的任何更改都需要您重新测试所有使用和扩展它的应用程序。

最后,为每个应用程序编写一个新模块的工作量更少,并且您可以通过使用更细粒度的可重用组件来获得尽可能多的效率。

于 2010-10-08T07:30:45.803 回答