2011-08-17 11 views
2

これを解決する最良の方法は何ですか?円の依存関係のベストプラクティス

は私がプロジェクト以下のプロジェクトがあります。

モデルを

ロジック(参照モデル)

同期(参照モデルとロジックの両方)

ウェブ(参考文献すべてのプロジェクト)

すべて正常に実行され、Webプロジェクトはモデルとロジックを使用する同期プロジェクトを起動し、その作業を行います。 しかし、現在、ロジックプロジェクトは同期プロジェクトでメソッドを呼び出す必要がありますが、循環参照が許可されていないため、この参照を追加できません。

このすべての機能を動作させる最も簡単な方法は何ですか?

同期プロジェクトでもう少しです。 同期はそれ自身で動作します。これは、アプリケーション内のデータベースに外部データベースからデータを持ち込むプロセスを実行します。これは、モデルに基づいてオブジェクトを作成し、ロジックを使用してオブジェクトを保存することによって行います。 これはうまく動作し、同じことをすることができますが、完全に異なるタイプのデータベースを対象とする別の同期プロジェクト/アセンブリを簡単に作成することができます。

問題は、時々、sychronizationプロジェクトのメソッドを呼び出して、ある方向のデータを外部データベースに更新したいということです。

+0

同期は何をしていますか? – sll

+0

私は論理のいくつかの説明で私の質問を更新しました。 – Tys

答えて

3

リファクタリングするときのように聞こえます。最も簡単なのは、SynchronizationとLogicの両方に置かれている部分を5番目のプロジェクトに分割し、その両方を参照することです。しかし、最も簡単なことのように、これは最初にコードをどのように割り当てたかを再考する必要があるという兆候でもあります。 LogicがSynchronizationに必要とするコードは、最初はLogicに属しているかもしれません。

+0

私は自分の質問を更新し、同期が何をしているかを少し説明しました。要点は、sync.projectを残りのものから分離した状態にしたいということです。このプロジェクトは、外部データベースと通信します。そのプロジェクトにすべてを残しておけば、別のタイプのデータベース/ Webサービスでも同様のプロジェクトを簡単に作成できます。 – Tys

+0

次に、同期でLogicを参照する必要がある理由について質問します。シンクロナイゼーションをダンバーにすることでメリットが得られます。 SynchronizationがLogicにアクセスする場所を調べ、それらの部分が他の場所でうまく適合しないかどうかを評価します。同期する必要があるのは、外部データとそれをローカルモデルに収める方法だけです。 –

+0

こんにちは、ジェイコブ、それは多くの仕事が必要ですが、私は全体のことを馬鹿にする考えが好きです。だから私はこのルートに行くよ。ありがとう! – Tys

0

次のいずれかの

  1. 何か間違っていると、あなたは間違った依存関係/参照
  2. に共通のようななめらか(あなたはすでに私は賭けます4つのかなりハイレベルのプロジェクトを持っていると仮定すると呼ばれる新しいプロジェクトを紹介する時間をリファクタリングする必要があります#1 - Synchronizaitonは、同じ時間に、論理と論理参照の同期を参照する理由を理解しよう)
0

は、新プロジェクト「NewProject」を作成し、そのメソッド「またはそれを保持しているクラス」ということにを置きますa次にSynchronizationLogicへの参照として追加します。

0

LogicがLogicプロジェクトに必要とするメソッドを移動してみませんか? Logicを参照しているため、同期はLogicのメソッドを呼び出すことができます。

もちろん、私はこのメソッドが必要とする同期に他のコードがたくさんあるとは思っていません。もしあれば、たぶん5番目のプロジェクト、おそらく "ユーティリティ"や "共通"のようなものに呼ばれます。

シンクロナイゼーションとロジックには同じような方法が必要ですが、全く同じではない可能性があります。その場合、それぞれのプロジェクトに1つずつ2つのメソッドを作成します。