1

私はStackOverflow guidelinesを読んで、design-specific SE siteを探しました。まだこの質問が長すぎる、または不明であると感じる場合は、私に知らせてください。もう一度お試しください。私のDAOレイヤーはプレゼンテーションレイヤーとどのようにやり取りできますか?

Iは、ビジネスのN階層ラインを維持する、次の層/設計のリサイズアプリケーション:[(具体的にはCAB、 )MVPベースのプレゼンテーション層]

  • [Winフォームアプリケーション]
  • [サービスレイヤー]アプリケーションはと統合
  • [データアクセス層]

例えばDAOインターフェースのERP /ビジネス・システムの特定の実装を使用することによってDAO層で処理される異なるERP /ビジネスシステム、例えば:

public sealed class QBTransactionAssemblyBuildDAO : QBDAO, ITransactionAssemblyBuildDAO 
public sealed class SAPTransactionAssemblyBuildDAO : SAPDABase, ITransactionAssemblyBuildDAO 

、1つのビジネス部門は、QuickBooksのと統合されたアプリケーションを使用することができます。これはapp.configで設定され、ファクトリメソッドは実行時に適切なQB * DAO実装を作成します。同様に、別の部署がSAPと統合して使用することもできます。設定ファイルはこれをサポートし、工場はSAP * DAO実装を生成します。サービスは、基礎となる統合システムを知らずにDAOを使用することができます。

これはすごくうまくいっていて、実際にはデザインはさらに統合されたシステムと記録のサポートを追加しなければならなかったので配当を支払っています。統合されたアプリケーションのAPIが他のすべてのシステムがサポートできるタスクをサポートしていない状況に遭遇したとき、今日はすべて変化しました。私は例外的なフローをサポートする必要がある状況に陥っており、SAPではデータを更新するのではなく、手動で(OK、コピー&ペースト)するためのデータをユーザに提示する必要があります。 SAPアプリケーションのユーザーインターフェイス

私が自分のレイヤーとオブジェクト分離のガイドラインを遵守すれば、私は自分のアプリケーションフローを分岐させる最初の機会がサービスレイヤーにあるのです。このレイヤーはどのERP /ビジネスアプリケーションが統合されているかを知っているからです。サービス層では、 "RecognizeDelayedRevenue"へのリクエストを受け取ることができます。具体的なDAOオブジェクトへの参照を取得し、操作をサポートしているかどうかを尋ねます(後者は新しいものです)。ネガを返す場合は、DAOオブジェクトに属するメソッドを使用して提示するデータを前処理するなど、ダイアログをユーザーに提示するという設計上の課題があります。

私の質問:大きな罪である設計の観点から、:

  1. サービス層は基本的にDAOオブジェクトが受け入れる
  2. ビジネスロジックの独立したプレゼンテーションを壊し、Win32のダイアログを作成して表示するように試みます要求をサポートする(すなわち、要求を主張する)ことができ、それが統合されたシステムに対して実行するのではなく、何らかの形でユーザにダイアログを提示する。
  3. 統合されたシステムの知識を発表者レベルまで引き下げ、例外を処理する。

もちろん、あなたが私が言及していないという考えがあれば、それも非常に興味深いでしょう! :)

答えて

1

私は#3に行きますが、私はrole interfaceを使用して抽象レベルを維持します。それは、追加の機能を使用するかどうかを決定しなければならないとき、私はそのインターフェイスの存在のための私のプレゼンテーション層のクエリを持っているのだ。

if (myImpl is IAdditionalFeatureAware) 
{ 
    // ... 
} 
+0

を私はファウラーのファンだが、ロールインターフェイスは前に私の注意を引いていません。リンクをありがとう。私はあなたの提案を私の3つの参加しているレイヤーに適用する方法に苦労しています:ロールインターフェイスを実装する(またはしない)オブジェクトは、プレゼンテーションレイヤーにとって未知のDAOオブジェクトです。このソリューションにサービス層をどのように関与させますか?私のサービスは、この質問の対象となるタスクを処理することを目的としていますが、ITが役割インターフェイスを検査できるDAOレイヤーを使用しようとするまでではありません。私はそれが理にかなったことを望む。 –

+0

ああ。はい。私はその詳細を逃した。これは、サービスがスタックのネイティブな部分として使用されている間にインターフェースを照会する機能をサポートする可能性があるため、サービスがより複雑になりますが、リモートインターフェースになった場合、またはリモートインターフェースになった場合、その機能をサポートし、応答の一部として回答を取得します。これを一度行うことができ、常に質問するのではなく、答えを保持することができますか? –

関連する問題