ExtJs中的MVC是一个通用的解决方案吗?

时间:2013-03-19 14:26:41

标签: model-view-controller design-patterns extjs extjs4.1 extjs-mvc

我们一直在使用ExtJs,现在,随着MVC模式的出现,我们面临着一个关键问题,即在未来的时代是否使用它,因为我们一直遵循的方法。

在我们的应用程序中,我们有类似的屏幕,例如40个用于生成报告的类似屏幕等等。这些报告屏幕将具有带按钮的表单 - PDF,CSV,EXCEL。所有按钮在每个屏幕上都具有相同的功能,即将表单提交到URL并生成特定报告。

我们一直遵循的方法是创建一个自定义类,例如reportscreen类,它扩展了ExtJs的窗口类。

此自定义报告屏幕类已经具有定义其处理程序的按钮(假设所有屏幕的功能类似),并且还将具有带有函数setFormItems()的表单。此类的任何实例都将使用setFormItems()和用于生成报告的url为表单提供项目。

这种方法不仅有助于我们在很大程度上减少开发工作,而且甚至允许团队中的新成员使用该类&创建一个新屏幕。

现在MVC是最受推荐的模式,上面分享的方法肯定不是按照MVC模式。但是,我们是否需要真正转向MVC模式?

使用上述方法,我们不仅可以节省工作量,还可以更好地控制事物。

提出这些问题的目的是了解如果我们使用MVC模式实现上述场景并远离我们当前的方法,我们将获得的确切优势。

因此,MVC会在上面的上下文中带来什么额外的东西?而且,在MVC模式中实现这样的事情的最佳方式是什么?

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:6)

您需要使用MVC吗?不。假设你已经有一个适合你的结构,如果没有破坏,请不要修复它。如果你开始一个新项目,我建议使用MVC,但我不会为了它而重构一大堆代码。如果你确实使用过MVC,你会采用类似的方法。您将拥有一个基本视图类,您可以在其中动态推送子类中的项目。你有一个基本控制器来处理所有自定义事件,然后子类控制器在“每个模块”的基础上实现自定义功能。

答案 1 :(得分:4)

很难解释将MVC用于没有经验的人的优势。作为使用ExtJs 3和4(使用MVC)开发的人,我认为MVC的最大优势之一是它会强迫你思考正确 - 无论你是否想要它,使用MVC可能会导致代码库更可重复使用,封装更好。但如果你们男孩和女孩都是优秀的程序员/设计师,无论如何都会如此。

如果您确实选择转移到MVC,我相信主要的变化就是现在而不是在您的自定义类中处理用户交互,您将有一个控制器来执行相同的工作 - 将您的自定义类留给只实现观点。 ExtJs4中的控制器是全局的 - 意味着同一个控制器可以控制40个类似的视图。所以这里没有重复的控制器。

值得一提的是,即使在MVC设计中,您也会发现非MVC代码。例如,我有一个自定义记录编辑器,它是一个表单 - 组件知道如何处理用户操作并相应地更新记录(表单未提交,因为它主要处理关联)。该组件在MVC设计中扮演控制器和视图的等效角色。在我看来,以这种方式封装东西似乎更合理,而不是将其拆分为视图和控制器。但是(不可重用的)用户屏幕是使用MVC实现的。所以也许只是另一个不急于MVC的原因。

虽然我同意Evan的意见,如果它不能解决它,如果我是你的发展领导者并且给予时间和金钱不是问题,我实际上会要求逐渐迁移到MVC - 总体而言我认为3几年后你不会后悔这个决定。我至少会尝试它。

当ExtJs 4出来的时候,我抓了2个月的工作从头开始重写一个使用MVC的系统 - 我现在不后悔这一秒(我在开始时做的,但不是对于MVC - 而是为了早期版本中的错误4)。