我一直在研究一些mvc框架实现的“模块”概念,这似乎是一个很好的解决方案,在TDD中也是如此,但我认为还必须有更多的东西,例如我错过的设计模式(我只知道一个少数),这将使我构建可以无限制增长(以代码形式)的应用程序.
有什么想法吗?
编辑:关于模块的另一件好事是,它们可以以与应用程序无关的方式构建,因此可以重复使用.
解决方法:
Robert L. Glass在“软件工程的事实和谬论”中说:
Fact 15. Reuse-in-the-small is a well-solved problem.
Fact 16. Reuse-in-the-large remains a mostly unsolved problem.
Fact 17. Reuse-in-the-large works best in families of related systems.
换句话说,您可以重用模块,但只能在工作非常相似的应用程序之间重用.试图使模块如此通用,以至于可以在任何应用程序中重用它们.您最终会制作出可配置的模块,以至于它们使用起来过于复杂,并且包含许多代码来处理对于给定应用程序毫无用处的方案.
您最好为每个应用程序编写一个自定义模块,该模块可以满足每个应用程序所需的功能,而不再需要其他功能.这对于像PHP这样的语言尤其重要,因为该语言会在每个请求上加载代码,因此,代码量会对性能产生重大影响.
重用更多细粒度的功能是不同的.无论应用程序之间有多大差异,应用程序之间的记录(例如日志记录)的用法都相当相似.这就是为什么大多数框架在通用服务样式类上都做得很好的原因.
来自@A_Var的评论:
如果您事先知道可能的功能范围,因此可以使类可重用,从而知道需要扩展的部分.对于在每个应用程序中都类似使用的简单类,这相对容易.我提到了日志记录的示例.这就是Glass所说的小规模重用.
但是我们不是在谈论简单的类.如果您尝试使用复杂的模块(考虑多个类来处理多个屏幕,表单,不同的数据库架构等)做同样的事情,那么编写太通用的代码来满足所有特定需求的代码就太难了.每个应用程序.最终,与为每个应用程序编写单独的模块所需的总代码相比,通用模块中需要的代码更多.
而且,测试变得非常昂贵,因为您对基本模块所做的任何更改都要求您重新测试所有使用并扩展它的应用程序.
最后,为每个应用程序编写一个新模块的工作量减少了,您可以通过使用更细粒度的可重用组件来获得更高的效率.