Skip to content

Commit

Permalink
[feat] blog format code & fix url 404 (#195)
Browse files Browse the repository at this point in the history
* [feat] format code & fix url 404

* [feat] format code & fix url 404

---------

Co-authored-by: FangjieLiang <[email protected]>
  • Loading branch information
pemako and FangjieLiang authored Jun 27, 2023
1 parent 041e086 commit d073145
Show file tree
Hide file tree
Showing 4 changed files with 359 additions and 312 deletions.
24 changes: 15 additions & 9 deletions blog/2021-03-08-go-project-layout.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,16 +152,21 @@ application
> /pkg 目录内,可以参考 go 标准库的组织方式,按照功能分类。/internal/pkg 一般用于项目内的 跨多个应用的公共共享代码,但其作用域仅在单个项目工程内。
由 Travis Jeffery 撰写的 I'll take pkg over internal 博客文章提供了 `pkg``internal` 目录的一个很好的概述,以及什么时候使用它们是有意义的。
当根目录包含大量非 Go 组件和目录时,这也是一种将 Go 代码分组到一个位置的方法,这使得运行各种 Go 工具变得更加容易组织。
当根目录包含大量非 Go 组件和目录时,这也是一种将 Go 代码分组到一个位置的方法,这使得运行各种 Go 工具变得更加容易组织。

## 服务应用目录

### /api
​ API 协议定义目录,services.proto protobuf 文件,以及生成的 go 文件。我们通常把 api 文档直接在 proto 文件中描述。

​API 协议定义目录,services.proto protobuf 文件,以及生成的 go 文件。我们通常把 api 文档直接在 proto 文件中描述。

### /configs
​ 配置文件模板或默认配置。

​配置文件模板或默认配置。

### /test
​ 额外的外部测试应用程序和测试数据。你可以随时根据需求构造 /test 目录。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用 /test/data 或 /test/testdata (如果你需要忽略目录中的内容)。请注意,Go 还会忽略以 “.” 或 “_” 开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。

​额外的外部测试应用程序和测试数据。你可以随时根据需求构造 /test 目录。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用 /test/data 或 /test/testdata (如果你需要忽略目录中的内容)。请注意,Go 还会忽略以 “.” 或 “_” 开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。

## 服务内部目录

Expand All @@ -173,14 +178,15 @@ internal 是为了避免有同业务下有人跨目录引用了内部的 data、

业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口。我们可能会把 data 与 dao 混淆在一起,data 偏重业务的含义,它所要做的是将领域对象重新拿出来,我们去掉了 DDD 的 infra 层。

### biz
### biz

业务逻辑的组装层,类似 DDD 的 domain 层,data 类似 DDD 的 repo,repo 接口在这里定义,使用依赖倒置的原则。
### service

### service

实现了 api 定义的服务层,类似 DDD 的 application 层,处理 DTO 到 biz 领域实体的转换(DTO -> DO),同时协同各类 biz 交互,但是不应处理复杂逻辑。

### server
### server

为http和grpc实例的创建和配置,以及注册对应的 service 。

Expand All @@ -192,11 +198,11 @@ internal 是为了避免有同业务下有人跨目录引用了内部的 data、

### ~~model/~~

在其他语言开发中一个非常通用的模块叫 model,把所有类型都放在 model 里。但是在 go 里不建议的,因为 go 的包设计是根据功能职责划分的。比如一个 User 模型,应该声明在他被用的功能模块里。
在其他语言开发中一个非常通用的模块叫 model,把所有类型都放在 model 里。但是在 go 里不建议的,因为 go 的包设计是根据功能职责划分的。比如一个 User 模型,应该声明在他被用的功能模块里。

### ~~xxs/~~

带复数的目录或包。虽然 go 源码中有 strings 包,但更多都是用单数形式。
带复数的目录或包。虽然 go 源码中有 strings 包,但更多都是用单数形式。

## 总结

Expand Down
Loading

0 comments on commit d073145

Please sign in to comment.