問題タブ [circular-dependency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ビュー、プレゼンター、インターフェース間の依存関係
私は古典的な循環依存の問題の前にいますが、私が見つけた解決策(3番目のアセンブリを作成する)は、私のビュープレゼンターパターンではうまくいかないようです。
ビューアセンブリでプレゼンターを参照する必要がありますビューアセンブリで(プレゼンターと同じアセンブリにある)インターフェイスを参照する必要があります
さて、プレゼンター/インターフェイスアセンブリはすべて同じ場所にあるので、ビューで参照します。
そして今、問題が発生します。ビュータイプ(非システムタイプ、カスタムコントロール)のいずれかを使用してインターフェイスのプロパティとアクセサーを定義できるようにするには、プレゼンター/インターフェイスアセンブリでビューを参照する必要があります。循環依存のためにできません。3番目のアセンブリでインターフェイスを移動しても、この新しいアセンブリとビューの間に常にCDがあります(ビューにはインターフェイスが必要であり、インターフェイスには見る)
目標は、プレゼンターからビュー内のコントロールにアクセスできるようにインターフェイスにプロパティとアクセサーを設定することです。そのため、インターフェイスでコントロールタイプを使用するには参照が必要です。
明確にするのは簡単ではないので、遠慮なく私に聞いてください、
みなさん、ありがとうございました。
よろしくお願いします。
c++ - 依存クラスを解決するには?
互いに依存する2つのクラスがあります。私は以前にこの問題を解決しましたが、これを修正する方法を覚えていません。私の簡略化されたコードは次のとおりです。
ms-access - データベース設計における循環参照 - 避けるべきか?
現在、MS Access 2003 を使用してデータベースを開発していますが、循環参照の問題に行き詰まりました。基本的には、次の三角形の関係になります (これは、私の関係表を単純化したものです)。
ここで、Positions、Employees、および Software はテーブルであり、"oo-------...-------oo"
それらの間の多対多の関係を表示します。
つまり、企業内のすべての従業員は特定の役職に割り当てられ (一部の従業員は複数の役職に割り当てられています)、その役職に基づいて特定のソフトウェアを使用する権限を持っています。ただし、例外があり、一部の従業員は、役職に応じて許可されているものに加えて、いくつかの他のソフトウェア パッケージを使用することが許可されています。
問題は、この種のデータベースで循環関係を許可してもよいかということです。非正規化を必要としない回避策はありますか?
よろしくお願いします、VS。
java - Guice からの「注入が完了するまで待ってから、このオブジェクトを使用してください」というエラーが表示される
in(Scopes.SINGLETON)
Guice には 2 つのシングルトン オブジェクト ( で宣言) があり、それぞれがコンストラクターで他方を使用します。これを実装する Guice の方法は、プロキシを使用することです。まず、他のオブジェクトへのプロキシを使用してオブジェクトを初期化し、そのオブジェクトが必要な場合にのみ解決されます。
このコードを複数のスレッドから実行すると、次の例外が発生します。
これは Guice のバグだと思います。私たちは何も特別なことをしていないからです。私たちが見つけた回避策の 1 つは、 を使用してシングルトンを早期に初期化することです.asEagerSingleton()
が、これはテストなどにはあまり便利ではありません。
これは既知の問題ですか? Google Guiceの問題を報告し、スタンドアロン テストで再現します。
他の提案/回避策はありますか?
javascript - 循環依存のあるラージオブジェクトでJSON.stringifyを呼び出すと、「再帰が多すぎます」エラーが発生します
循環参照を含むオブジェクトがあり、そのJSON表現を確認したいと思います。たとえば、このオブジェクトを作成すると、次のようになります。
と電話してみてください
当然のことながら、「再帰が多すぎます」というエラーが表示されます。「子」オブジェクトにはその「親」への参照があり、親にはその子への参照があります。JSON表現は完全に正確である必要はありません。これは、データをサーバーに送信したり、オブジェクトをファイルにシリアル化したりするためではなく、デバッグにのみ使用しているためです。parent
JSON.stringifyに特定のプロパティ(この場合は子オブジェクトのプロパティ)を無視するように指示する方法はありますか?
JSON.stringifyは関数であるすべてのプロパティを無視するため、私が考えることができる最も近い方法は、メンバーだけでなくメソッドを使用することgetChild()
ですgetParent()
が、必要がない場合はそうしません。
c# - 循環クラス参照問題
私はC#アプリケーションを開発しており、EmployeeクラスとOrganizationクラスがあります。
Employeeオブジェクトには、内部メンバーとして組織があり、Organizationオブジェクトには、組織リーダーを示すEmployeeメンバーがあります。
この設定には、無限の循環インスタンス化につながる可能性のある問題がありますか?
編集:
コードを実行してみましたが、問題があるようです。従業員オブジェクトはOrganizationオブジェクトをインスタンス化し、Organizationオブジェクトはemployeeオブジェクトをインスタンス化しようとします。どちらもデータベースに接続して詳細を入力します
これは、SQLサーバーの接続がなくなるまで発生し続けます。私がしていることに代わるものはありますか?
dependency-injection - 別のプロジェクトとしての依存関係の解決..方法は?
asp.net mvc を使用して新しいアプリケーションを作成しています。依存性注入として munq IOC コンテナーを使用しています。問題は、mvc プロジェクトのすべてのコントローラーとインフラストラクチャ プロジェクトのリポジトリ..依存関係解決プロジェクトを mvc アプリの参照として追加する必要があります。これが出発点です...しかし、問題は、この別のアプリにコントローラーを登録するためです。依存関係解決プロジェクト自体の mvc...しかし、循環参照が発生するため、そのようなことはできません..
この問題を解決するにはどうすればよいですか?または、依存関係の解決を管理する最良の方法は何ですか? Global.asax にすべてを登録したくありません。
delphi - Delphi:クラスをユニットから移動する方法;循環参照を避ける
質問:循環参照を避けながら、2つのクラスを独自のファイルに分割したいと思います。
私はいくつかのクラス(およびいくつかの列挙と定数)を持つユニットを持っています。誰もがタペット兄弟のクリックアンドクラックを認識します:
今は明らかに私の2つのクラスTClick
でありTClick
、非常に複雑です。管理しやすくするために、既存の外部コードを壊さずに、独自のユニットに分割TClick
して分割したいと思います。TClack
それで私の最初の亀裂は次のようになります:
完璧です、私はで利用可能なすべての同じクラスを持っていますCartalk.pas
、今私はただ書く必要がCartalk_Click.pas
ありCartalk_Clack.pas
ます:
もちろん、問題はそれでTTappetBrother
ありTSolution
、このユニットでは宣言されていません。そこで、彼らが住んでいる場所への参照を追加し、uses
それが失敗するのを見て、私の質問の中心に到達します:
との間に循環参照がCartalk
ありCartalk_Click
ます。
注:もちろん、私はCartalkユニットを持っていません。クリックして、タッパー兄弟をクラックします。これは単なる例です。実際には、ユニットに3つのクラス、20の列挙、および293の定数があります。
c++ - c ++循環依存関係を処理するにはどうすればよいですか?
通常、#include チェーンが循環する場合は、#include の 1 つを前方宣言に置き換えて解決し、この型に依存するすべての関数実装を cpp ファイルに移動します。代わりにヘッダーを #include します。
しかし、場合によっては、関数の実装を cpp ファイルに入れるのは良くありません。特に、テンプレートやインライン関数を扱う場合はそうです。
したがって、前方宣言を使用するのではなく、循環 #include チェーンを処理する他の方法はありますか?
ありがとう!
java - OO design and circular dependencies
I am currently struggling with a circular dependency problem when designing my classes.
Ever since I read about the Anemic Domain Model (something I was doing all the time), I have really been trying to get away from creating domain objects that were just "buckets of getters and setters" and return to my OO roots.
However, the problem below is one that I come across a lot and I'm not sure how I should solve it.
Say we have a Team class, that has many Players. It doesn't matter what sport this is :) A team can add and remove players, in much the same way a player can leave a team and join another.
So we have the team, which has a list of players:
Then we have the Player, which has a reference to the Team:
One can assume that both methods (remove and leave) have domain-specific logic that needs to be run whenever a team removes a player and a player leaves a team. Therefore, my first thought is that when a Team kicks a player, removePlayer(...) should also call the player.leaveTeam() method...
But then what if the Player is driving the departure - should the leaveTeam() method call team.removePlayer(this)? Not without creating an infinite loop!
In the past, I'd have just made these objects "dumb" POJOs and had a service layer do the work. But even now I'm still left with that problem: to avoid circular dependencies, the service layer still has link it all together - i.e.
Am I over complicating this? Perhaps I'm missing some obvious design flaw. Any feedback would be greatly appreciated.
Thanks all for the responses. I'm accepting Grodriguez's solution as it is the most obvious (can't believe it didn't occur to me) and easy to implement. However, DecaniBass does make a good point. In the situation I was describing, it is possible for a player to leave a team (and be aware of whether he is in a team or not) as well as the team driving the removal. But I agree with your point and I don't like the idea that there's two "entry points" into this process. Thanks again.