0

現在、Android アプリケーションを開発しています。データベースにアクセスする必要があるため、dao パターンを使用することにしました。現在、私はこのパターンの概念を理解しています。

私のアプリには、ビジネス オブジェクトがあります。たとえば、注文と支払いオブジェクトを考えてみましょう。オーダーが支払いタイプの変数であると仮定しましょう。データベースでは、注文テーブルの各レコードは支払いテーブルの外部キーを持ち、注文と支払いの間の関連付けを保持します。問題は、dao は互いに完全に独立していなければならないため、OrderDao は PaymentDao を「認識」しないため、対応する支払いインスタンスを含む注文オブジェクトをインスタンス化するにはどうすればよいですか? これは私を本当に混乱させています... OrderDao は注文インスタンスを返すことができません。なぜなら、このインスタンスには支払いインスタンスが必要だからです.その ID のみ、および後でビジネス ロジックで、

これはどのように行うべきですか?

クラス構造についての説明を簡単にするために:

public class Order {
     private int id;
     private Payment payment;
     ......
}
public class Payment {
    private int id;
     ....
}

私がフレームワークを使用していない理由は、私のデータベースでは、翻訳されたいくつかの文字列を保持するテーブルが必要だからです..カテゴリ テーブルには、一部の言語で対応する翻訳があります。

前もって感謝します。

4

2 に答える 2

3

DAO がオブジェクト グラフを返すことに問題はありません。私はORMにHibernateを使用しています。例を挙げると、Paymentオブジェクト(findById、persistなど)を処理するためのメソッドを持つPaymentDaoと、Orderオブジェクトを処理するためのOrderDaoがあります。

ただし、OrderDao から Order オブジェクトを取得すると、関連する PaymentObject への参照が引き続き含まれます (Hibernate を使用してこれらのサブオブジェクトを遅延ロードできるため、巨大なオブジェクト グラフを返す際のパフォーマンス オーバーヘッドについて心配する必要はありません。ここで役立つように、選択した永続化フレームワークを調査する必要があります)。

HTH

PS 休止状態で Company 参照を持つ Order エンティティの例:

   @Entity
    @Table(name = "ORDERS")
    @SequenceGenerator(allocationSize = 1, name = "orderId", sequenceName = "ORDERID")
    public class Order extends OptimisticLockingNumericIdDto<Order> implements Serializable {

        private Long id;
        private Company managingCompany;

...

       @ManyToOne(targetEntity = Company.class)
        @JoinColumn(name = "COMPANYID")
        public Company getManagingCompany() {
            return managingCompany;
        }

        public void setManagingCompany(Company managingCompany) {
            this.managingCompany = managingCompany;
        }
}
于 2012-08-30T09:20:18.133 に答える
1

データベースでクラス関係を間違ってモデル化していると思います。要件に従って、注文クラスには支払いクラスのインスタンスがあるため、データベースにマップすると、外部キーとして注文IDを持つ支払いになるはずです。

このようにマッピングしたら。最初に OrderDAO から注文を取得し、次に getPaymentByOrderID メソッドを使用して PaymentDAO から支払いを取得できます。このようにして、DAO は独立し、目的の機能を実現できます。

于 2012-08-30T11:32:41.970 に答える