C# 設計メモ

順不同。思いつたら更新。

・クラスの単位

基本は変更が発生しそうな単位をクラスにする。

ただし、ドメインオブジェクトに限定した場合、関心の単位、利用者が概念として、それを表現する言葉が存在している単位とする。ビジネスロジックをクラスで作っていくということ。

・ドメイン駆動

2つのサービス。ユースケース管理として、アプリケーションサービスがあり、ドメインオブジェクトのふるまいとして不自然な部分を受け持つのが、ドメインサービス。

・クラス、インターフェース、メソッド

作ると使うを分ける。参照と変更を分ける。意味のある名前にする。スコープが大きいのに一文字変数名や、ハードコーディングしている数値など避ける。

・レイヤー

適切にクラス分けしていけば最終的に自然とレイヤーに当てはまる形になっているのでそれほど意識しない。

・依存関係のコントロール

クラス間の依存をインターフェースへの依存にすること。派生クラスの追加で対応する。拡張ポイントと呼ぶ場合もある。

 

・DB系

DBの依存関係。FKがある方が依存している。依存している方が子。PKは重複できないけど、FKは重複できるので、FKある方が多。

複合主キーとなっている関係従属を取り除く正規化は当たり前に発生するので、正しいモデリングをすると必然的に複合主キーが現れる。サロゲートキーを入れる場合、制約はアプリ側で対応する。例えば仕入価格を、仕入先・商品・開始年月で識別するような場合。

参照整合性。実務では完全な制約が必要ではなく、緩い制約の方が都合がいいときもある。ただし、構造が壊れやすくはなるので注意。