- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
和你们中的许多人一样,我已经开始使用仅使用 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 不适合我吗?哪些替代方案更合适(哦,是的,我已经搜索过了)?
感谢您抽出宝贵时间,我非常感谢您的所有想法。
最佳答案
我想说这里有两个因素在起作用:
主干应用程序确实很容易变得冗长,因为框架本身是如此的小和简单。对于 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.js和 AngularJS ,这往往会在您自己的代码库中生成更少的样板代码。它们都是一流的框架,您可能想看看。当然,权衡是更大的框架大小、更多的第三方复杂性,以及您将“把自己画在 Angular 落里”的风险。
如果你想继续使用 Backbone,但你觉得你需要框架的更多帮助,请查看 Backbone.Marionette .我没有亲自使用过它,但对我来说,它看起来是一种用更少的代码和可维护的结构解决许多常见问题的好方法。
仅使用 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.LoadingIndicator
、Backbone.Navigation
和 Backbone.Breadcrumb
很容易形成。为了更进一步,用类似 Bower 的东西打包你的组件。并将它们作为依赖项包含在您的项目中。
您的问题没有正确答案,但可以肯定地说,Backbone 应用程序的扩展性远远超出您所描述的范围。它只是希望您进行缩放,作为返回,它可以让您自由地按照构建应用程序所需的方式构建应用程序,而不是按照框架要求的方式构建应用程序。一如既往,选择权在您手中。
关于javascript - 我发现自己在使用 Backbone.js 或其他 MVC 时重复了很多代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724883/
我尝试理解[c代码 -> 汇编]代码 void node::Check( data & _data1, vector& _data2) { -> push ebp -> mov ebp,esp ->
我需要在当前表单(代码)的上下文中运行文本文件中的代码。其中一项要求是让代码创建新控件并将其添加到当前窗体。 例如,在Form1.cs中: using System.Windows.Forms; ..
我有此 C++ 代码并将其转换为 C# (.net Framework 4) 代码。有没有人给我一些关于 malloc、free 和 sprintf 方法的提示? int monate = ee; d
我的网络服务器代码有问题 #include #include #include #include #include #include #include int
给定以下 html 代码,将列表中的第三个元素(即“美丽”一词)以斜体显示的 CSS 代码是什么?当然,我可以给这个元素一个 id 或一个 class,但 html 代码必须保持不变。谢谢
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我试图制作一个宏来避免重复代码和注释。 我试过这个: #define GrowOnPage(any Page, any Component) Component.Width := Page.Surfa
我正在尝试将我的旧 C++ 代码“翻译”成头条新闻所暗示的 C# 代码。问题是我是 C# 中的新手,并不是所有的东西都像 C++ 中那样。在 C++ 中这些解决方案运行良好,但在 C# 中只是不能。我
在 Windows 10 上工作,R 语言的格式化程序似乎没有在 Visual Studio Code 中完成它的工作。我试过R support for Visual Studio Code和 R-T
我正在处理一些报告(计数),我必须获取不同参数的计数。非常简单但乏味。 一个参数的示例查询: qCountsEmployee = ( "select count(*) from %s wher
最近几天我尝试从 d00m 调试网络错误。我开始用尽想法/线索,我希望其他 SO 用户拥有可能有用的宝贵经验。我希望能够提供所有相关信息,但我个人无法控制服务器环境。 整个事情始于用户注意到我们应用程
我有一个 app.js 文件,其中包含如下 dojo amd 模式代码: require(["dojo/dom", ..], function(dom){ dom.byId('someId').i
我对“-gencode”语句中的“code=sm_X”选项有点困惑。 一个例子:NVCC 编译器选项有什么作用 -gencode arch=compute_13,code=sm_13 嵌入库中? 只有
我为我的表格使用 X-editable 框架。 但是我有一些问题。 $(document).ready(function() { $('.access').editable({
我一直在通过本教程学习 flask/python http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-wo
我想将 Vim 和 EMACS 用于 CNC、G 代码和 M 代码。 Vim 或 EMACS 是否有任何语法或模式来处理这种类型的代码? 最佳答案 一些快速搜索使我找到了 this vim 和 thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve this
这个问题在这里已经有了答案: Enabling markdown highlighting in Vim (5 个回答) 6年前关闭。 当我在 Vim 中编辑包含 Markdown 代码的 READM
我正在 Swift3 iOS 中开发视频应用程序。基本上我必须将视频 Assets 和音频与淡入淡出效果合并为一个并将其保存到 iPhone 画廊。为此,我使用以下方法: private func d
pipeline { agent any stages { stage('Build') { steps { e
我是一名优秀的程序员,十分优秀!