- MVC模式
- 1.MVC模式定义
- 2.MVC模式优势
- 3.MVC模式实践
- 3.1 controller实现
- 3.2 model实现
- 3.3service实现
距离上一篇文章已经过了很久了,感觉一年工作中人都变得懒散了,已经从事C++工作已经一年了,这一年中感觉没有写大型项目,都是在原有项目上修修补补,自己也感觉没有什么成就感,同时开始怀疑人生,在挣扎了一番之后,决定转学golang,这篇文章就谈谈我对MVC的领悟。
1.MVC模式定义mvc模式是软件工程中的一种架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)、控制器(Controller)。
Model:主要定义一些数据存储结构以及对数据的访问和修改,比如对数据库的访问
View:用于数据展示,与用户进行交互
Controller:主要用于控制程序的流程,对请求做出响应,Controller有时也会较多重复的逻辑,为了让Controller层不那么臃肿,分离出了service层,用于处理相关的业务逻辑,降低Controller的耦合程度,Controller去做一些对数据分
2.MVC模式优势-
1.适合大型应用开发,将web应用程序逻辑划分和组织成大型应用程序变得非常容易,有助于快速找到代码的特定部分并允许轻松添加新功能
-
2.支持异步方法调用,构建加载速度更快的web应用程序
-
3.易于规划和维护,简化了测试过程,更容易调试大型系统
构建了一个增删改查项目进行实践,首先得描述一下多态,因为要实现多层之间的解耦,多态必不可少,golang中的多态是使用interface实现的(C++使用虚函数实现多态)
3.1 controller实现type Controller interface {
SelectController(c *gin.Context) // 增删改查方法
UpdateController(c *gin.Context)
AddController(c *gin.Context)
DeleteController(c *gin.Context)
}
type controller struct {
Service service.Service // Sevice接口
}
func NewController() Controller { // 返回一个Controller方法
// 此处为什么不返回结构体呢?
// 如何返回定义一个新的控制器,上层代码也需要进行修改,返回接口能降低层级之间的耦合
return &controller{
Service: service.NewService(),
}
}
// 方法具体实现
// to do 主要提取HTTP请求中字段,具体逻辑在service层实现
3.2 model实现
// 数据存储格式
type People struct {
Name string `json:"name"`
Age int `json:"age"`
Gender string `json:"gender"`
}
// 数据入库操作
type DataModel interface {
SelectData(string) bool
UpdateData(People) bool
AddData(People) bool
DeleteData(string) bool
}
type dataModel struct {
}
// 返回上层调用接口
func NewDataModel() DataModel {
return &dataModel{}
}
3.3service实现
// 业务逻辑具体实现方法
type Service interface {
Select(string) bool
Update(models.People) bool
Add(models.People) bool
Delete(string) bool
}
type service struct {
dataModel models.DataModel
}
// 为controller提供接口,实现具体的业务逻辑
func NewService() Service {
return &service{dataModel: models.NewDataModel()}
}
// 实现具体的业务逻辑
func NewService() Service {
return &service{dataModel: models.NewDataModel()}
}



