这是一个通用的体系结构问题。因此,想想MVC模型,其中包含数据的模型与特定的UI字段绑定,因此它们同时更新。将UI状态直接存储在数据模型中是否好?
现在我需要存储与该UI字段相关联的某个UI状态,例如指示该字段是否处于编辑模式的标志。用户界面将根据这个编辑标志进行更新,例如当编辑标志为真时它将显示一些编辑控件。
因此,我会更好地重用数据模型,并将状态与其他后端相关数据一起存储(我肯定不会将此标志发送回后端,因为后端并不涉及UI状态),或者创建一个新的容器跟踪UI状态?
这是一个通用的体系结构问题。因此,想想MVC模型,其中包含数据的模型与特定的UI字段绑定,因此它们同时更新。将UI状态直接存储在数据模型中是否好?
现在我需要存储与该UI字段相关联的某个UI状态,例如指示该字段是否处于编辑模式的标志。用户界面将根据这个编辑标志进行更新,例如当编辑标志为真时它将显示一些编辑控件。
因此,我会更好地重用数据模型,并将状态与其他后端相关数据一起存储(我肯定不会将此标志发送回后端,因为后端并不涉及UI状态),或者创建一个新的容器跟踪UI状态?
当UI窗体/模型变脏(用户首先启动与窗体的第一次交互)后,您将模型的状态(自然是UI)存储在一个对象中,我们称之为'bag'。 随着用户修改值,您会连续更新包。在用户尝试离开表单(关闭窗口,在浏览器等等中来回移动)之前,您可以将该包保存为cookie(如果它很小)或者对您的服务器进行发布并将其保存为json对象一个带有4个字段的表,如id,jsondata,modelUiIdentifier,userIdentifier。稍后当该页面稍后加载时,您可以获取该数据(如果它存在于该模型/用户界面和用户)并且保存模型对象(这会自动更新您的UI)。
如果使用angularjs,只是通过复制其数据通过相关的UI部分的$范围对象迭代(在$范围对象非“功能”的价值观,并发送至服务器像上面所解释的)
状态数据,数据是状态。考虑到这一点,如果您需要存储与UI字段关联的某个UI状态,请使用工厂创建一个对象。改变那个对象,你改变UI状态。另外,工厂可以通过简单注入在整个项目中重复使用,管理不同状态的状态,并且易于测试。
更新:
服务的简单演示管理数据/状态http://plnkr.co/edit/PdDmUz?p=preview
的.html
<h3>Controller 1</h3>
Check me, to check both:
<input type="checkbox" ng-model="selected.data" />
<pre>selected.data: {{selected.data}}</pre>
<h3>Controller 2</h3>
<div ng-controller="MainCtrl2">
Or, check me:
<input type="checkbox" ng-model="selected2.data" />
<pre>selected2.data: {{selected2.data}}</pre>
的.js
app.controller('MainCtrl', function($scope,uiFieldState) {
$scope.selected = uiFieldState.uiObject;
})
app.controller('MainCtrl2', function($scope,uiFieldState) {
$scope.selected2 = uiFieldState.uiObject;
})
app.factory('uiFieldState', function() {
return {uiObject: {data: null} };
});
在我看来,我将“数据”称为存储在数据库中的实际数据(如用户名),将其绑定到用户界面的目的是显示并通过用户界面进行更新。然而,state是一个纯粹的可视化状态(就像这个字段处于焦点或编辑模式中一样),我认为这不值得进入包含后端数据的同一模型。所以在你的回答中,你是否建议我将UI状态存储在不同的对象中? –
用户名'data'通常用于创建持久性授权/许可'状态'服务,任何'编辑模式'功能都将根据用户权限级别'data'在'状态'中有条件地应用。上面我已经使用服务对象添加了UI状态的示例。下面是一个示例应用程序(使用angularJS书进行应用程序开发),使用Object来控制诸如“编辑模式”之类的服务https://github.com/angular-app/angular-app/blob/master/client/ SRC /普通/安全/ security.js#L99 – cheekybastard
你是指服务器端作为后端。我认为一个持久性存储作为后端和服务器端编程(例如,用于Java中的jsp/servlets等)作为前端。 –
@pawindergupta是的,在这种情况下,我将持久存储层称为后端,它处理读取/更新数据库。 –