Skip to content

golang の標準パッケージを用いた Clean Archtecture + 軽量 DDD のサンプル

Notifications You must be signed in to change notification settings

kotaroyamazaki/go-clean-arch-with-standard-libs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-clean-arch-with-standard-libs

Golang の標準パッケージを用いた Clean Archtecture + 軽量 DDD のサンプル

要件

# 想定機能
- 書籍購入サービスにおけるプロフィール登録機能
- プロフィールの項目は以下
  - ニックネーム
  - 生年月日
  - 興味のある本

## 内容
- プロフィールを登録する API の実装
- プロフィールを保持するための RDB のスキーマ設計
  - 設計範囲は以下
    - テーブル名
    - カラム名
    - データ型
    - primary key
    - index

DB のスキーマ設計

users, books, user_favorite_books テーブルを設計。

API

  • /internal 以下に実装。REST とクリーンアーキテクチャを用いて構成しました。

POST /users でニックネーム、生年月日、興味のある本の ID を受け取りユーザーの DB への挿入を行います。 興味のある本はすでに DB に本の情報があると仮定して、ID のみを受け取り、user_favorite_booksテーブル へ挿入することを想定しています。

参考:https://github.com/kotaroyamazaki/go-clean-arch-sample-with-standardissues/1

値オブジェクト、エンティティ

/internal/entites 以下にエンティティと値オブジェクトを実装。 エンティティ(entity) と 値オブジェクト(VO)は同一パッケージに入れています。 ディレクトリ名と同じファイルがエンティティ、そうでない場合は VO としています。 Golang の特性上コードによる制約は厳密に行っていません。運用ルールによる運用を想定しています。 (例えば 「user entity のみが持つはずの nickename 型が単体で生成ができてしまう。」、「entites.User{}ができてしまう。」など。)

概要

項目 説明
Golang バージョン 1.18
データベース 未定義。RDB のものを想定してインメモリで実装。
API REST
アーキテクチャ Clean Architecture
ディレクトリ構成参考 Standard Go Project Layout,
テスト gotestsのフォーマットに沿ったテーブルドリブンテスト

動作確認

API

curl -X "POST" "http://localhost:8080/users" \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -d $'{
        "nickname":"takashi",
        "birth_date":"1990-01-01T00:00:00.000+09:00",
        "favorite_book_ids":[1,3,4]
    }'

{"status": "created"} が返ってくれば OK

test

go test ./...

アーキテクチャ

Clean Architecture を元に設計しました。

entity層usecase層handler層infrastructure層 にわけました。

itnernal/
├── entities
│   ├── book
│   ├── repository
│   └── user
├── handlers
├── infra
│   ├── db
│   └── repository
├── middleware
└── usecases

arch

About

golang の標準パッケージを用いた Clean Archtecture + 軽量 DDD のサンプル

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages