まず、私の英語が下手でごめんなさい:D 最近、ソフトウェア工学の試験のためにデザインパターンをより深く勉強していて、この試験のプロジェクトとしてソフトウェアシステムを設計しなければなりません。
私が処理できない問題があります: エンティティ クラス (アプリケーション ドメインのデータを表す) を他のすべてから切り離す方法です!
つまり、より具体的に言えば、Patient クラス (独自のプライベート属性と public getter および setter メソッドを持つ) がある場合、これはエンティティ クラスであり、これまでのところ正しく理解できたと思います:D
では、MVC パターン アーキテクチャを使用してプログラムを設計することを選択したとしましょう。Patient クラスはモデルに含まれますが、それは正しいですか?
さて、そのクラスを扱うすべてのビューは、それへの参照を持ちます: 3 つのビューがあるとしましょう: すべての患者を表示する最初のビュー、患者を変更する別のビュー、新しい患者を登録する最後のビュー (実際にはレポートを提出するクラスは他にもありますが、今は関係ないと思います)。
これらのクラスのそれぞれは、そのデータを表示するために患者の構造を認識します。たとえば、ゲッター メソッドを呼び出して何らかの方法でデータを表示します。
ビューは意味的にデータ (=モデル) に関連付けられているため、これを回避する方法はないと思います。つまり、データが文字列、日付、または整数であるかどうかを認識しなければならないということです。そのセマンティクス (現実の世界で何を表しているか) も知っている必要があります。そのため、Patient クラスへの参照を削除するだけではあまり意味がないと思います。
ここで問題の核心は次のとおりです: クラス Patient の変更が、それを使用するすべてのクラス (ビューだけでなく) に伝播するのを防ぐにはどうすればよいでしょうか?
つまり、要件の変更により、属性 String Cellular が String[] Cellular で変更されたとしましょう。変更する必要があります: 1) DB / DB インターフェイス 2) 患者クラス 3) (最悪) 患者を使用するすべてのクラス!!
これを回避する方法は?良いプロジェクトでは、単一のクラスの変更が、そのクラスを使用するすべてのモジュールへの一連の変更に反映されるべきではないと思いますが、私は初心者であり、これを防ぐ方法が思いつきません。
要件の変更はインターフェースの変更に反映されるため、エンティティークラスに安定したインターフェースを使用する良い方法を考えることさえできません (インターフェースが変更されることを意図しているとは思いません!)。
助けてください!!