Model view controller ExtJs中的MVC是一个一刀切的解决方案吗?

Model view controller ExtJs中的MVC是一个一刀切的解决方案吗?,model-view-controller,design-patterns,extjs,extjs4.1,extjs-mvc,Model View Controller,Design Patterns,Extjs,Extjs4.1,Extjs Mvc,我们已经使用ExtJs很长一段时间了,现在,随着MVC模式的出现,我们面临着一个关键问题,即考虑到我们迄今为止一直遵循的方法,在未来是否使用它 在我们的应用程序中,我们有类似的屏幕,比如40个用于生成报告的类似屏幕等等。这些报告屏幕将有一个带有按钮的表单-PDF、CSV、EXCEL。所有按钮在每个屏幕上都具有相同的功能,即将表单提交到url并生成特定报告 我们一直遵循的方法是创建一个自定义类,比如reportscreen类,它扩展了ExtJs的窗口类。 此自定义报告屏幕类已经有了定义了处理程序的

我们已经使用ExtJs很长一段时间了,现在,随着MVC模式的出现,我们面临着一个关键问题,即考虑到我们迄今为止一直遵循的方法,在未来是否使用它

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

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

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

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

现在是MVC模式,这是最受建议的模式,上面共享的方法肯定不是MVC模式。但是,我们真的需要转移到MVC模式吗

使用上述方法,我们不仅能够节省精力,而且能够更好地控制事情

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

因此,在上面的上下文中,MVC会带来什么额外的东西?另外,在MVC模式中实现这种功能的最佳方式是什么?


提前感谢您的帮助。

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

很难向没有MVC经验的人解释使用MVC的优势。作为一个同时使用ExtJS3和ExtJS4(使用MVC)开发的人,我认为MVC的最大优点之一是它迫使您正确思考——不管您是否愿意,使用MVC可能会产生更可重用和更好封装的代码库。但如果你们是优秀的程序员/设计师,无论如何都会是这样

如果您选择迁移到MVC,我相信主要的变化将是现在不再处理自定义类中的用户交互,而是使用一个控制器来完成相同的工作—只让自定义类实现视图。ExtJs4中的控制器是全局的——这意味着同一个控制器可以控制40个类似的视图。所以这里没有控制器的重复

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

虽然我同意Evan的观点,如果它没有损坏,就不要修复它,如果我是您的开发负责人,并且时间和金钱不是问题,我实际上会要求逐步迁移到MVC——总的来说,我认为3年后您不会后悔这个决定。我至少会尝试一下


当ExtJs 4问世时,我花了2个月的时间用MVC从头重写了一个系统——我现在一点也不后悔(我一开始就这么做了,但不是为了MVC——而是为了4的早期版本中存在的大量bug)。

感谢您的简明回答。正如您提到的,我们需要同时拥有视图和控制器子类,因此,看起来我们当前的方法将为我们节省更多的精力。此外,考虑到整个团队都不太熟悉ExtJs,所以即使对于一个新项目,我们也更愿意采用我们的方法。“时间和金钱”始终是一个问题:)除此之外,团队的专业知识也很重要,使用MVC似乎需要更高的水平。正如您所分享的——“使用MVC可能会产生更可重用和更好封装的代码库”——我们已经能够通过在我们的方法中创建类来实现这一点。此外,对于“全局控制器”,不确定这些控制器的鲁棒性如何,正如Evan也提到的,我们需要为每个子类创建一个控制器。结束这个问题有点令人沮丧,因为一个特定的编码方法已经被分享,MVC提供的优势已经被明确询问。这个问题肯定会对某人有所帮助,不应该结束,考虑到它提出了一个明确的问题,而且问题也很具体。+1要重新打开,我前段时间也有一个类似的问题,如果您发布了它,我会很好地回答这些问题。@Geronimo:您能分享您所指问题的URL吗?如果面临类似的问题,那么你最终选择了哪条道路。@ne