0

私は医師用のジャーナル システムを作成しています。このシステムでは、医師が入って患者を観察し、患者の X 線とその X 線に属する画像も見ることができます。

  • 複数の患者が存在する場合があります。
  • 患者ごとに複数の X 線が存在する場合があります。
  • Xray ごとに複数の XrayImage が存在する場合があります。

クラスのレイアウトは次のとおりです。

ここに画像の説明を入力

http://i44.tinypic.com/w9w37d.png

私が抱えている問題は、Patient.XrayやPatient.Xray.XrayImageではなく、常にPatientに情報を求めているように見えることです。これは正しいです?

例えば:

患者には、データベースからデータを取得し、患者のすべてのフィールドを設定する getPatient メソッドがあります。

次に、たとえば、データベースにこの患者に属する 3 つの X 線があり、Patient.Xray の 3 つのインスタンスを作成したいので、Patient に getXrayIDs というメソッドを作成します。これにより、その患者に属するすべての XrayID が取得され、ID が患者のリストに保存されます。これらの ID は UI のドロップダウン ボックスに表示されます。ドロップダウン ボックスで ID を変更すると、Patient.getXray(int XrayID) という別のメソッドが呼び出され、これにより Xray の新しいインスタンスが作成され、情報が UI に表示されます。

XrayImages は、Xray に getXrayImageIDs というメソッドがあることを除いて、ほとんど同じように機能します。

問題は、クラス オブジェクト (Patient、Xray、XrayImage) に対して作業したいのですが、同時にデータベースから必要以上のデータを取得したくないので、これは良いアプローチですか?

適切な OOP でプログラミングしていないように感じます。データベースから取得するデータの量を無視し、適切な OOP でプログラミングし、後でデータベースのパフォーマンスを修正する必要があります。

したがって、代わりに次のようにプログラムする必要があります。

 Patient patient = new Patient()
 patient.getXrays() // This one should create a new Xray instance
                 // and Patient should have references to these instances.
 patient.xray[i].getXrayImages // This one should create a new XrayImage 
        //instance and Xray should have references to these instances.

別の考え: ドロップダウン ボックスの値が変更されている場合 (この場合のように)、データベースからではなく、Xray および XrayImage クラスからデータを取得する必要があります。データベースから Xray および XrayImage クラスにデータを 1 回ロードしようとするだけで、ユーザーは情報を取得し、XrayID が変更されるたびに情報を取得するのではなく、オブジェクトに対して作業する必要がありますか?

4

1 に答える 1

2

あなたが話している問題は、ロード戦略に関するものです。基本的に、ここでは遅延読み込みと熱心な読み込みを区別する必要があります (これらの戦略の名前はソースによって異なる場合があります)。遅延読み込みは、名前が示すように、実際に使用されるときにのみデータベースから値を読み込みます。反対に、熱心な読み込みでは、データベースからルート オブジェクトが要求されるとすぐに、データベースからできるだけ多くのデータまたは必要になる可能性があるデータが読み込まれます。

これは、オブジェクト指向の設計や継承とは関係ありません。オブジェクトを 1 つの方法で設計し、それらを変更せずに、いずれかの読み込み方法を使用できます。

どの読み込み戦略を選択するかは、アプリケーションと通常直面するユースケースによって異なります。それらの中で一般的に正しいまたはより良いものはありません。

たとえば、熱心な読み込みでは、通常、ユーザーは新しいページの読み込みの開始時に長く待機しますが、このページで何かをクリックすると、すぐに応答があります。遅延読み込みの場合は逆です。これにより、最初のページの読み込みは高速ですが、ページを使用している間のすべての小さなリロードに対して、新しいデータベース アクセスを実行する必要があるため、ユーザーには常にわずかな待ち時間が生じます。ページでの彼のアクションごとに。開発者として、どちらのアプローチがユーザーにとってより便利であるかを判断する必要があります。また、両方のアプローチを試して、ユーザーにアプリケーションをテストしてもらい、どちらのアプリケーションがより快適に感じたかについてフィードバックを提供することもできます。

場合によっては、制約によっていずれかの戦略が必要になることがあります。たとえば、データベース内のオブジェクトの大規模な階層を扱っている場合、熱心な読み込み戦略により、読み込み時間が非常に長くなる可能性があります。実際のアプリケーションでは、読み込み時間が 1 分を超えることがありました。また、取得したすべての情報が必要になることはほとんどありません。このような場合は、遅延読み込みを使用する必要があります。

于 2013-08-14T22:59:54.037 に答える