美文网首页
MVC之Model 模型

MVC之Model 模型

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-10-07 10:51 被阅读0次

Model:模型。
状态:即数据。
逻辑:即服务、行为、函数、功能。
模型就是当我们使用软件去解决真实世界中各种实际问题的时候,对那些我们关心的实际事物的抽象和简化。比如在软件系统中设计"人"这个事物类型,会去考虑姓名、性别、年龄等一些系统必要属性。
Model可以进行创建、修改、删除,即状态的变化。

MVC中的模型:
模型层Model,它包含了模型上承载的实实在在的业务数据,还有不同数据间的关联关系。
模型实体:不包含逻辑,但包含状态,而逻辑被解耦到了无状态Service中。(状态:即数据)
贫血模型和充血模型
贫血模型:逻辑从模型实体中剥离出去,并放到了无状态的Service层,于是状态和逻辑就被解耦开。
充血模型:既包含数据,也包含逻辑,具备了更高程度的完备性和自恰性。

贫血模型

类class,有2个方法getters、setters等属性获取和设置方法,扮演的角色就是一个用作封装的容器。
类BookService,lendOut方法将书从图书馆借出,接收2个参数:图书id和用户id。

public class Book {
    private int id;
    private boolean onLoan;
    
    public int getId() {
        return this.id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public boolean isOnLoan() {
        return this.loan;
    }
    public void setOnLoan(boolean onLoan) {
        this.onLoan = onLoan;
    }
}


public class BookService {
    public Book lendOut(int bookId, int userId, Date date) {
           ... 逻辑代码,参数校验、数据源获得的原始数据装配到返回对象中,需要进行过滤条件
            ... 逻辑代码,数据库查询 
}
}

充血模型

模型实体:包含数据,也包含逻辑,具备更高程度的完备性和自洽性。
真正面向对象,通过操作有状态的模型实体类,就可以达到数据变更的目的。
类Book,lendOut方法不再需要传入bookid,

public class Book {
    private int id;
    private boolean onLoan;
    public void lendOut(User user, Date date) { ... }
    ... // 省略属性的获取和设置方法
}

Model内部层次划分

基于贫血模型的划分:每一层都可以调用自身所属层的其他类,也可以调用自己下方一层的类,但是不允许往上调用。Model Driven是和业务模型实体相关,Business Independent是基础设施服务,和业务无关。

  • Facade:提供粗粒度的接口。比如创建用户,同时免费赠送一本书,就需要2个服务的行为去做统一事务控制。
  • Service:属于单个领域模型实体的操作。
  • 数据访问层:数据访问中需要。比如关系型数据库,存放数据库字段和模型对象之间的ORM(Object-Relation Mapping,对象关系映射)关系。
  • 基础设施层


    image.png

相关文章

网友评论

      本文标题:MVC之Model 模型

      本文链接:https://www.haomeiwen.com/subject/eeqdqrtx.html