【问题标题】:Is MVC in ExtJs a one-size-fits-all solution?ExtJs 中的 MVC 是一种万能的解决方案吗?
【发布时间】:2013-03-19 14:26:41
【问题描述】:

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

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

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

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

这种方法不仅在很大程度上帮助我们减少了开发工作,而且即使是团队的新成员也可以使用该类并创建一个新屏幕。

现在出现在最推荐的模式 MVC 中,上面分享的方法绝对不是 MVC 模式。但是,我们真的需要在这里转向 MVC 模式吗?

使用上面的方法,我们不仅可以省力,还可以更好地控制事情。

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

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

提前感谢您的帮助。

【问题讨论】:

  • 关闭这个有点令人沮丧,因为已经共享了一种特定的编码方法,特别要求 MVC 提供的优势。
  • 这个问题肯定会对某人有所帮助,不应该被关闭,因为它提出了一个明确的问题并且也很具体。
  • +1 重新打开 不久前我有一个类似的问题,如果有这些答案会很好。
  • @Geronimo:如果您发布了问题,能否分享您所指问题的 URL?如果遇到类似的问题,那你最后选择了哪条路。
  • @netemp This was the question. 我重构了——但听起来我的代码不像你的那样有条理。

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


【解决方案1】:

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

【讨论】:

  • 感谢您的简洁回答。正如您所提到的,我们需要同时拥有视图和控制器子类,因此,看起来我们当前的方法会为我们节省更多的精力。此外,鉴于整个团队并不精通 ExtJ,因此即使是新项目,我们也更愿意继续使用我们的方法。
【解决方案2】:

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

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

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

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

当 ExtJs 4 出现时,我花了 2 个月的时间从头开始使用 MVC 重写一个系统——我现在一点也不后悔(我一开始就这样做了,但不是为了 MVC——而是为了4) 早期版本中的错误。

【讨论】:

  • “时间和金钱”始终是一个问题 :),除此之外,它还与团队的专业知识有关,使用 MVC 似乎需要更高的水平。正如您所分享的那样——“使用 MVC 可能会产生更可重用和更好封装的代码库”——我们已经能够通过在我们的方法中创建我们的类来实现这一点。此外,对于“全局控制器”,不确定它们的鲁棒性如何,正如 Evan 所提到的,我们需要为每个子类创建一个控制器。
猜你喜欢
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 2021-11-02
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多