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

Javascript 我发现自己在使用Backbone.js或其他MVC时重复了很多代码,javascript,model-view-controller,backbone.js,client,Javascript,Model View Controller,Backbone.js,Client,和你们中的许多人一样,我已经开始使用只讲JSON(在我的例子中是Django或Rails)的后端编写越来越多的web应用程序 作为前端,我一直在使用MVC客户端,例如Backbone.js。据我所知,这个解决方案非常好,适用于许多类型的应用程序 令我恼火的是,我发现自己产生了大量的Javascript代码,这些代码几乎做了相同的事情。感觉上,我正在为每个新应用程序在主干上创建一个新层。我在这里思考的方式一定有问题 让我们举一个例子: 假设您有一个API,它提供了六个集合,并且您希望使用Twitt

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

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

令我恼火的是,我发现自己产生了大量的Javascript代码,这些代码几乎做了相同的事情。感觉上,我正在为每个新应用程序在主干上创建一个新层。我在这里思考的方式一定有问题

让我们举一个例子:

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

将有大量Javascript代码,只需设置所有模型、集合、视图以及围绕路由和导航的逻辑。您还必须考虑哪一个视图是活动的。< /P> 例如:

获取集合时的错误处理

如果集合正在加载,我们希望看到“加载”。如果它失败了,我们将看看原因。这与创建/保存/删除相同

路由

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

导航栏和面包屑

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

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

Backbone.js不适合我吗?什么样的选择更合适(哦,是的,我已经搜索过了)


感谢您抽出时间,我真的很感激您的所有想法。

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

  • 主干应用程序很容易变得冗长,因为框架本身非常小且简单。对于主干没有的每一个特性和代码行,您都必须编写。这是其基本理念的一部分。从文件中引用:

    ReBoo.js的目的是提供数据丰富的Web应用程序具有雄心勃勃的接口需要的共同基础-同时非常谨慎地避免将你画成一个角落,作出任何决策,你可以更好地准备自己。 所以这是一个折衷。还有其他更全面的框架,比如和,它们倾向于在您自己的代码库中生成更少的样板代码。它们都是一流的框架,您可能想看看。当然,取舍是更大的框架大小、更大的第三方复杂性,以及您将“把自己画在角落里”的风险

    如果您想继续使用主干网,但您觉得需要框架提供更多帮助,请查看。我个人没有使用过它,但对我来说,它似乎是用更少的代码和可维护的结构解决许多常见问题的好方法

  • 您可能只需要主干就可以做得更好。主干
    模型
    -
    视图
    -
    路由器
    模式只能让您了解到这一点,当您谈论复杂、更大的应用程序时,主干并不特别擅长向您展示正确的方法

    当你开始重复代码时,你必须重构、概括并保持它干燥。例如:

    • 要在一个位置定义加载图标,请钩住
      jQuery.ajax
      事件或覆盖
      Backbone.sync
    • 对于定义声明性
      route->view
      map的简单路由操作,请根据需要使用可选路由参数和autowire依赖项。使这些层次化并基于此地图生成导航视图组件
    • 将您的面包屑链接到主干网。历史记录。导航,并在路线更改时自动将路线片段映射到本地化的UI文本

    通过应用一些通用的软件开发模式,将逻辑封装到基类、服务、实用程序、小部件、装饰器、mixin和其他东西中,我已经成功地将主干应用程序从小型的50行扩展到50000多行。它与大型Rails项目没有什么不同:当应用程序的复杂性和规模增加时,对代码卫生和结构化模式的需求也会增加

    要在项目之间传递通用解决方案,请从每个项目中创建独立的组件。在您提供的示例中,我可以看到
    主干.LoadingIndicator
    主干.Navigation
    主干.Breadcrumb
    非常容易形成。要进一步了解这一点,请使用类似的东西打包组件,并将它们作为依赖项包含在项目中


  • 你的问题没有正确答案,但可以肯定地说,主干应用程序的规模远远超出了你所描述的范围。它只是希望您进行扩展,作为回报,它让您可以自由地按照应用程序需要的方式构建应用程序,而不是按照框架所说的方式构建应用程序。一如既往,选择权归你。

    我认为这是主干网开发人员的一个常见问题。我开始使用这样的框架来减少问题,减少了所需的样板代码的数量,并为modals、grids等常见组件设置了一些基类,这样我就可以让它更简单。这是一个非常好的答案。我一定会调查一下,木偶。我不知道它的存在。