4

Java で GAE Web アプリケーションを書き始めたばかりなので、このようなことはまったく初めてです。データの保存にはJDOを使用しています。私は多くのオンライン資料 (フォーラム、チュートリアルなど) を読んでおり、どこでもDAOを目にしますが、それが何であるかを本当に理解していません。はい、Data Access Object、テクニック... しかし、誰かが変数に名前を付けると、userDAOその変数には何が含まれるでしょうか?

次のコードを考えてみましょう (GAE のドキュメントから):

PersistenceManager pm = PMF.get().getPersistenceManager();

Employee e = new Employee("Alfred", "Smith", new Date());

try {
    pm.makePersistent(e);
} finally {
    pm.close();
} 

それは本当に単純で、私には理にかなっています...しかし、この例では、DAOを何と呼びますか?

ばかげた質問かもしれませんが、とても参考になります。

4

1 に答える 1

7

「DAO」はデータ アクセス オブジェクトの略です。これは、特定のモデル エンティティを、より直感的なアクセサーを提供するクラスでラップすることにより、モデル ロジックをカプセル化する方法です。

あなたが提供する例については確信が持てませんが、推測してみたいと思います。PersistanceManager は、アプリケーションのデータ永続化レイヤーを管理するオブジェクトのようです。あなたのオブジェクトはおそらくこのインスタンスEmployeeを介して永続的に保存され、作成したオブジェクトはおそらくDAOであり、従業員の状態を直接管理するよりも簡単なインターフェイスを提供します。PersistanceManagerEmployeePersistanceManager

App Engine では、データストアの大きなパフォーマンス制約の 1 つは、プロトコル バッファの逆シリアル化です。モデル エンティティに複雑なメソッドを追加すると、オブジェクトのサイズが大きくなり、オブジェクトを逆シリアル化する必要があるときにパフォーマンス ヒットが発生します。ここでのポイントは、基本プロパティ以外はデータストア エンティティ仕様に追加したくないということです。ヘルパー メソッドを追加すると、パフォーマンス ヒットが発生します。

したがって、App Engine の一般的なパターンは、DAO を使用してモデル エンティティを、シリアル化のパフォーマンスに影響を与えずにこの高レベルのロジックを提供できるクラスでラップすることです。

于 2012-06-19T19:32:09.460 に答える