私はこの方法で作業します(Struts2 + Hibernate):
My Struts Actionsは、Webブラウザーで情報を表示することのみを担当します。考えていない。
ユーザー->アクション->サービス->リポジトリ->データアクセス
または:
見たい->見る方法->すること->入手する方法->入手する場所
したがって、最初のレイヤー(ビュー)には次のようなものがあります。
public String execute () {
try {
CourseService cs = new CourseService();
Course course = cs.getCourse(idCourse);
} catch (NotFoundException e) {
setMessageText("Course not found.");
} catch (Exception e) {
}
return "ok";
}
あなたが見るように、私の「ビュー」は考えていません。サービス(コースの管理用)に特定のコースを要求しています。このサービスは、レポート、説教など、さらに多くのことを実行できます。結果は常にリストまたは特定のオブジェクトです(例のように)。サービスは実マシンであり、ルールを適用し、リポジトリにアクセスします(データを管理するため)。
したがって、サービス、リポジトリ、DAOSを異なるライブラリに配置すると、テキストベースのプログラムや、何も変更しないウィンドウベースのデスクトップシステムでも使用できます。
サービスは何をすべきかを知っていますが、どのように表示するかを知りません。ビューは表示方法を知っていますが、何をすべきかわかりません。サービス/リポジトリと同じ:サービスはデータを送信および要求しますが、データの場所とその取得方法を知りません。リポジトリは生データを「構成」してオブジェクトを作成し、サービスが動作できるようにします。
しかし、リポジトリはデータベースについて何も知りません。データベースの種類(MySQL、PostgreSQLなど)は、DAOに関係します。
データベースを変更したい場合、DAOを変更できますが、上位層に影響を与えてはなりません。データ管理を更新する場合はリポジトリを変更できますが、これはDAOおよび上位レイヤーに影響を与えてはなりません。ロジックを変更する場合は、サービスを変更できますが、これは上下のレイヤーを混乱させてはなりません。
また、ビュー(Web、デスクトップ、テキスト)を含め、ビュー内のあらゆるものを変更できますが、これは、タッチ下の何かを暗示するものではありません。
ビジネスロジックはサービスです。しかし、これと対話する方法は表示することです。今表示するボタン ユーザーはこのリンクを見ることができますか?あなたのシステムはコンソールベースのプログラムだと思います:間違ったユーザー#> myprogram -CourseService -option=getCourse -idCourse=234
がキーを押してこのコマンドを書くことを選択または停止した場合、あなたは否定しなければなりませんか?
Webベースのシステムで話す(Struts + JavaEE)別のGUIコントローラーパッケージがあります。アクションの表示では、ログに記録されたユーザーを提供し、クラスはボタン(または必要なインターフェイス要素)を提供します。
<div id="userDetailSubBox">
<c:forEach var="actionButton" items="${actionButtons}" varStatus="id">
${actionButton.buttonCode}
</c:forEach>
</div>
そして
private List<ActionButton> actionButtons;
これをサービスから遠ざけることを忘れないでください。これはVIEWのものです。Strutsアクションに保管してください。インターフェースの相互作用は、実際のビジネスコードから完全に分離する必要があるため、システムを移植する場合、不要になったものを簡単にカットできます。