model 包含的不只实体类,还包含 你显示业务逻辑的类,实现数据访问的类。
因为N层架构的原因,它们被分布到MVC之外的其他项目中去了。
就算没有 N层架构 Model 也只是有实体类呀!处理逻辑的时候要么在控制器中,要么也是在外部定义
@~雨落忧伤~:
MVC中的MODEL是指业务模型,包含业务实体,业务逻辑业务流程业务规则,以及支撑业务的数据访问等基础设施,不仅仅是指N层架构中的实体。
因为MVC本质上只是表现层的一种设计模式,所以通常在M中我们只定义 VM,即ViewModel视图模型,用于在C和V之间传递数据。
但是从架构的角度考虑,M,模型指的是业务模型。
MVC只是整个业务体系上最终负责呈现的这一层的结构,和业务逻辑没任何关系,真正的业务还在这个的下面。
M在里面只是负责表现层的数据承载和传输作用,当C接受请求后是将请求包装转到真正的业务层,而业务层的设计和MVC没任何关系,最后在业务层处理后再组装为M作为数据信息提供给V进行呈现,如果出现M中对象和业务甚至仓储中数据对象一致的情况要么就是对这块理解有问题,要么就是业务过于简单,直接一个对象到底了。对于有复杂业务的程序,这块会有业务层自有的BO(bussiness object)和仓储所包含的DO或DTO,只有这样才能充分隔离不同层级不同的分工及充分避免变动带来的对整体结构的侵蚀
但是到处都说Model 是处理逻辑的 最终处理逻辑,处理业务逻辑的 我是一点也不明白
@~雨落忧伤~: 如果你看到哪里说这个M是处理业务逻辑的,那就可以忽略了吧,这种文章只能误导试听。
再怎么写写C处理逻辑还情有可原。
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
@Daniel Cai:
我们项目中的确有两个 Model 一个是和数据库一一对应的,一个是从数据库中取出来,进行一些操作 转化为在页面上显示的ViewModel
BO是呈现给用户的吧~ DO是保存在数据库中的~ DTO是哪里的呢?
@~雨落忧伤~: 一样的。
@Daniel Cai: 什么是一样的
@~雨落忧伤~: 在仓储层而言,data object和data transfer object是一样的
@Daniel Cai: 嗯嗯 谢谢了