问题标签 [cyclic-reference]

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 投票
4 回答
886 浏览

neo4j - 在 Neo4j 中删除互惠关系的最快方法是什么?

我导入了具有重复“相关术语”关系的同义词库,因此当 A 和 B 相关时,我的图表包含 (A)-[:RT]->(B) 以及 (B)-[:RT]->(A )

为了清理它,因为 Neo4j 允许我在两个方向上遍历图形,我做了

这是最快的方法吗?答:不,因为它可以简化。

编辑成

0 投票
1 回答
3589 浏览

python - django如何插入表相互引用

我正在使用 django 1.6,我有 2 个模型相互引用,如下所示:

我有循环外键的原因是为了数据完整性。因为一个地址可能只分配给一个用户,而一个用户必须至少有一个地址。是的,我知道没有这个我可以生活,但我宁愿不这样做。

我正在使用带有外键的 PostgreSQL DEFERRABLE INITIALLY DEFERRED,并且我想使用事务将数据插入这些表中。但是,当我尝试使用 时transaction.atomic():,它的行为在我看来并不像预期的那样。

这是我正在做的事情:

IntegrityError但是,我第一次打电话时一直收到addr.save()

有什么建议我做错了吗?有更好的方法吗?

0 投票
1 回答
544 浏览

c# - 实体框架代码优先:一对多循环引用

我正在使用启用了代码优先和自动迁移的 EF 6.1。到目前为止,我的模型(仅相关属性)如下所示:

在我的 DbContext 中,我通过以下方式创建引用:

在建模方面,我期望拥有的是:

  • 1 个库存 <-> n 个房间
  • 1 个房间 <-> n 个项目
  • 1 个库存 <-> n 项

因此,我希望能够直接按库存或按房间过滤项目。运行应用程序并首次访问 DbContext 时,抛出 SqlCeException,告诉我存在循环引用。现在,由于 Inventory 在所有情况下都是主实体,并且只有另一个详细步骤(房间)——可以跳过过滤——所以我在图表中看不到任何循环。

有什么提示吗?

0 投票
1 回答
325 浏览

php - 在 php/codeigniter 中加载循环引用类

在 CodeIgniter 中,我有一个名为的模型User_Model和另一个名为Product_Model

现在在User_Model构造函数中,我正在加载我在类中使用的几个模型。

在开发产品时,有时我需要使用用户模型,所以我这样做:

问题是,由于这些是循环引用,我得到Fatal error: Maximum function nesting level of '100' reached. 我正在使用xdebug并且我知道它具有删除它的设置。我的问题是 - 在不增加设置限制的情况下处理这个问题的正确方法是什么。我应该如何重构架构?

我知道如果我PHP不使用codeigniter,并创建循环引用(A 类加载 B 类,B 类加载 A 类),PHP 将加载它 N 次(我认为是 3 次),然后将其标记为*recursive*.

但是我们面临这样的情况,什么是最好的重构方式呢?

0 投票
1 回答
569 浏览

scala - 重构具有可变性和循环依赖关系的域模型,以便为具有良好 FP 实践的 Scala 工作?

