GoFrame设计模式

一、MVC设计模式

请添加图片描述

MVC 模式代表 Model-View-Controller模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。说白了,MVC的理念就是把数据处理、数据展示(界面)和程序/用户的交互三者分离开的一种编程模式。

请添加图片描述

V:View视图,Web程序中指用户可以看到的并可以与之进行数据交互的界面,比如一个Html网页界面,或者某些客户端的界面,在前面讲过,MVC可以为程序处理很多不同的视图,用户在视图中进行输出数据以及一系列操作,注意:视图中不会发生数据的处理操作。

M:Model模型:进行所有数据的处理工作,被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

C:Controller控制器:负责接受用户的输入,并且调用模型和视图去完成用户的需求,控制器不会输出也不会做出任何处理,只会接受请求并调用模型构件去处理用户的请求,然后在确定用哪个视图去显示返回的数据

二、基于三层架构设计的GoFrame

请添加图片描述

传统的三层架构设计如上图,将项目代码划分了三层,每一层有其独自的职责边界。但在大多数的场景中,我们常看到的是以下的分层结构,将数据结构模型再进一步地抽离了出来统一维护。

请添加图片描述

表示层 - UI

User Interface位于三层构架的最上层,与用户直接接触,主要是B/S中的 WEB页面,也可以是API接口。表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送BLL系统中进行数据处理,处理后会将处理结果反馈到表示层中。

换句话说,表示层就是实现用户界面/API接口功能,将用户的需求传达和反馈,并用BLL或者是Model进行调试,保证用户体验。

业务逻辑层 - BLL

Business Logic Layer的功能是对具体问题进行逻辑判断与执行操作,接收到表示层UI的用户指令后,会连接数据访问层DAL,业务逻辑层在三层构架中位于表示层数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接指令传达,可以对接收数据进行逻辑处理实现数据的增删改查等功能,并将处理结果反馈到表示层UI中,实现软件功能

数据访问层 - DAL

Data Access Layer数据库的主要操控系统,实现数据的增删改查等操作,并将操作结果反馈到业务逻辑层BLL

在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中实现通用数据能力进行封装(例如通过ORM组件)来保证数据访问层DAL数据处理功能。

模型定义层 - Model

模型定义也常用Entity实体对象来表示,主要用于数据库表的映射对象,在信息系统软件实际开发的过程中,要建立对象实例,将关系数据库表采用对象实体化的方式表现出来,辅助软件开发中对各个系统功能的控制与操作执行。建立实体类库,进而实现各个结构层的参数传输,提高代码的阅读性。从本质上看,实体类库主要服务于表示层、业务逻辑层以及数据访问层,在三层之间进行数据参数传输,强化数据表示的简约性。

需要注意区分的是,这里的ModelMVC设计模式中的Model虽然都是一个名字但是差别巨大,职责完全不同。

三、GoFrame工程目录结构

/
├── api
├── hack
├── internal
│   ├── cmd
│   ├── consts
│   ├── controller
│   ├── dao
│   ├── logic
│   ├── model
│   |   ├── do
│   │   └── entity
│   └── service
├── manifest
├── resource
├── utility
├── go.mod
└── main.go 
目录/文件名称说明描述
api对外接口对外提供服务的输入/输出数据结构定义。考虑到版本管理需要,往往以api/xxx/v1...存在。
hack工具脚本存放项目开发工具、脚本等内容。例如,CLI工具的配置,各种shell/bat脚本等文件。
internal内部逻辑业务逻辑存放目录。通过Golang internal特性对外部隐藏可见性。
- cmd入口指令命令行管理目录。可以管理维护多个命令行。
- consts常量定义项目所有常量定义。
- controller接口处理接收/解析用户输入参数的入口/接口层。
- dao数据访问数据访问对象,这是一层抽象对象,用于和底层数据库交互,仅包含最基础的 CURD 方法
- logic业务封装业务逻辑封装管理,特定的业务逻辑实现和封装。往往是项目中最复杂的部分。
- model结构模型数据结构管理模块,管理数据实体对象,以及输入与输出数据结构定义。
- do领域对象用于dao数据操作中业务模型与实例模型转换,由工具维护,用户不能修改。
- entity数据模型数据模型是模型与数据集合的一对一关系,由工具维护,用户不能修改。
- service业务接口用于业务模块解耦的接口定义层。具体的接口实现在logic中进行注入。
manifest交付清单包含程序编译、部署、运行、配置的文件。常见内容如下:
- config配置管理配置文件存放目录。
- docker镜像文件Docker镜像相关依赖文件,脚本文件等等。
- deploy部署文件部署相关的文件。默认提供了Kubernetes集群化部署的Yaml模板,通过kustomize管理。
- protobuf协议文件GRPC协议时使用的protobuf协议定义文件,协议文件编译后生成go文件到api目录。
resource静态资源静态资源文件。这些文件往往可以通过 资源打包/镜像编译 的形式注入到发布文件中。
go.mod依赖管理使用Go Module包管理的依赖描述文件。
main.go入口文件程序入口文件。

请添加图片描述
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值