MVVM

https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel

aaarticlea/png;base64,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" alt="" />

Model–view–view-model (MVVM) is a software architectural pattern.

MVVM facilitates a separation of development of the graphical user interface – be it via a markup language or GUI code – from development of the business logic or back-end logic (the data model). The view model of MVVM is a value converter;[1] meaning the view model is responsible for exposing (converting) the data objects from the model in such a way that objects are easily managed and presented. In this respect, the view model is more model than view, and handles most if not all of the view's display logic.[1] The view model may implement a mediator pattern, organizing access to the back-end logic around the set of use cases supported by the view.

View model
The view model is an abstraction of the view exposing public properties and commands. Instead of the controller of the MVC pattern, or the presenter of the MVP pattern, MVVM has a binder. In the view model, the binder mediates communication between the view and the data binder.[clarification needed] The view model has been described as a state of the data in the model.[7]
Binder
Declarative data- and command-binding are implicit in the MVVM pattern. In the Microsoft solution stack, the binder is a markup language called XAML.[8] The binder frees the developer from being obliged to write boiler-plate logic to synchronize the view model and view. When implemented outside of the Microsoft stack the presence of a declarative databinding technology is a key enabler of the pattern.[4][9][clarification needed]

国内权威解释:

https://linux.cn/article-6481-1.html?utm_medium=weibo

MVVM代表的是Model-View-ViewModel,这里需要解释一下什么是ViewModel。ViewModel的含义就是 "Model of View",视图的模型。它的含义包含了领域模型(Domain Model)和视图的状态(State)。 在图形界面应用程序当中,界面所提供的信息可能不仅仅包含应用程序的领域模型。还可能包含一些领域模型不包含的视图状态,例如电子表格程序上需要显示当前排序的状态是顺序的还是逆序的,而这是Domain Model所不包含的,但也是需要显示的信息。

可以简单把ViewModel理解为页面上所显示内容的数据抽象,和Domain Model不一样,ViewModel更适合用来描述View。

MVVM的调用关系和MVP一样。但是,在ViewModel当中会有一个叫Binder,或者是Data-binding engine的东西。以前全部由Presenter负责的View和Model之间数据同步操作交由给Binder处理。你只需要在View的模版语法当中,指令式地声明View上的显示的内容是和Model的哪一块数据绑定的。当ViewModel对进行Model更新的时候,Binder会自动把数据更新到View上去,当用户对View进行操作(例如表单输入),Binder也会自动把数据更新到Model上去。这种方式称为:Two-way data-binding,双向数据绑定。可以简单而不恰当地理解为一个模版引擎,但是会根据数据变更实时渲染。

MVC 和 MVP

https://linux.cn/article-6481-1.html?utm_medium=weibo

用户的对View操作以后,View捕获到这个操作,会把处理的权利交移给Controller(Pass calls);Controller会对来自View数据进行预处理、决定调用哪个Model的接口;然后由Model执行相关的业务逻辑;当Model变更了以后,会通过观察者模式(Observer Pattern)通知View;View通过观察者模式收到Model变更的消息以后,会向Model请求最新的数据,然后重新更新界面。如下图:

MVC模式一样,用户对View的操作都会从View交移给Presenter。Presenter会执行相应的应用程序逻辑,并且对Model进行相应的操作;而这时候Model执行完业务逻辑以后,也是通过观察者模式把自己变更的消息传递出去,但是是传给Presenter而不是View。Presenter获取到Model变更的消息以后,通过View提供的接口更新界面

关键点:

  1. View不再负责同步的逻辑,而是由Presenter负责。Presenter中既有应用程序逻辑也有同步逻辑。
  2. View需要提供操作界面的接口给Presenter进行调用。(关键)

Segment解释 ViewModel

https://segmentfault.com/q/1010000000534091

而MVVM派的看法是,我给view里面的各种控件也定义一个对应的数据对象,这样,只要修改这个数据对象,view里面显示的内容就自动跟着刷新,而在view 里做了任何操作,这个数据对象也跟着自动更新,这样多美。所以:

ViewModel:就是与界面(view)对应的Model。因为,数据库结构往往是不能直接跟界面控件一一对应上的,所以,需要再定义一个数据对象专门对应view上的控件。而ViewModel的职责就是把model对象封装成可以显示和接受输入的界面数据对象。

至于viewmodel的数据随着view自动刷新,并且同步到model里去,这部分代码可以写成公用的框架,不用程序员自己操心了。

想好说清楚,最好就是使用用例来解释MVVM是如何工作的,下图以AngularJS为例。

如图所示,App.html是与app.js中的ViewModel绑定的View。如果有人想要修改app.js中的$scope.username属性,那么它会自动更新app.html中对应的name属性。反之也成立,如果有人想要修改app.html中的name属性值,那么也会自动更新$scope.user对象。App.html同时也可以对app.js发出命令,如调用$scope.save函数从而让app.js执行一些逻辑操作,如保存$scope.userusers.js模型中并与后端同步,那么它就可以与整个应用程序共享。

MVVM模式对于RIA应用来说是非常必要的,因为View被绑定至ViewModel的,并且当ViewModel的状态变化时,View会自动更新,它有效的隔离了View和它背后的业务逻辑。这也是为什么AngularJS需要双向绑定的原因。

知乎解释

https://www.zhihu.com/question/28893576

去年暑假实习一直在做MVVM的开发。就我所知所有的后端和业务逻辑都应该是在M端的,写界面XAML是V端,前后端之间可以互不干扰完成设计/开发,最后再加一个VM,而VM做的事就是衔接V和M。Wiki上这一段很清楚地解释了view model的作用,也就是把model中的数据对象转换成view可以直接使用的形式(比如string或者collection等等)。
视图层 V,展现数据,绑定事件,

视图模型层 VM, 从数据模型层变换而来, 除了数据或状态flag,还有许多事件回调,$watch回调(当某个数据变动时会执行的函数), widget的配置对象

模型层 M, 这是通过AJAX请求得到,或者通过后端输出时就打印在页面某个script标签内, 都是数据(JSON),没有函数

业务逻辑层 BS,这不归为MVVM之内,但它们应该使用类进行组织,在VM中的某个函数里面被调用。

Backbone

http://backbonejs.org/#Getting-started

Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.

When working on a web application that involves a lot of JavaScript, one of the first things you learn is to stop tying your data to the DOM. It's all too easy to create JavaScript applications that end up as tangled piles of jQuery selectors and callbacks, all trying frantically to keep data in sync between the HTML UI, your JavaScript logic, and the database on your server. For rich client-side applications, a more structured approach is often helpful.

With Backbone, you represent your data as Models, which can be created, validated, destroyed, and saved to the server. Whenever a UI action causes an attribute of a model to change, the model triggers a "change" event; all the Views that display the model's state can be notified of the change, so that they are able to respond accordingly, re-rendering themselves with the new information. In a finished Backbone app, you don't have to write the glue code that looks into the DOM to find an element with a specific id, and update the HTML manually — when the model changes, the views simply update themselves.

Philosophically, Backbone is an attempt to discover the minimal set of data-structuring (models and collections) and user interface (views and URLs) primitives that are generally useful when building web applications with JavaScript. In an ecosystem where overarching, decides-everything-for-you frameworks are commonplace, and many libraries require your site to be reorganized to suit their look, feel, and default behavior — Backbone should continue to be a tool that gives you the freedom to design the full experience of your web application.

Backbone Demo

todolist

http://backbonejs.org/examples/todos/index.html