我来自 OO 背景(C#、javascript),Scala 是我第一次涉足 FP。

由于我的背景,我在实现一个非常适合我的领域问题并且符合 FP 的良好实践(例如代码中的最小可变性)的领域模型时遇到了困难。

首先,简要描述一下我现在的域问题。

  • 主要领域对象是:Event, Tournament, User, and Team
  • TeamsUsers
  • 两者Teams都可以Users参加TournamentsEvent
  • Events包括UsersTournaments
  • 得分、统计数据和排名,Teams以及Users谁竞争TournamentsEvents将是一个主要特征。

鉴于对问题的描述,我对域的最初想法是创建对象,其中双向循环关系是常态——类似于图。我的思路是,能够访问任何给定对象的所有关联对象将为我提供最简单的数据视图编程和操作途径。

然而,当我深入研究 FP 最佳实践时,我发现我的思维过程与 FP 原则不兼容。循环引用不受欢迎,对于不可变对象似乎几乎是不可能的。

鉴于此,我现在正在努力解决如何重构我的域以满足良好 FP 的要求,同时仍然保持域中“现实世界对象”的常识组织。

我考虑过的一些选项

  • 使用惰性 val 和按名称引用——我对此的疑虑是,一旦域变得不平凡,这似乎变得难以管理
  • 改用单向关系——虽然我被迫将一些域对象降级为只能通过其他对象访问的第二类对象,但使用这种方法。我会如何选择?它们对我来说似乎都同样重要。另外,这将需要构建“反对谷物”的查询,以获取第二类对象的简单列表。
  • 使用间接并存储关系标识符列表——这消除了周期性依赖,但随后会产生更多复杂性,因为我必须编写额外的业务逻辑来模拟关系更新并额外访问数据库以获得任何关系。

所以我正在努力改变我的实现或我的原始模型以实现我认为我需要的耦合,但以“正确的方式”用于 Scala。我该如何解决这个问题?

TL;DR——当域似乎需要双向访问和核心可变性时,我如何使用良好的 FP 实践对域进行建模?

0 投票
2 回答
455 浏览

c++ - weak_ptr 在 shared_ptr 中的作用

除了weak_ptr 的作用外,我了解shared_ptr 的工作原理。我知道当引用计数不为零时它可以检测循环引用,但除此之外我不明白它是如何做到这一点的。它有什么作用?

0 投票
1 回答
151 浏览

python - Cyclic imports within django subapps

I'm working on a django project where i have the following setup

You see the cyclic imports. I've tried a number of combinations but i cant seem to get it right. I'd rather not move the code in forms.py to models.py

I've tried:

Some help would be much appreciated.

0 投票
0 回答
398 浏览

scala - build.sbt 定义模块之间的项目依赖关系

我在 PlayFramework 中有项目。它有一个没有任何代码/逻辑的主要项目。它有几个子模块:

  • 主要的:
    • 行政
    • 常见的
    • 店铺

模块:admin 和 shop 将基于通用模块(类,如:用户、角色、权限),所以我必须这样配置它:

但是在模块公共中,我可以查看我想在哪里显示到其他子模块的链接(a href ...)。为此,我必须使用反向路由类,它们是子模块中的控制器:shop 和 admin。所以我必须使用类似的东西:

这意味着我还必须为公共模块添加 .dependsOn(shop).dependsOn(admin) 。

但它会导致循环依赖,这是不正确的!

请帮我。我该如何处理?

0 投票
1 回答
312 浏览

java - 内部类使用外部类的方法。那是循环引用吗?如何避免

我想知道在内部类中调用外部类的方法然后在外部类中使用内部类的方法是否被认为是不好的做法。

在这种情况下: 在BidParser 中我调用方法updateMaps (),它属于外部类。此外,我在 BidParser 中调用第二个内部类InputSanityChecker的方法。

这是不好的做法和反模式吗?我在这里创建了一个上帝对象吗?(虽然在其他外部类中要遵循更多功能)

编辑:我有两个变量 Var1、Var2(比方说)属于 Outer,但 updateX 和 checkX 方法需要它们。

0 投票
1 回答
848 浏览

c++ - C++11、shared_ptr.reset() 和循环引用

我对 shared_ptr.reset() 的行为有疑问。

在这种情况下,我有以下类的循环引用。我有一本书和一个所有者,它们彼此都有 std::shared_ptrs,创建了一个循环引用。

书.h

书本.cpp

所有者.h

所有者.cpp

这是main.cpp。在这种情况下, book 和 owner 之间存在强引用,一旦 _tmain 退出其作用域,就会发生内存泄漏。当我在各自的析构函数中插入断点时,不会调用 book 和 owner 的析构函数。

主文件

我想看看我是否可以重置()指针,以便调用析构函数并打破循环依赖。根据我对 shared_ptr.reset() 的理解,对象应该是空的。

http://www.cplusplus.com/reference/memory/shared_ptr/reset/

但是,我在两个析构函数中的断点都没有被击中。我的假设是,因为我已经重置了 book 和 owner,所以两者的引用计数都会下降到 0,并且当 _tmain 返回时它们会被销毁。

main2.cpp

我知道这已经是很糟糕的代码,我可以使用 weak_ptr 来删除循环依赖,但我只是好奇为什么 reset() 不会破坏这种依赖。