当前位置: 首页 > news >正文

兼职20网站开发网络优化工程师为什么都说坑人

兼职20网站开发,网络优化工程师为什么都说坑人,wordpress 子站点,做个一般的网站要多少钱文章目录 前言1 项目目录结构:2 初始化函数3 router4 api5 service6 dao7 Reference 前言 为降低代码耦合性,采用依赖注入的设计模式。原始请求路径:router -> api -> service -> dao。请求的为实际方法,具有层层依赖的…

文章目录

  • 前言
    • 1 项目目录结构:
    • 2 初始化函数
    • 3 router
    • 4 api
    • 5 service
    • 6 dao
    • 7 Reference

前言

为降低代码耦合性,采用依赖注入的设计模式。原始请求路径:router -> api -> service -> dao。请求的为实际方法,具有层层依赖的关系。现将方法抽象为接口,即a依赖b,但a不创建(或销毁)b,仅使用b,b的创建(或销毁)交给容器。

1 项目目录结构:

├─ddd
│  ├─router.go
│  │ 
│  ├─api
│  │  └─api_abstract.go   // 抽象接口
│  │  └─api_dog.go   // dog实现接口
│  │ 
│  ├─service
│  │  └─srv_abstract.go 
│  │  └─srv_dog.go  
│  │  
│  ├─dao
│  │  └─dao_abstract.go  
│  │  └─dao_dog.go  
│  │  
│  ├─model
│  │  ├─dto
│  │  └─schema

2 初始化函数

// 依赖注入
func InitDog() *DogApiImpl  {d := dao.NewDogDaoImpl(global.DB)s := service.NewDogSrvImpl(d)return api.NewDogApiImpl(s)
}

3 router

func Router() *gin.Engine {dog := init.InitDog()r.GET("/info", dog.Info)...
}

4 api

api_abstract.go中为抽象接口:

type DogAPIIface interface {Create(ctx *gin.Context)Update(ctx *gin.Context)Info(ctx *gin.Context)List(ctx *gin.Context)
}

api_dog.go中为api的实现方法:

type DogApiImpl struct {srv service.DogSrvIface
}var _ DogAPIIface = (*DogApiImpl)(nil)func NewDogApiImpl(srv service.DogSrvIface) *DogApiImpl {return &DogApiImpl{srv: srv,}
}func (da *DogApiImpl) Info(ctx *gin.Context) {var req dto.DogInfoReqif err := ctx.ShouldBindUri(&req); err != nil {return}res, err := da.srv.Info(ctx, req.ID)if err != nil {return}helper.Response.ResponseSuccessWithData(ctx, consts.Success, res)
}// 其他待实现方法
func (da *DogApiImpl) Create(ctx *gin.Context) {
}...

5 service

srv_abstract.go中为抽象接口:

type DogSrvIface interface {Create(ctx *gin.Context, req *dto.DogCreateReq) errorUpdate(ctx *gin.Context, req *dto.DogUpdateReq) errorInfo(ctx *gin.Context, req *dto.DogInfoReq) (*dto.DogInfoRes, error)List(ctx *gin.Context, req *dto.DogListReq) ([]*dto.DogInfoRes, int, error)
}

srv_dog.go中为service的实现方法:

type DogSrvImpl struct {dao dao.DogDaoIface
}var _ DogSrvIface = (*DogSrvImpl)(nil)func NewDogSrvImpl(dao dao.DogDaoIface) *DogSrvImpl {return &DogSrvImpl{dao: dao,}
}func (ds *DogSrvImpl) Info(ctx *gin.Context, req *dto.DogInfoReq) (*dto.DogInfoRes, error) {var data dto.DogInfoReq// 具体业务逻辑dog, err := ds.dao.FindByID(ctx, id)if err != nil {return nil, err}return &dog, err
}
...

6 dao

dao_abstract.go中为抽象接口:

type DogDaoIface interface {Create(ctx *gin.Context, req *dto.DogCreateReq) errorUpdate(ctx *gin.Context, req *dto.DogUpdateReq) errorInfo(ctx *gin.Context, req *dto.DogInfoReq) (*dto.DogInfoRes, error)List(ctx *gin.Context, req *dto.DogListReq) ([]*dto.DogInfoRes, int, error)
}

dao_dog.go中为dao的实现方法:

type DogDaoImpl struct {db *gorm.DB
}var _ dao.DogDaoIface = (*DogDaoImpl )(nil)func NewDogDaoImpl(db gorm.DB) *DogDaoImpl{return &DogDaoImpl{db: &db,}
}func (ds *DogSrvImpl) Info(ctx *gin.Context, req *dto.DogInfoReq) (*dto.DogInfoRes, error) {// 具体业务逻辑return nil, nil
}
...

7 Reference

https://blog.hackerpie.com/posts/testing/golang-write-testable-codes/
https://juejin.cn/post/7146852457774055437

http://www.yayakq.cn/news/475976/

相关文章:

  • 足彩网站建设竹子建站是什么
  • 监控直播网站开发手机开发者模式怎么开
  • 做特产网站wordpress 短代码 对齐
  • 宁夏省住房城乡建设厅网站南京ui培训
  • 深圳罗湖做网站公司手机网站一般多宽
  • 手机网站 制作技术专业团队英文
  • 江苏省建设厅 标准化网站网站建设有哪些功能模块
  • 闵行区做网站公司衡水哪儿专业做网站
  • 做网站f12的用处html5网页设计作业代码
  • 网站开发毕业设计开题报告网络营销是团队还是个人
  • 医疗网站开发ppt中国建设银行嵊州市支行网站
  • 做网站的图片素材网站有哪些公司网站建设费如何出账
  • 宽屏网站设计昆明网站优化
  • 做网站后台需要学什么长沙网络营销外包
  • 宁波建设厅网站建网站注册
  • 盐城营销网站建设中山网站制
  • 山西响应式网站平台网站免费优化软件
  • 网站页面大小优化怎么做做网站哪个公司好
  • 网站建设在哪里找客户wordpress安装后404
  • 滨州北京网站建设价格低义乌电子商务有限公司
  • 公众号做微网站小程序排行榜
  • 辽阳专业建设网站公司酒店电子商务网站建设流程
  • 中国建设银行网站医保苏州建设工程质量监督网站
  • 网站展示程序wordpress免插件图床
  • 怎么看网站的服务器百度指数查询
  • 企业网站开发报价形式成都科技网站建设联
  • 济南搜索引擎优化网站图片二维码生成器在线制作
  • 网站 建设 方案网站风格设计的选择
  • 网站建设公司成就彩票网站网站建设
  • 西域数码网站建设企业网站的内容模块