简介

  • MVC模式指的是:Modal模型、View视图、Controller控制器
  • 他是一种使用业务逻辑、数据、视图进行分离的方式来,组织架构代码的模式

(十三)MVC模式 - 图1

代码示例

  1. // 一个简单的MVC实例
  2. var MVC = {};
  3. MVC.model = (function () {
  4. var data = {
  5. sideBar: [{
  6. title: 'sideBar1',
  7. href: './a.html'
  8. }, {
  9. title: 'sideBar2',
  10. href: './b.html'
  11. }, {
  12. title: 'sideBar3',
  13. href: './c.html'
  14. }]
  15. };
  16. return {
  17. getData: function (key) {
  18. return data[key];
  19. },
  20. setData: function (key, value) {
  21. data[key] = value;
  22. if (key === 'sideBar') {
  23. var v = MVC.view;
  24. v('createSideBar');
  25. }
  26. }
  27. }
  28. })();
  29. MVC.view = (function () {
  30. var m = MVC.model;
  31. var view = {
  32. createSideBar: function () {
  33. var data = m.getData('sideBar');
  34. var html = '';
  35. html += '<div id="sideBar">';
  36. for (var i = 0; i < data.length; i++) {
  37. html += '<div class="sideBar-item"><a href="' + data[i].href + '">' + data[i].title + '</a></div>';
  38. }
  39. html += '</div>'
  40. document.getElementById('root').innerHTML = html;
  41. }
  42. }
  43. return function (v) {
  44. view[v]();
  45. }
  46. })();
  47. MVC.ctrl = (function () {
  48. var m = MVC.model;
  49. var v = MVC.view;
  50. var ctrl = {
  51. initSideBar: function () {
  52. v('createSideBar');
  53. },
  54. updateSideBar: function () {
  55. m.setData('sideBar', [{ title: 'new SideBar', href: './aaa.html' }]);
  56. }
  57. }
  58. return ctrl;
  59. })();
  60. window.onload = function () {
  61. MVC.ctrl.initSideBar();
  62. setTimeout(function () {
  63. MVC.ctrl.updateSideBar();
  64. }, 3000);
  65. }

优缺点

优点:

  • 耦合性低;
  • 重用性高;
  • 部署快;
  • 可维护性高;
  • 有利于软件工程化管理。


缺点:

  • 不适合小型中等规模的应用程序;
  • 增加了系统结果和实现的复杂性;
  • View 和 Model 之间不匹配,用户界面和流程要考虑易用性,用户体验优化同时考虑业务流程的精确和无错。
  • Controler 和 Model 之间界线不清,什么样的逻辑是界面逻辑,什么样的逻辑是业务逻辑,很难定义清楚。没有明确的定义;
  • View 的变化不能完全由 Model 控制,即 Observer 模式不足以支持复杂的用户交互。
    • 这其实要求VC之间要有依赖。牵一发而动全身,数据,显示不分离,Controller,Model 联系过于紧密。