2016-09-14 11 views
0

こんにちは、私はこのフォーラムに初めて参加しました。私はいくつかの助けを求めています。 私はWPFアプリケーションを開発しています。基本的には、ユーザーはファイルシステムからファイルを選んで、pythonサーバーへの完全なパスと、実装しなければならない他の種類の通信を送信できます。WPFクライアント/サーバーアプリケーションの依存関係の回避方法を教えてください。

私は自分のWPFアプリケーションを3つに分割しました。 WPF GUI自体、クライアントとサーバー間の通信を処理するコントローラのセット、GUIとコントローラ間のデータフロー全体を管理する「コントローラアクセスレイヤ」と呼ばれる第3のコンポーネントです。

私は、GUIとコントローラが直接通信するのではなく、中間構造を持つことを望んでいます。Visual Studioには、GUI、クライアント、CAL(Contoller access layer)という3つのプロジェクトがあります。 GUIとクライアントは両方ともCALオブジェクトを必要とするので、CALへの参照を持っていますが、ここからCALアクセスコントローラとGUIを参照する必要があります。

GUIとクライアントに対してCALへの参照を追加しようとすると、依存関係エラーが発生します。私はこの問題とその背後にある悪いデザインについて読んだので、私のdesingが概念的に正しいのか、どうやってこのコンテキストで依存サイクルを避けることができるのだろうかと思っています。

上記のコードはCALクラスです。このクラスにはDictionary of BaseControllerオブジェクトがあります。私はプロジェクト間でCALオブジェクトを共有する方法はわかりませんが、基本的には、他の2つのプロジェクトからアクセス可能な静的CALオブジェクトを設定しています。 私はプロのデザイナーではなく、この分野の新しい人です。私はいくつかアドバイスをしたいと思います。 あなたの助けをありがとう:)

+3

CALにUIレイヤーへの参照が必要なのはなぜですか?この部分は意味をなさない。通常、UIは下の1つのレイヤー(ビジネスレイヤーなど)を参照するだけです。また、CALレイヤーは何をしていますか? ViewModelsが含まれていますか? – Groo

+0

私はこのhttps://msdn.microsoft.com/en-gb/library/hh848246.aspxを読むことをお勧めします。これは、WPFバインディングが正しく動作するための要件であるMVVMをよりよく理解するためのものです。 – MikeT

+0

*私は嫌いですGUIとコントローラは直接通信するが中間構造を持つようにする*しかし、層の間で相互作用するシングルトンの 'CAL.ControlAccessLayer'を使用しているようだが、これは厳密な結合を促進し、テスト/コードの再利用もっと強く。 – Groo

答えて

1

両方のプロジェクトで使用されているコンポーネントを個別のプロジェクト(xyz.common)に移動します。たとえば、CALで実装する必要がある場合は、クライアントレイヤで使用する共通プロジェクトにインターフェイスを定義し、CALプロジェクトでインターフェイスを使用します。

これは私の現在のプロジェクトでクライアントとバックエンドのオブジェクトも共有する方法です。

関連する問題