私は3つの層で構成された比較的単純なWebアプリケーションを書いています。
- フロントエンド:非常に薄いコントローラー
- ビジネスロジック:ドメイン固有のサービス
- ストレージ:シンリポジトリクラス
上で示唆したように、ビジネスロジックのほとんどはサービス層2にあります。
これらのクラスを作成していると、READメソッドの扱いがWRITEメソッドとは大きく異なることに気付きます。
ServiceクラスのREADメソッド
たとえば、READメソッドには過度に厳密な引数チェックはありません。多くの場合、単純な読み取りの場合、Serviceメソッドは、ほぼ1行でRepositoryメソッドを実装しているだけです。
ServiceクラスのWRITEメソッド
ただし、WRITEメソッドを使用すると、引数のチェックとビジネスロジックの実装が大幅に増えます。実際、私のサービスクラスでは、WRITEメソッドでのみ実際に使用されるRulesクラスに依存しています。READSにもビズロジックがありますが、ロジックはWRITESに対してより厳密です。
READSとWRITESを分離する可能性があるための他の引数
また、サービスクラスを実装してクラス内のメソッドを探すときも、最初にREADとWRITEのどちらを使用するかを考えてから、メソッドを探します。
また、クラスでメソッドを探すとき、READSとWRITESを、「Create」、「Update」、「Get」、「Retrieve」などで始まる任意のメソッド名で区切るのは面倒なようです。
考えられる問題と、分離するのは良い考えですか?
試してテストしたパターンを探していると思います。自分で実装してみることができますが、設計が複雑になりすぎたり、循環参照やロジックの繰り返しなどの問題が発生する可能性があるとすでに感じています。READクラスはWRITEクラスに依存する場合があり、その逆の場合もあります。