问题标签 [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.

0 投票
5 回答
8389 浏览

clojure - 解决 Clojure 循环依赖

我正在研究一些 Clojure 代码,这些代码在不同的命名空间之间具有一些循环依赖关系,并且我正在尝试找出解决它们的最佳方法。

  • 基本问题是我在其中一个文件中收到“No such var: namespace/functionname”错误
  • 我试图“声明”该函数,但随后它抱怨:“无法引用不存在的合格变量”
  • 我当然可以重构整个代码库,但是每次你有一个需要解决的依赖项时都这样做似乎不切实际......并且对于某些循环依赖项网络可能会变得非常丑陋
  • 我可以将一堆接口/协议/声明分离到一个单独的文件中,并让所有内容都引用它......但这似乎最终会变得混乱并破坏我拥有的当前良好的模块化结构以及相关的功能分组一起

有什么想法吗?在 Clojure 中处理这种循环依赖的最佳方法是什么?

0 投票
5 回答
6618 浏览

c# - 是否可以在程序集级别在 Visual Studio 中启用循环依赖项?相互依赖的程序集甚至可能吗?

这可能听起来像一个愚蠢的问题,但无论如何我都会试一试。

因此,在 Visual Studio 中,不能有两个项目 X 和 Y,使得 X 引用 Y,Y 引用 X。

总的来说,由于各种原因,我完全可以理解循环依赖是如何产生问题的。

但是这样编译两个相互依赖的项目真的不行吗?在我看来,这一定是可能的,因为(在我看来——也许我对此完全不了解)拥有两个相互依赖的程序集实际上与拥有两个相互依赖的类并没有太大区别——这种情况合法,可以编译。

如果您说“两个程序集不能相互依赖,因为编译器无法先编译一个”,这对我来说是有道理的;除了您似乎可以为同一个程序集中的两个类使用相同的参数,而且很明显编译器可以很好地处理这种情况。

基本上我问的原因不是我有做这件事的迫切愿望,我知道这通常是不明智的。具体来说,我想知道,因为如果我可以有两个项目——比如说,MyProjectCS 和 MyProjectVB——那就太好了——它们基本上作为一个单元的两个相互依赖的部分存在,并且只是因为某些部分是用 C# 编写的,所以它们是分开的。其他部分是用 VB.NET 编写的。

所以,我的问题是(哎呀,三倍):

  1. 是否可以启用此行为(就此而言,在 Visual Studio 或其他地方)?
  2. 如果在任何 IDE 中都不可能,至少在理论上是可能的,还是可能不存在相互依赖的程序集?
  3. 如果理论上都不可能,为什么不呢?换句话说,相互依赖的程序集与单个程序集中的相互依赖的代码有何不同?
0 投票
1 回答
327 浏览

c# - 多个项目的配置

我的项目

我正在使用 VS C# 2.0 编写一个 Winform 应用程序,它包含几个库和两个可执行文件,每个文件都在自己的项目文件中,并且都是同一解决方案的所有部分。

每个项目都有自己的 Settings Class 其中配置参数。一些参数是项目特定的,一些参数是多个项目需要的(但不是所有的),还有一些参数取决于通过 USB 连接到用户机器的硬件设备的型号(并在运行时选择)。

设置类包括枚举、属性以及加载和保存方法。

目前我有一个带有属性网格的表单,它实例化所有类的所有设置并让用户更改配置。它属于主要的可执行项目。

我的问题

我需要一种用户配置整个应用程序的方法(我们称之为配置器),所以我尝试创建另一个项目,该项目将具有带有属性网格的表单,但以配置器和我的主程序之间的循环引用问题结束可执行。配置器需要自己运行或从主可执行文件中调用。

另外,我不知道将公共参数值的更改复制到其对应项的好方法。例如,如果参数p对项目AB的设置类是通用的,则当用户更改Ap值时,配置器将不得不更改Bp值(反之亦然)。我认为解决此问题的唯一解决方案涉及属性网格的PropertyValueChanged事件处理程序上的 if 子句的噩梦。

谢谢,海蒂

0 投票
5 回答
932 浏览

c++ - 模板,循环依赖,方法,天哪!

背景:我正在开发一个基于现有 Java 类模型生成 C++ 代码的框架。出于这个原因,我无法更改下面提到的循环依赖。

鉴于:

  • 父子类关系
  • Parent 包含一个 Children 列表
  • 用户必须能够在运行时查找列表元素类型

我在以下测试用例中对此进行了建模:

主文件

父.h

孩子.h

数组.h

  1. 当我编译上面的代码时,我得到 error C2027: use of undefined type 'Child'return ElementType::getType();

  2. 如果我尝试#include "Child.h"而不是前向声明,我会得到 error C2504: 'Parent' : base class undefinedclass Child: public Parent

  3. 如果我尝试Array<Child*>而不是Array<Child>得到 error C2825: 'ElementType': must be a class or namespace when followed by '::'return ElementType::getType();

循环依赖的产生是因为:

  1. Child.h 需要了解 Parent 类
  2. Parent.h 需要了解类 Array
  3. Array.h 需要了解 Child 类

有任何想法吗?

0 投票
2 回答
4802 浏览

python - Python循环引用

试图在同一个文件中拥有两个相互引用的类。什么是让这个工作的最佳方式:

?

问题似乎是因为属性在类上,因为它试图在类本身被解析后立即执行。

有没有办法解决这个问题?

编辑:

这些键用于 SQLAlchemy 映射,因为它们实际上是类变量(不是实例)。

0 投票
5 回答
1542 浏览

c++ - 在 C++ 中打破循环依赖

我有以下要解决的循环依赖问题:

编译器不喜欢这样,因为 my_class 没有在 typedef 之前声明。

如果我尝试像这样向前声明 myclass :

我收到“错误:'my_class' 的前向声明”。

我怎样才能打破这个恶性循环?


很抱歉,但我必须修改我的问题,因为我注意到我的陈述略有错误。

以下是我的问题的正确表示:

为此事道歉

0 投票
4 回答
14598 浏览

c++ - 解决模板类之间的循环依赖

我有两个类,Foo<T>Bar<T>,派生自Base. 每个都覆盖一个方法virtual Base* convert(ID) const,其中是唯一标识或ID的特定实例化的类型的实例(假装它是一个)。问题是需要能够返回一个实例,同样需要能够实例化. 由于它们都是模板,因此会导致和之间存在循环依赖关系。我该如何解决这个问题?FooBarenumFoo::convert()BarBar::convert()FooFoo.hBar.h

编辑:前向声明不起作用,因为每个方法的实现都需要另一个类的构造函数:

Foo.h

Bar.h

错误自然是“无效使用不完整类型”。

0 投票
3 回答
1191 浏览

language-agnostic - 如何解决这种循环的、双向的依赖?

我有一个 RequestHandler 类和一个 RequestListener 类。RequestHandler 创建一个 RequestListener 并将其传递给它自己的引用。RequestListener 依次调用 RequestHandler 上的方法来处理不同类型的请求(例如,handleTypeARequest()、handleTypeBRequest() 等)。不幸的是,RequestHandler 也调用 RequestListener 上的方法(例如 processNextRequest()),所以我有一个循环依赖:

这意味着两者之间的耦合更紧密,通常被认为是代码异味。

一种解决方案是使用不同的对象来封装每个请求,而不是使用不同的方法。当出现提示时,RequestListener 可以处理请求并为其返回某种类型的 Request 对象。不幸的是,我不太喜欢这种方法,部分原因是更多对象和类增加了复杂性,部分原因是性能问题(这很重要);直接在 RequestHandler 上调用 handleXXXRequest() 方法比创建一堆对象要快得多,并且可能还维护一个堆栈以在需要时缓冲它们。

这个问题还有其他解决方案吗,而且,这真的是一个问题吗?

0 投票
2 回答
1602 浏览

c# - 在多项目中引发自定义事件

它涉及以下内容:我有两个项目应该或多或少地彼此独立存在。项目一是一种文件系统观察器。另一个是我的 UI。如果有新文件,文件观察程序会引发事件。之后,应将文件中的数据添加到数据库中。这大致是背景故事。实际的问题是,文件观察者引发事件后,我想通知 UI 更新数据的视图。这意味着,事件应该由文件观察程序引发,并且应该在 UI 的实现中注册事件。现在的主要问题是我需要来自两个项目的类的实例。显然这会导致循环依赖问题。CP问题当然有接口的解决方案,但这并不能解决问题,我需要相同的对象来创建数据和事件注册。希望你能帮助我解决这个问题。谢谢。

0 投票
4 回答
625 浏览

c++ - C++ 包含和循环依赖

更新:让我澄清我的文件并重申我的问题:

主文件

主文件

其他.h

其他.cpp

所以基本上我想要的是:你实例化对象 A,然后实例化对象 B,而对象 B 又调用来自对象 A 的方法。我确信这样的事情是可能的,但它可能只是糟糕的设计我这边。任何方向将不胜感激。