美文网首页
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