2011-09-14 10 views
-2

Webアプリケーションは、しばしば階層化されるように設計されています。通常、リポジトリ(Dao)レイヤ、サービスレイヤ、およびコントロール(Webハンドリング)レイヤが存在します。コントロールレイヤーは、サービスレイヤーを使用します。サービスレイヤーは、リポジトリレイヤーを使用します。リポジトリレイヤを直接使用してControlレイヤが表示されることがよくあります。Webアプリケーションのデザインのレイヤリング規則とベストプラクティス

また、他のサービスを使用するサービスも非常に一般的です。 多くの場合、すべてのサービスは、すべてのリポジトリコンポーネントへのすべての参照を含む基本サービスクラスから継承します。

私の質問は本当にどのように、なぜあなたのサーバーサイドアプリケーション(レイヤーの面で)を設計し、どのようなルールを適用するのですか?

これらのレイヤーおよびこれらのルールには、一般に認められている正当な理由は何ですか?

「悪い練習」とみなされるべきルールはありますか?

重要なルールは何ですか?

あなたはこの分野で新しいことを試しましたか?

たとえば、私が検討してきたことは、サービスを「プライマリ」または「セカンダリ」として分類することです。ここでのルールは、 プライマリサービスはセカンダリサービスを使用できません。これは私が混乱のいくつかを軽減することを望むでしょう 他のサービスを使用する他のサービスを使用して多数のサービスがあるところ。まだ仕事/思考が進行中です。

+0

に直接コントローラ層の話を持つサービス

  • 間の循環依存関係を持つ
  • 。それはdownvoteを説明するかもしれない。 –

  • +0

    あなたの質問はあまりにも曖昧で一般的です。ここでは特定の質問にのみ回答することができます。 – Shlublu

    +0

    はい、おそらく正しいでしょうが、実際には、人々がデザインのこの分野に適用/適用した単純なルールの後にありました。与えられた答えのカップルがこれを提供します。私はその質問でより具体的にすべきだった。 –

    答えて

    0

    私が記述した3つのレイヤーを使用していますが、私のサービスの基本クラスはなく、自分のサービスのフィールドとして実際に使用している他のサービスとリポジトリだけを宣言します。明らかに。階層化のため

    正当化:サブサービスは、時々新しいトランザクションを開始する、または単に再利用することができるように必要とされるサービス層

  • で責任
  • トランザクション境界の

    • 分離いくつかのサービス内のビジネスロジック
    • テスト容易性:コントローラが定義されたサービスのみに依存するかどうかをテストする方が簡単です。ビジネスロジックのみを含み、永続ロジックを含まない場合、サービスをテストする方が簡単です。リポジトリのすべてが永続性(DBクエリ)であれば、リポジトリをテストする方が簡単です。
    • アクセス権のチェック、パフォーマンスの測定などのために、すべてのサービスまたはすべてのリポジトリにインターセプタ(AOPを使用)を追加できます。

    バッドプラクティス:

    • すべてのリポジトリに応じたサービスを持ちます。
    • サービスが多すぎるリポジトリ/サービスに依存します。この質問は、SOのQ /フォーマットにうまく収まらないほど幅広い可能性がある永続層
  • 0

    すべてはアプリケーションの複雑さに依存します。非常に単純なアプリケーションは、コントロール、サービス、およびDAOレイヤーを持つことができます。より複雑なアプリケーションは、あなたが言ったように、複数のサービスレイヤーを持っていて、リモートで通信することができます。

    しかし、はい、IMOのDAO層はベンダー固有のAPIを公開すべきではありません。ユーザーは、その下に使用されている技術に透明でなければなりません。 Hibernate/EJBsなど

    関連する問題