2

私はコースの結論作業 (最終卒業作業) を開発しています。Spring MVC と Glassfish Application Server のみで Java を使用しています。MS SQL Server 2008 でストアド プロシージャを使用するため、Hibernate や JPA は使用しません。したがって、JDBC がそれらを呼び出す最も効果的な方法のようです (私の知る限り、オブジェクトを次のように渡すことはできないため)。 SQL Server へのパラメーター)。Glassfish でデータソース プールを構成しました。SQL Server からプロシージャを呼び出すには、DAO が必要であることはわかっています。私の質問は次のとおりです。

1-) DAO メソッドを呼び出すために Service オブジェクト (適切に @Service として注釈が付けられている) が必要ですか (または使用するのがベスト プラクティスですか)? または、コントローラーから直接 DAO メソッドを呼び出すことができますか?

2-) DataSource から接続を取得する最良の方法は何ですか? 各 DAO で getConnection メソッドまたは ds.getConnection() を使用して分離されたクラスですか?

ありがとう

4

2 に答える 2

1

私がサービス層を持つことに傾倒しがちな最大の理由は、次の 2 つの理由からです...

  1. メソッドを @Transactional としてマークして、このメソッド内のすべての DAO リクエストが単一のトランザクションで行われるようにします。

  2. DAO とユーザーの役割からの関心の分離を増やすことができます。特定のユーザー ロールを必要とするメソッドをマークすることができるため、Spring Security との相性が非常に良いです。

コントローラーから DAO を呼び出すことはできますが、後で拡張したい場合はスタックしたままになります。接続を取得するには、サービスを @Transactional としてマークし、DAO を @Repository としてマークすると、Spring がセッション オブジェクトの取得やインジェクションなどをすべて処理します。

私は、サービス層を、Web サービスやコントローラーなどからアクセスされるファサードとして (おそらく間違って) 考える傾向があり、分離を維持します。

于 2013-04-16T13:26:50.897 に答える
0

はい、必ずコントローラーから dao/repository を呼び出してください。そうしないと、大量の不要なクラスの作成が終了します。Spring を使用すると、transacation required newを簡単に作成できるため、トランザクションがまだ存在しない場合は作成されます。

複数のDAO/ビジネス エンティティが 1 つの作業単位/ビジネス ロジックに関与する場合は、サービスを使用します。単純な getter のサービス クラスを作成しても意味がありません。

于 2013-04-16T16:18:46.367 に答える