关于model层变更如何通知controller层

在IOS的mvvm模式中,model层的变更主要有两种方式,一种是delegate,一种是kvo

delegate就是定义一套协议,然后controller实现这套协议,在数据变更的时候直接通过delegate通知controller层,因为delefate需要实现很多协议,会有一点低耦合,而kvo的解决办法是,在controller层 去监听某个model的某个属性,然后写一个统一的方法去相应属性的变更,这样的好处就是 我不需要去指定实现某种协议,所以的变更控制都在controller层。那这些对于前端mvvm有何借鉴意义呢?

之前在前端model层通知controller层主要还是通过类似代理的方式来实现,这样就是controller层 需要实现指定的协议,举一个例子,

我们有一个user数据层,主要处理和user相关的数据,比如获取数据列表,一般如果用deledate的话,就是在数据请求结束后,调用delegate.dataFinish之类的方法去处理数据,那如果用kvo的实现方式,我们就应该在user层 定义一个userList数组,用来把所有请求过来的数据全部放在userList数组里面,然后controller层 去监听这个userList的变化,如果变化了 就更新界面

具体实现:

  

//model层
class User{
  constructor() {
    this.dep = {}
    this._userList = [];//这里主要监听userList
  }

   get userList() {
      return this._userList;
   }

   set userList(data) {
     this._userList = data;
     if(this.dep.hasOwnProperty("userList")){
       let _noticefy = this.dep[_key];
       for(let i = 0; i < _noticefy.length; i++){
         _noticefy[i](data);
       }
     }
   }

  addObserver(options){
    let _key = options.key;//监听的属性字段
    let _noticefy = options.noticefy;//属性变更后触发的方法
    if(this.dep.hasOwnProperty(_key)){
      this.dep[_key].push(_noticefy);
    }else{
      this.dep[_key] = [_noticefy];
    }
  }
}

//在controller层,我们如果需要使用的话,我们就可以监听
let _user = new User();
_user.addObserver({
  key:"userList",
  noticefy:function(){}
})

//这样的话 是不是真正的数据驱动了呢?

  

原文地址:https://www.cnblogs.com/mrzhu/p/10451212.html

时间: 2024-11-10 14:01:02

关于model层变更如何通知controller层的相关文章

深入理解--SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用

SSM是sping+springMVC+mybatis集成的框架. MVC即model view controller. model层=entity层.存放我们的实体类,与数据库中的属性值基本保持一致. service层.存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方

Junit mockito 测试Controller层方法有Pageable异常

1.问题 在使用MockMVC+Mockito模拟Service层返回的时候,当我们在Controller层中参数方法调用有Pageable对象的时候,我们会发现,我们没办法生成一个Pageable的对象,会报一个Pageable是一个接口的错误.当我们把所有的参数从Pageable接口变成Pageable的实现类PageRequest的时候,所有的方法参数都换成PageRequest,又会出现一个新的错误,且不说PageRequest不能作为参数用于hibernate的分页查询,另一方面,它没

Controller 层实现

一.实验介绍 1.1 实验内容 本节课程主要利用 Spring MVC 框架实现 Controller 层以及一些辅助类的实现. 1.2 实验知识点 Spring MVC 框架 1.3 实验环境 JDK1.8 Eclipse JavaEE 二.实验步骤 在项目 hrms 的目录 src/main/java 下新建包 com.shiyanlou.controller,作为 Controller 层的包,新建包 com.shiyanlou.util,作为辅助类的包,这些辅助类是为了使 Control

controller层统一拦截进行日志处理

前言 在项目中添加统一日志时,我们往往会用到aop进行切面处理,常用在controller层添加切面,以处理请求和返回的各项参数数据. 使用切面进行日志处理 下面我们就看一个例子说明基本的使用方式: package com.ding.test.core.aspect; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.

Jeecg Controller层的模版----自己的版本

自己修改了下Controller版本,改变原因, 1.msg面临的并发危险, 2.ModelAndView基本毫无作用的地位 3.ModelMap代替Request 出来的结果如图,使用了静态变量代替了view 效果如下: 模板是 package ${bussiPackage}.controller.${entityPackage}; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax

DAO层,Service层,Controller层、View层介绍

来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此 接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及 有关数据库连接的参数都在Spring的配置文件中进行配置. Service层 Service 层主要负责业

Controller层的写法

项目中的两个Controller层实现类,一个是跳转到jsp页面,一个是以Json形式返回Map键值对. 跳转到jsp页面: 1 package com.controller; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 7 import org.apache.commons.httpclient.HttpClient; 8 import org.apache.common

DAO层,Service层,Controller层、View层

DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置. Service层:Service层主要负责业务模块的逻辑应用设计.同样是首先设计接口,再设计其实现的类,接着再Spring的配置文件中配

Spring mvc 对象的对象的属性如何传到controller层

jsp页面的form: <form class="am-form" id="addForm" action="addStudent" method="post"> <div class="am-g am-margin-top"> <div class="am-u-sm-4 am-u-md-2 am-text-right">学生编号</div>