1

私はこのアーキテクチャを行うことを考えています

genericdao + interface ---> servicelayer + interface ---> view layer

私のdaoには一般的なメソッドしかなく、たとえばサービスレイヤーには実際のロジックがあります

サービスレイヤー方式

string executeThis= "select c from com.abc.test.User where username =:username";
Map tempMap = new HashMap();
tempMap.put("username","abc");
return callDaoInferface.executeGenericList(executeThis,tempMap);   //get from DI

これは良いアーキテクチャですか

私の質問は、「select..」ステートメントをdaoからサービスレイヤーに移動するのに適しているかどうかです。

4

4 に答える 4

3

インターフェイスの使用は、汎用DAOを使用するかどうかに関係なく、Springとほぼ同じです。ビューの一部としてWeb層が含まれます。

私はあなたのサービスコードに夢中ではありません。永続性インターフェースの要点は、クライアントからSQLを抽象化することですが、SELECTをサービス層にリークさせています。間違っている、私の意見では。

あなたが物事を行う方法について、オブジェクト指向はほとんどまたはまったくありません。

「ジェネリックダオ」とはこういう意味だと思います

私はSpringとHibernateでそれを行いました。一般的なDAOインターフェイスは次のようになりました。

package persistence;

import java.io.Serializable;
import java.util.List;

public interface GenericDao<T, K extends Serializable>
{
    List<T> find();
    T find(K id);
    List<T> find(T example);

    K save(T instance);
    void update(T instance);
    void delete(T instance);
}

したがって、UserモデルオブジェクトとBookモデルオブジェクトがある場合、次のような2つのDAOがある可能性があります。

GenericDao<User, Long> userDao = new GenericDaoImpl<User, Long>(User.class);
GenericDao<Book, String> bookDao = new GenericDaoImpl<Book, String>(Book.class);

GenericDaoImplはあなたのための演習であるか、ソースコードを投稿できるようになるまで待つ必要があります。

于 2010-01-06T01:58:39.870 に答える
3

あなたのアーキテクチャは少しずれています。

daoインターフェースで簡潔なdbインタラクションを抽象化する必要があります。つまり、JPA、Hibernate、Oracle、JDBCなどのさまざまな実装でデータアクセスコントラクトを実装できます。クエリは実装とともに存在する必要があります。 HibernateとJPAに存在することがわかっている名前付きクエリを調べます。クエリは、データベース固有のニュアンス(MySQLの「制限」など)やHQL(Hibernateクエリ言語)とSQLなど、実装に基づいて異なる場合があります。

私の意見では、ほとんどの場合(このような)サービスレイヤーは単にオーバーヘッドです。ユーザー認証のようなサービスが必要になる場合は、サービスレイヤーがビジネスロジックを実行してルックアップを適切に構築する可能性があります。たとえば、パスワードを暗号化/復号化する必要がある場合や、ユーザー名がまだ存在しないこと、パスワード要件の最小要件を満たしていることなどを確認する必要がある場合があります。

Duffyの一般的なDAOの例はほとんど標準であり、そのバリエーションを実装することをお勧めします...例:UserDaoHibernateImpl extends GenericDao<User, Long>

于 2010-01-06T02:45:53.423 に答える
2

そうではありません。'tempMap'は何をしていますか?少し変な感じがします。

于 2010-01-06T01:58:18.827 に答える
0

現在(2016年)、独自のGeneric DAOを構築する代わりに、SpringDataJPAの使用を検討する必要があります。

于 2016-04-23T14:22:31.837 に答える