Golang Go语言中 service 与 model 最佳实践是什么

发布于 1周前 作者 h691938207 来自 Go语言
service  与 model 大家都是用的
想请问下大家


Golang Go语言中 service 与 model 最佳实践是什么
9 回复

可以看看 kratos 框架

更多关于Golang Go语言中 service 与 model 最佳实践是什么的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我的分层是这样的:

handler -> service -> dao/repository -> model

handler: 负责接收数据、校验数据、调用逻辑层(service), 返回数据
service:负责逻辑编排,不会操作数据库、api 之类的
dao/repo: 数据调用层,不管是 三方接口、db 、cache 、MongoDB 、ES 等都在这里
model: db 层,仅有数据表结构体和表名的定义

可以参考: https://github.com/go-microservice/moment-service

同想知道~ 写 go 以来一直是自由发挥,项目逻辑分层都不清晰。有什么好的开源项目学习吗?

你发的代码连接地址我看了。增加了 repo 层,我看看 kratos 框架。

Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具。 我刚看了下项目结构,和我需要的不太相符。

怎么爽怎么写

我们是 route -> controller -> proxy -> contract -> repository

model 用来传递数据,除了 route ,其它层都会用到它。

我遇到过和你一样的问题,如何更好的组织数据访问层和核心领域模型的代码。
相比 Java 构建的系统,代码组织方式、分层等最佳实践已经固化在 Sprint Boot 、Sofa Boot 等框架中,Golang 缺乏这种标准化的最佳实践。
这个时候我想到领域驱动设计( DDD ),结合 DDD 中的思想组织代码结构。
最终我在项目中抽象了这三层:仓储层 => 领域层 => 表现层,基本上可以解决中小型项目的代码组织问题。

在Golang中,关于service与model的最佳实践,主要可以从以下几个方面进行考虑:

Service层最佳实践

  1. 领域驱动设计:在微服务架构中,使用DDD能够更好地组织代码,提高系统的可扩展性和可维护性。通过定义清晰的领域模型和聚合根,确保Service层能够准确地反映业务需求。
  2. 服务通信:Service层通常负责与其他服务进行通信。在Golang中,可以使用HTTP库或gRPC来实现RESTful API或消息队列等通信方式。
  3. 服务发现和负载均衡:利用Consul、Etcd等工具实现服务发现和负载均衡,提高系统的可靠性和性能。

Model层最佳实践

  1. 数据模型设计:Model层主要负责数据的持久化和访问。设计数据模型时,需要充分考虑数据的完整性和一致性,同时关注性能优化。
  2. ORM框架:在Golang中,可以使用ORM框架(如GORM)来简化数据库操作,提高开发效率。
  3. 数据访问层分离:将业务逻辑与数据访问层分开,实现更高的可重用性和可测试性。这有助于在不影响业务逻辑的情况下,对数据库进行升级或迁移。

综上所述,遵循这些最佳实践有助于构建健壮、可扩展且可维护的Golang应用程序。

回到顶部