🦍

「GO」ドメインモデルの参照を強固にする

2021/12/10に公開

パーソンリンク アドベントカレンダー12日目です!🎉
今回は最近学んだことを記載してみました。

ドメインモデル

クリーンアーキテクチャの中で一番最奥に位置する重要なモデルとなります。
ここでは課題解決をしたいことを定義するものになります。

外部パッケージが値を参照する方法

golangでは定義したデータ型の先頭を大文字にすることで外部パッケージで参照することができるようになります。
publicな値になるということです。

type kappa struct{
    kyuuri   string   そのパッケージ内でしか呼び出せない
    Green    string    外部パッケージでも呼び出せる
}

外部から参照できる弊害

ドメインモデルが意図しない状況で変更されてしまう恐れがある。
外部から参照できる状態ですと値の書き換えが容易であるため、気軽に変更できてしまいます。

値の参照を強固にしてみる

type kappa struct{
    kyuuri   string  
    green    string 
}

全部小文字にすることで内部のパッケージでしか参照ができない形に変更します。
ただこれだと外部から何も触れなくなってしまうので、コンストラクタとアクセサを用意します。

コンストラクタ

func NewKappa (_kyuuri string, green string) kappa ←返り値{
    return kappa{
        kyuuri:  _kyuuri
        green:  _green
    }
}

上で定義したデータ型の初期化を行なっています。
この関数を用いて値の初期化をしていきます。
新たに値を入れたい時もこれを使用して作成していきます。

アクセサ

func (k kappa) Kyuuri () string {
    return k.kyuuri
}

func (k kappa)  Green () string {
    return k. green
}

こちらは値を参照をするために使用するメソッドです。

for example

上の関数を元にサンプルコードを書いてみたいと思います。

kappa := model.NewKappa("yasai", "color")
kyuuri := kappa.Kyuuri()
green  := kappa.Green()

* :=は変数定義をするときに使用します
    modelはパッケージ名です。

上の変数をログに出すと

kappa

 kappa{
 kyuuri: "yasa"i,
green:  "color",
}

kyuuri

"yasai"

green

"color"

となります。

まとめ

大文字以外で参照する方法と意図しない書き換えを防ぐ方法をしれて、さらに視野が広がったのとまだまだ知らないことがたくさんあるなと認識しました。
ではドロン!!

Discussion