2

特定のドメインの問題を銀行口座に抽象化しようとしています。次の状況を想定しています。

  • 特定の顧客の銀行ログインがあります。
  • 各顧客は、同じログインに属する複数の銀行口座を持つことができます。
  • 各銀行口座には、何千ものトランザクションがあります。

クラス構造を次のように設計しました(簡略化):

public class Login
{
    private List<Account> _bankingAccounts;
    ....more fields, ctor, getters, setters...
}

public class Account
{
   private List<Transaction> _transactions;
    ....more fields, ctor, getters, setters...
}

public class Transaction
{
   String _comment;
    ....more fields, ctor, getters, setters...
}

でも、たとえば20アカウントで、それぞれに10000のトランザクションがあり、データベースからモデル全体をロードすると、顧客がこれらすべてのトランザクションを必要としているかどうかはわかりませんが、大量のメモリが必要になります。

私はこのようなより単純化されたモデルを構築しようと思いました:

public class Login
{
    private List<SimpleAccount> _bankingAccounts;
    ....more fields, ctor, getters, setters...
}

public class SimpleAccount
{
    ....more fields, ctor, getters, setters...
}

public class Account
{
   private List<Transaction> _transactions;
    ....more fields, ctor, getters, setters...
}

public class Transaction
{
   String _comment;
    ....more fields, ctor, getters, setters...
}

次に、簡略化されたアカウント(すべてのトランザクションが含まれていない)を使用してアカウントモデルをロードし、ユーザーが特定のアカウントのトランザクションを表示するように要求した場合にのみ、この単一のアカウントオブジェクト全体をロードします。

その方法は大丈夫でしょうか?より良いアプローチはありますか?

4

4 に答える 4

6

あなたの質問から、あなたの基本的な必要性はORMであることがわかりました。なぜなら (私が間違っていなければ)
ドメイン モデル マッピングの 2 つのことを望んでいるからです。特定の学生データを表示したいが、学生のすべてのコース (コレクションである可能性があります) を自動的にロードしたくない (学生とコースに関係がある場合) 彼/彼女のコースを見たくない場合を除きます。 . したがって、問題に対しては、両方のソリューションを提供するORMを使用する必要があります:) .Netが提供するORMのリストを 次に示します




于 2012-07-30T08:01:42.283 に答える
2

ドメインモデルを構築するときは、パフォーマンスへの影響について考えるべきではありません。ドメイン モデルはドメインそのものであり、必ずしも実装するものではないからです。

さらに、適切な ORM フレームワーク (たとえば、 ) を使用すると、オブジェクト グラフ全体ではなく、必要なデータのみを DB からロードできます。

于 2012-07-30T07:47:46.047 に答える
1

Serg が言ったように、パフォーマンスの考えは実装に属し、ドメイン モデルに属している必要はありません。

アカウント全体の読み込みを避けたい場合は、次のような遅延読み込みを実装する必要があります。

public class Account
{
   private List<Transaction> _transactions;

   public List<Transaction> getTransactions() {
        if(_transactions == null) {
             loadTransactions();
        }
        return _transactions;
   }
}
于 2012-07-30T08:01:02.503 に答える