高橋です。
LinkPointのバックエンドはGoで書いています。328テーブルを扱う中で、CRUD操作の重複コードが課題でした。
課題
テーブルごとにRepository構造体を作ると、ほぼ同じコードが大量に生まれます。
解決策: Generic Repository
Go 1.18で導入されたGenericsを活用し、型パラメータ付きのRepositoryを設計しました。
type GenericRepo[T any] struct {
db *sql.DB
}
func (r *GenericRepo[T]) FindByID(id string) (*T, error) {
// 共通のFindByID処理
}
効果
- Repositoryの重複コードが約90%削減
- 新テーブル追加時の実装工数が大幅に短縮
- テストも共通化できた
※ この記事の情報は執筆時点のものです。