aaarticlea/png;base64,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" alt="" />

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="utf-8">
<title>Backbone.js Todos</title>
<link rel="stylesheet" href="todos.css"/>
</head> <body> <div id="todoapp"> <header>
<h1>Todos</h1>
<input id="new-todo" type="text" placeholder="What needs to be done?">
</header> <section id="main">
<input id="toggle-all" type="checkbox">
<label for="toggle-all">Mark all as complete</label>
<ul id="todo-list"></ul>
</section> <footer>
<a id="clear-completed">Clear completed</a>
<div id="todo-count"></div>
</footer> </div> <div id="instructions">
Double-click to edit a todo.
</div> <div id="credits">
Created by
<br />
<a href="http://jgn.me/">J&eacute;r&ocirc;me Gravel-Niquet</a>.
<br />Rewritten by: <a href="https://github.com/tastejs/todomvc">TodoMVC</a>.
</div> <script src="../../test/vendor/json2.js"></script>
<script src="../../test/vendor/jquery.js"></script>
<script src="../../test/vendor/underscore.js"></script>
<script src="../../backbone.js"></script>
<script src="../backbone.localStorage.js"></script>
<script src="todos.js"></script> <!-- Templates --> <script type="text/template" id="item-template">
<div class="view">
<input class="toggle" type="checkbox" <%= done ? 'checked="checked"' : '' %> />
<label><%- title %></label>
<a class="destroy"></a>
</div>
<input class="edit" type="text" value="<%- title %>" />
</script> <script type="text/template" id="stats-template">
<% if (done) { %>
<a id="clear-completed">Clear <%= done %> completed <%= done == 1 ? 'item' : 'items' %></a>
<% } %>
<div class="todo-count"><b><%= remaining %></b> <%= remaining == 1 ? 'item' : 'items' %> left</div>
</script> </body>
</html>
// An example Backbone application contributed by
// [Jérôme Gravel-Niquet](http://jgn.me/). This demo uses a simple
// [LocalStorage adapter](backbone.localStorage.html)
// to persist Backbone models within your browser. // Load the application once the DOM is ready, using `jQuery.ready`:
$(function(){ // Todo Model
// ---------- // Our basic **Todo** model has `title`, `order`, and `done` attributes.
var Todo = Backbone.Model.extend({ // Default attributes for the todo item.
defaults: function() {
return {
title: "empty todo...",
order: Todos.nextOrder(),
done: false
};
}, // Toggle the `done` state of this todo item.
toggle: function() {
this.save({done: !this.get("done")});
} }); // Todo Collection
// --------------- // The collection of todos is backed by *localStorage* instead of a remote
// server.
var TodoList = Backbone.Collection.extend({ // Reference to this collection's model.
model: Todo, // Save all of the todo items under the `"todos-backbone"` namespace.
localStorage: new Backbone.LocalStorage("todos-backbone"), // Filter down the list of all todo items that are finished.
done: function() {
return this.where({done: true});
}, // Filter down the list to only todo items that are still not finished.
remaining: function() {
return this.where({done: false});
}, // We keep the Todos in sequential order, despite being saved by unordered
// GUID in the database. This generates the next order number for new items.
nextOrder: function() {
if (!this.length) return 1;
return this.last().get('order') + 1;
}, // Todos are sorted by their original insertion order.
comparator: 'order' }); // Create our global collection of **Todos**.
var Todos = new TodoList; // Todo Item View
// -------------- // The DOM element for a todo item...
var TodoView = Backbone.View.extend({ //... is a list tag.
tagName: "li", // Cache the template function for a single item.
template: _.template($('#item-template').html()), // The DOM events specific to an item.
events: {
"click .toggle" : "toggleDone",
"dblclick .view" : "edit",
"click a.destroy" : "clear",
"keypress .edit" : "updateOnEnter",
"blur .edit" : "close"
}, // The TodoView listens for changes to its model, re-rendering. Since there's
// a one-to-one correspondence between a **Todo** and a **TodoView** in this
// app, we set a direct reference on the model for convenience.
initialize: function() {
this.listenTo(this.model, 'change', this.render);
this.listenTo(this.model, 'destroy', this.remove);
}, // Re-render the titles of the todo item.
render: function() {
this.$el.html(this.template(this.model.toJSON()));
this.$el.toggleClass('done', this.model.get('done'));
this.input = this.$('.edit');
return this;
}, // Toggle the `"done"` state of the model.
toggleDone: function() {
this.model.toggle();
}, // Switch this view into `"editing"` mode, displaying the input field.
edit: function() {
this.$el.addClass("editing");
this.input.focus();
}, // Close the `"editing"` mode, saving changes to the todo.
close: function() {
var value = this.input.val();
if (!value) {
this.clear();
} else {
this.model.save({title: value});
this.$el.removeClass("editing");
}
}, // If you hit `enter`, we're through editing the item.
updateOnEnter: function(e) {
if (e.keyCode == 13) this.close();
}, // Remove the item, destroy the model.
clear: function() {
this.model.destroy();
} }); // The Application
// --------------- // Our overall **AppView** is the top-level piece of UI.
var AppView = Backbone.View.extend({ // Instead of generating a new element, bind to the existing skeleton of
// the App already present in the HTML.
el: $("#todoapp"), // Our template for the line of statistics at the bottom of the app.
statsTemplate: _.template($('#stats-template').html()), // Delegated events for creating new items, and clearing completed ones.
events: {
"keypress #new-todo": "createOnEnter",
"click #clear-completed": "clearCompleted",
"click #toggle-all": "toggleAllComplete"
}, // At initialization we bind to the relevant events on the `Todos`
// collection, when items are added or changed. Kick things off by
// loading any preexisting todos that might be saved in *localStorage*.
initialize: function() { this.input = this.$("#new-todo");
this.allCheckbox = this.$("#toggle-all")[0]; this.listenTo(Todos, 'add', this.addOne);
this.listenTo(Todos, 'reset', this.addAll);
this.listenTo(Todos, 'all', this.render); this.footer = this.$('footer');
this.main = $('#main'); Todos.fetch();
}, // Re-rendering the App just means refreshing the statistics -- the rest
// of the app doesn't change.
render: function() {
var done = Todos.done().length;
var remaining = Todos.remaining().length; if (Todos.length) {
this.main.show();
this.footer.show();
this.footer.html(this.statsTemplate({done: done, remaining: remaining}));
} else {
this.main.hide();
this.footer.hide();
} this.allCheckbox.checked = !remaining;
}, // Add a single todo item to the list by creating a view for it, and
// appending its element to the `<ul>`.
addOne: function(todo) {
var view = new TodoView({model: todo});
this.$("#todo-list").append(view.render().el);
}, // Add all items in the **Todos** collection at once.
addAll: function() {
Todos.each(this.addOne, this);
}, // If you hit return in the main input field, create new **Todo** model,
// persisting it to *localStorage*.
createOnEnter: function(e) {
if (e.keyCode != 13) return;
if (!this.input.val()) return; Todos.create({title: this.input.val()});
this.input.val('');
}, // Clear all done todo items, destroying their models.
clearCompleted: function() {
_.invoke(Todos.done(), 'destroy');
return false;
}, toggleAllComplete: function () {
var done = this.allCheckbox.checked;
Todos.each(function (todo) { todo.save({'done': done}); });
} }); // Finally, we kick things off by creating the **App**.
var App = new AppView; });

Backbone 如何实现双向数据绑定?

http://codedocker.com/backbone-events-introduce/

model to view

var View = Backbone.View.extend({
initialize:function(){
this.listenTo(this.model,'change:name',this.onNameChange);
},
onNameChange:function(){
this.$('.name').text(this.model.get('name'));
}
template: '<span class="name"></span>'
});
var m = new Backbone.Model({name:'Jack'});
var v = new View({model:m});
m.set('name','John');

view to model

var View = Backbone.View.extend({
initialize:function(){
this.listenTo(this.model,'change:name',this.onNameChange);
},
onNameChange:function(){
this.$('.name').text(this.model.get('name'));
}
template: '<input type="text" class="name-input"><span class="name"></span>',
events: {'input .name-input': '_changeName'},
_changeName: function(e){
var value = e.currentTarget.value;
this.model.set('name', value);
return false;
}
});
var m = new Backbone.Model({name:'Jack'});
var v = new View({model:m});
m.set('name','John');

MVVM与Backbone demo的更多相关文章

  1. 使用Prism提供的类实现WPF MVVM点餐Demo

    使用Prism提供的类实现WPF MVVM点餐Demo 由于公司开发的技术需求,近期在学习MVVM模式开发WPF应用程序.进过一段时间的学习,感受到:学习MVVM模式,最好的方法就是用MVVM做几个D ...

  2. (五)backbone - DEMO - 通信录改造之使用requirejs

    DEMO介绍是 DEMO通信录的扩展,使用requirejs模块化整合 大体实现 • model文件 model/contact.js define(function (){ // user cont ...

  3. (四)backbone - DEMO - 通信录

    DEMO介绍 是DEMO - User List 的扩展,增加查询 大体实现 •创建Contact Model var Contact = Backbone.Model.extend({ defaul ...

  4. (二)backbone - DEMO - user list

    Demo介绍 学习了如何基本的使用Backbone,展示用户信息 使用JQuery操作DOM,backbone.localStorage.js操作localstorage 大体实现 •创建user M ...

  5. Xamarin.Android和UWP之MVVM的简单使用(二)

    0x01 前言 前面一篇,Xamarin.Android和UWP之MVVM的简单使用(一),主要讲了MvvmLight的简单使用 这篇主要讲讲MvvmCross的简单使用,例子的话,还是和上篇的一样. ...

  6. Xamarin.Android和UWP之MVVM的简单使用(一)

    0x01 前言 就目前而言,MVVM可以说是挺流行的,无论是web端还是移动端,web端的主要代表angularjs,avalonjs等, 移动端(xamarin,uwp)的代表应该是mvvmligh ...

  7. 最轻量级的前端Mvc框架backbone

    最轻量级的前端Mvc框架backbone依赖最轻量级的库understore backbone并非将前端再次切分为mvc,而是分为了七大模块,分别是:Events.Model.Collection.R ...

  8. 使用backbone.js、zepto.js和trigger.io开发HTML5 App

    为了力求运行速度快.响应迅即,我们推荐使用backbone.js和zepto.js. 为了让这个过程更有意思,我们开发了一个小小的示例项目,使用CSS重置样式.Backbone.js和带转场效果的几个 ...

  9. devexpress WinForms MVVM

    WinForms MVVM This section is dedicated to the Model-View-ViewModel (MVVM) architectural pattern. Yo ...

随机推荐

  1. 【Cocos2d-x for WP8 学习整理】(1)创建一个新项目

    喜大普奔                         10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2 ...

  2. Kinect的那些事儿

    Kinect结合Unity3d跑酷游戏体感Demo 今天收拾东西,在柜子的翻出了一台崭新的Kinect,说起来真是惭愧,大学毕业那会儿,慈老师(和名字一位慈祥的好老师,也是我的毕业设计指导老师)赞 助 ...

  3. DB2常用命令

    DB2安装启动服务中启动不了,可用command启动并查看windows系统的日志.1.启动数据库  db2start2.停止数据库  db2stop3.连接数据库运行 db2命令之前要先运行db2c ...

  4. ZeroMQ接口函数之 :zmq_null - 无安全和加密

    ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_null zmq_null(7) ØMQ Manual - ØMQ/4.1.0 Name zmq_null - 无 ...

  5. 【Telerik】<telerik:RadGridView/>控件的使用

    学习Telerik第三方控件中的WPF时,对于RadGridView控件做的一些记录. AutoGenerateColumns:启动时是否生成列 ShowGroupPanel:是否显示表格的分组名称 ...

  6. Mysql 中的事件//定时任务

    什么是事件 一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行: 开启事件 查看是否开启: show variables ...

  7. linq To DataTable

    //将IEnumerable<T>类型的集合转换为DataTable类型 1111 public static DataTable LINQToDataTable<T>(IEn ...

  8. MySQL(Percona Server) 5.6 主从复制

    MySQL(Percona Server) 5.6.15 主库:192.168.2.21 从库:192.168.2.22 例如我们同步的数据库为:test. 如果需要同步多个数据库下面会有说明. My ...

  9. 设计模式之六大原则——开闭原则(OCP)

    转载于: http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793454.html 开闭原则(Open Closed Principle)是Ja ...

  10. C#拾遗-边边角角

    1.扩展方法 public static 方法返回值类型 扩展方法名(this 要扩展类型 obj,调用扩展方法时需要的参数){ return "返回值"} 2.运算符重载 pub ...