Design patterns 应用程序框架是反模式吗?
我最近实现了两个大小类似的web应用程序,其中一个使用了“框架”,另一个我自己编写,但使用了一组现有的(大部分是开源的)库来提供一些我本来会使用框架的常见功能 我注意到以下几点:Design patterns 应用程序框架是反模式吗?,design-patterns,language-agnostic,architecture,frameworks,Design Patterns,Language Agnostic,Architecture,Frameworks,我最近实现了两个大小类似的web应用程序,其中一个使用了“框架”,另一个我自己编写,但使用了一组现有的(大部分是开源的)库来提供一些我本来会使用框架的常见功能 我注意到以下几点: 基于框架的应用程序当然设置得更快-它有效地“开箱即用”。然而,随着时间的推移,随着更多功能的添加,维护变得越来越复杂。当我需要一些不符合框架的东西时,我发现自己不得不求助于一些丑陋的变通方法 基于库的应用程序在开始时需要更多的代码来引入和集成必要的库,即在开始时需要编写合理数量的粘合代码。但随着时间的推移,它变得更容
- 基于框架的应用程序当然设置得更快-它有效地“开箱即用”。然而,随着时间的推移,随着更多功能的添加,维护变得越来越复杂。当我需要一些不符合框架的东西时,我发现自己不得不求助于一些丑陋的变通方法
- 基于库的应用程序在开始时需要更多的代码来引入和集成必要的库,即在开始时需要编写合理数量的粘合代码。但随着时间的推移,它变得更容易扩展和重新考虑,因为不存在因需要适应框架设计而带来的任何约束
真的是这样吗?不,不是这样。有好的框架也有坏的框架,有适合你正在开发的应用的框架,也有不适合这个应用的框架。你只需要为这项工作挑选最好的工具。没有预见到应用程序的复杂性并不一定是框架的错。它可能是您的,因为您没有为任务选择合适的框架
无论所选择的框架是什么,没有人强迫您将其用于应用程序的每个部分。如果框架简化了90%应用程序的开发,并且使其对于剩下的10%应用程序来说过于复杂,那么就不要对这10%应用程序使用框架。我认为这是非常主观的。在我看来,应用程序框架确实是一种反模式,特别是对于更大、更复杂的项目。我认为有两个原因 我看到的框架最大的问题是,使用框架会放弃控制。JB Nizet写道“没有人强迫您对应用程序的每个部分都使用框架”,在这种情况下这很好,但不幸的是,通常不是这样。通常框架有控制权,你有回调或派生类,当你想做一些不同寻常的事情时,你不能 这变得更糟,因为一般来说,很难设计好一个框架。框架越差,限制就越大,对框架用户的影响就越大。我见过的许多框架都有一些基本的限制,最终以某种方式限制了最终的应用程序。我不会说只有框架创建者才是罪魁祸首,尝试创建一个不限制框架用户的框架是一项非常困难的任务,如果不是不可能的话
不过,框架并不都是坏的。如果您的项目很适合框架,并且不会超出框架,那么框架确实会加快开发速度。当应用程序中的小框架只处理一个问题域时,它们也倾向于简化事情,通常不会有太多阻碍的风险。但最终框架,一方面,增加了您可能不需要的复杂性,另一方面,将界面与引擎结合起来,限制了框架用户。我认为模式/反模式术语并不是很有用——它说的和形容词“好”和“坏”一样多。但我确实认为大多数框架都有严重的缺点 首先,让我们定义什么是框架:
- 框架提供回调或类似的机制,您可以连接到自己的代码。您自己的大部分代码都在这些回调中运行
然后你最好使用一个做一件事并且做得很好的库。这就是我最初的想法,但这不是预先假设应用程序的范围/复杂性是已知的,以便选择正确的框架,至少达到90%的水平吗?根据我的经验,你很少有这种保证的奢侈…@mikera-我同意有好的框架和坏的框架,好的或坏的框架与你的应用程序有关。如果您甚至怀疑您的应用程序将来可能需要一些奇怪的功能,那么您有责任选择不会干扰的框架。只要选择你的防守工具,这就是一切(我想)。