1

設計上の質問があります。サードパーティのサービスを利用するポータルを構築しています。

このサービスを DLL に入れました。1 つの DLL クラスを初期化するときに、1 つのサービスのサービス アドレスを渡します (残りのサービスにも同様に - 一部のサービスは異なるアドレスで)。

 public LogonService (string address)
        {
            EndpointAddress epA = new EndpointAddress ( address );
            proxyClient = new LogonServicePortTypeClient ( "LogonServicePort" , epA);
            //added this InspectorBehavior for logging and errrors
            proxyClient.Endpoint.EndpointBehaviors.Add ( new InspectorBehavior () );

        }

これは私のコンストラクタです。次に、たとえば、すべての LogonService 機能が公開されています (login、logout、refresh など - 繰り返しますが、これは 1 つのサービスの 1 つの例です。それらはほとんどありません)。

この DLL は、MVC 4 インターネット アプリケーションによって使用されます。DLL クラスごとにクラスを保持する BusinessLogic フォルダーを追加することを考えました。これにより、示されているようにサービスが開始され、コントローラーが理解できる方法で結果がコントローラーに伝達されます。(これは私のデザインのアイデアです)

(再び IF) この設計が適切である場合、これらの DLL クラスを初期化し、再利用するために保存するなどのベスト プラクティスがどこでどのように行われるかを知りたいと思います。

私の長い質問を要約すると:
1. これは有効な設計ですか?
2. アプリケーション ライフのどこでこれらの Dll クラスを初期化する必要がありますか?
3. これらのサービス インスタンスをどのように保存しますか (パフォーマンスの点で) ?
4. 最後に、この設計が論理的でない場合、推奨される設計は何になりますか?

ありがとうギラド

4

2 に答える 2

2

最初にお勧めするのは、Castle や Unity などの DI フレームワークを使用することです。これにより、クラスの初期化に関する多くの頭痛の種が取り除かれ、クラスがよりテストしやすくなります。

また、エンドポイント構成を xml に外部化します (system.serviceModel セクションの下)。流暢なエンドポイント構成はかなり気を散らすものだと思います。

于 2013-04-29T09:21:26.203 に答える
0

私は数か月前にまったく同じ質問に出くわしましたが、残念ながら私はそれに対処する時間を費やすことができませんでした. あなたのデザインが良いと私が知る限り、それは私が採用したものでもあります.

私はあなたの3)の質問についてもっと心配しています。各 WS 呼び出しに対してサービス インスタンスを作成することになりました (Web アプリを使用していたのはごく少数のユーザーであり、実際にはあまり使用していなかったので、パフォーマンスについてはあまり気にしませんでした)。しかし、私はその点について誰かの意見に非常に興味があります.

私もaquaragaさんのコメントに同感です。構成ファイルをできる限り使用する必要があります。開発者が構成の一部をアプリケーションにハードコーディングしたとき、私は多くの問題に遭遇しました。

于 2013-04-29T09:45:15.933 に答える