アルバコン開発日記-Day 03

今、ボブおじさんのクリーニングアーキテクチャを読んで、クリーニングアーキテクチャでコードを書いています.
なぜUSECASEにCQRSモードを導入するのですか?
兼職コンソールの正式な実施
-command/queryディレクトリを分割してCQRSモードに入れ、CQの使用例を含む.goを作成しました

モデルに分離し、そのデータモデルをUsecaseにマージします.
まだ何もしていないので、空の構造体です.

Commandのcompanyを登録するためにHandlerを作成します.commandはdomainに書き込まれたモデルではなくwriteに対応するモデルを作成して使用します.writeモデルを単独で使用する必要はありませんが、フィールドに露出する必要はありません.

write_model.go
package command
type Company struct {
Name string
Address string
JobOpening bool
write専用モデルはドメイン内のモデルと同じでしょう?モデルはまだ簡単なので、隠すことはありません.だから、domainの中のモデルをそのまま導入しました.
以降のデータ作成中に特定する必要のないフィールドがいくつかある場合は、異なります.
register_company.go
package command
import (
"context"
"github.com/memoregoing/albacorn/company/domain/company"
)
type RegisterCompanyHandler struct {
repo company.Repository
}
func NewRegisterCompanyHandler (repo company.Repository) RegisterCompanyHandler {
if repo == nil {
panic("nil repo")
}
return RegisterCompanyHandler{repo: repo}
}
func (h RegisterCompanyHandler) Handle(ctx context.Context, cmd Company) (err error) {
co, err := company.NewCompany(cmd.Name, cmd.Address)
if err != nil {
return err
}
if err := h.repo.AddCompany(ctx, co); err != nil {
return err
}
return nil
}
Reference
この問題について(アルバコン開発日記-Day 03), 我々は、より多くの情報をここで見つけました https://velog.io/@memorego/알바콘-개발일기-Day-03テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol