我是骨干新手,在完成一些教程应用后试用我的第一个应用程序。
我想知道完成以下内容的最佳方法是什么
在后端(rails)
我有一个模型名称Business,它是一个具有很多属性的复杂模型,它有一个相关的地址(has_one :address
),并且有一个头像和另一个配置文件pitcure等等。
从我的前端,我希望能够获取和更新业务配置文件的特定部分,让我说我只想获取包含名称,类别和地址的basic_info,而不是我希望能够更新配置文件图片和头像。
我在骨干网上看到的是模型有方法save,update,fetch,destroy
如果我想使用fetch_basic_info
,fetch_profile_picture
,update_profile_picture
等其他方法,该怎么办?对于这些,我希望相应的通知得到相应的通知。
以下是我的想法
让我们说我想获取基本信息
向骨干模型添加函数fetch_basci_info
$.ajax
向服务器发送自定义ajax请求"basicinfo:fetched"
在我的路由器功能
中BasicInfoView
并将模型对象传递给它model.bind('basicinfo:fetched', this.render)
model.fetch_basic_info
(在路由器初始化中)因此路由器被调用它创建视图绑定自定义事件并且调用model.fetch_basic_info()
请求被发送到服务器响应被返回(我是否手动调用set来设置骨干模型的属性)。之后触发自定义事件事件,通知视图并呈现自身
这是我的第一个真正的骨干应用程序,所以如果我正在做的事情真的让我停下来。
您对此有何看法。
感谢您阅读和feedbcak。
答案 0 :(得分:0)
我的第一个想法是你将复制骨干已经提供的许多功能。我没有看到任何理由您必须在客户端完全复制您的业务模型。为什么不将您的基本信息,个人资料等分解为单独的Backbone模型,并根据需要将它们应用到您的视图中。
答案 1 :(得分:0)
你要做的不是非常RESTful。如果你试图这样做是为了节省资源或网络带宽,那么它几乎肯定是一个不成熟的优化 - 除非我们谈论的是数百或数千个字段 - 在这种情况下会有更好的解决方案。
事实是,获取一张个人资料图片使用的资源与获取50-100个字段的资源大致相同。是略多的数据,但考虑到90%的工作,延迟,资源和网络连接中的等待时间来自建立连接,你实际上并没有节省那么多。
在数据库端加一个
select * from businesses where id=123
只使用了一点点
select profilepic from businesses where id=123
因为作业中最困难的部分是建立与数据库的连接并找到正确的行。在那之后,它只需要更多的数据 - 添加50个额外的列将对性能产生不明显的影响。
唯一一次,如果您的模型/表包含数百或数千个属性。在这种情况下,解决方案是将您的模型拆分为子模型。并通过REST单独处理它们。但它们应该是业务逻辑类型。例如,Business包含Address,Employee,ShareStructure。
我自己曾经是一个过早的优化者......“当我只需要一列时,一定不能返回10列”。但是,如果尝试为您可能需要的不同组合中的每个数据子集编写Web服务API,那么您的API将几乎无法使用且无法维护。你也永远不会完成任何工作。
假设您想从Facebook的API获取CocaCola的个人资料照片,您只需致电:
https://graph.facebook.com/cocacola
并获取图片属性。谁在乎您是否不需要其他数据?它使事情变得简单,安静,易于维护。