gpt4 book ai didi

javascript - 我发现自己在使用 Backbone.js 或其他 MVC 时重复了很多代码

转载 作者:搜寻专家 更新时间:2023-11-01 04:47:27 26 4
gpt4 key购买 nike

和你们中的许多人一样,我已经开始使用仅使用 JSON 的后端(在我的例子中是 Django 或 Rails)编写越来越多的 Web 应用程序。

作为前台,我一直在使用 MVC 客户端,例如 Backbone.js。根据我的说法,这个解决方案非常好,并且适用于许多类型的应用程序。

令我恼火的是,我发现自己生成了很多做几乎相同事情的 Javascript 代码。感觉就像我在 Backbone 之上为每个新应用程序创建一个新层。我在这里的思考方式一定有问题。

举个例子:

假设您有一个 API 可以为您提供六个集合,并且您想使用 Twitter Bootstrap 来显示它。您将有一个导航菜单,您可以在其中选择要查看的每个集合。

将有大量的 Javascript 代码来设置所有模型、集合、 View 以及围绕路由和导航的逻辑。您还必须考虑哪个 View 处于事件状态。

如:

获取集合时的错误处理

如果一个集合正在加载,我们希望看到“正在加载”。如果它失败了,我们会看看为什么。这与创建/保存/删除相同。

路由

我发现自己写了一个复杂的逻辑,最后只是在匹配的 URL:s 上呈现一个特定的 View 。它只是一个包含所有实例化 View 的数组。有时您甚至不需要 View ,只需要一个与 URL 关联的模板。好吧,如果你有六个菜单,你就可以有六个功能。但是,如果菜单是三层深的,每层有六个选项,您就不能为每个 View 设置路由功能。

导航栏和面包屑

这将是一个从我上面的复杂逻辑中调用的 View 。如果导航是多层深度的,这可能会非常复杂。

我的问题是:我在这里很独特吗?如果没有,您如何解决这个问题?

Backbone.js 不适合我吗?哪些替代方案更合适(哦,是的,我已经搜索过了)?

感谢您抽出宝贵时间,我非常感谢您的所有想法。

最佳答案

我想说这里有两个因素在起作用:

  1. 主干应用程序确实很容易变得冗长,因为框架本身是如此的小和简单。对于 Backbone 没有的每个功能和代码行,您都必须编写。这是其基本理念的一部分。引用文档:

    Backbone.js aims to provide the common foundation that data-rich web applications with ambitious interfaces require — while very deliberately avoiding painting you into a corner by making any decisions that you're better equipped to make yourself.

    所以这是一个权衡。还有其他更全面的框架,例如 Ember.jsAngularJS ,这往往会在您自己的代码库中生成更少的样板代码。它们都是一流的框架,您可能想看看。当然,权衡是更大的框架大小、更多的第三方复杂性,以及您将“把自己画在 Angular 落里”的风险。

    如果你想继续使用 Backbone,但你觉得你需要框架的更多帮助,请查看 Backbone.Marionette .我没有亲自使用过它,但对我来说,它看起来是一种用更少的代码和可维护的结构解决许多常见问题的好方法。

  2. 仅使用 Backbone 可能会做得更好。 Backbone Model-View-Router 模式只能让你走到这一步,当谈到复杂的、更大的应用程序时,Backbone 并不是特别好向您展示正确的方法。

    当您开始重复代码时,您必须重构、概括并保持 DRY。例如:

    • 要在一个地方定义一个加载图标,挂接到 jQuery.ajax 事件或覆盖 Backbone.sync
    • 对于简单的路由操作,定义一个声明性的 route->view 映射,根据需要使用可选的路由参数和 Autowiring 依赖项。使这些分层并基于此 map 生成导航 View 组件。
    • 将您的面包屑链接到 Backbone.history.navigate,并在路线更改时自动将路线片段映射到本地化的 UI 文本。

    .

    通过应用一些通用的软件开发模式,将逻辑封装到基类、服务、实用程序、小部件、装饰器、混入等等,我已经设法让 Backbone 应用程序从 50 行代码扩展到 50000 多个 LOC 巨兽-有你。这实际上与大型 Rails 项目没有什么不同:当应用程序的复杂性和规模增加时,对代码卫生和结构化模式的需求也会增加。

    要在项目之间转移通用解决方案,请从每个项目中创建独立的组件。在您提供的示例中,我可以看到 Backbone.LoadingIndicatorBackbone.NavigationBackbone.Breadcrumb 很容易形成。为了更进一步,用类似 Bower 的东西打包你的组件。并将它们作为依赖项包含在您的项目中。

您的问题没有正确答案,但可以肯定地说,Backbone 应用程序的扩展性远远超出您所描述的范围。它只是希望您进行缩放,作为返回,它可以让您自由地按照构建应用程序所需的方式构建应用程序,而不是按照框架要求的方式构建应用程序。一如既往,选择权在您手中。

关于javascript - 我发现自己在使用 Backbone.js 或其他 MVC 时重复了很多代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com