问题标签 [god-object]

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 投票
1 回答
326 浏览

qt - 摆脱 QMainWindow 的上帝对象

我正在使用三个库ITK VTKQt. 因为我想要事件循环中的所有功能以及信号和插槽的连接,所以我在 QMainWindow 定义下定义了所有功能。现在主窗口对象变得笨重,我尝试为不同的功能创建不同的类,但是main.cpp模块化理念中所有混乱的东西都不见了。你能建议一个程序的结构应该如何吗?

0 投票
2 回答
4052 浏览

angularjs - When to use nested controllers instead of services in angularjs?

I just started to use AngularJS, so I'm not an expert.

I have a div that represent the right area of my html view. In that div I have a controller, i.e.

Inside that div I have a table, a search region, etc. Each region inside that div has its own controllers, it looks like this:

the search region for example has its own controller and it is a child of rightContainerCtrl because it needs to alter some content in the parent (rightContainerCtrl), but the rightContainer div is growing and now it's big, and contain several nested controllers.

I think that using this nested controllers it's bad in this context because all the nested controllers share the parent scope, and not all controllers needs to access all the parent scope variables, also all the controllers are "prisoners" of the rightContainerCtrl, so they are highly coupled with their parent controller.

It looks like a God object anti-pattern (God controller in this case), so I think that instead of using nested controllers I can refactor my code to eliminate the rightContainerCtrl controller and use a service instead (like in a facade design pattern), that service then will be used by the controllers instead of sharing scope variables.

but since I'm not an AngularJs expert I'm not sure if I'm right or if it's better to leave this parent controller, maybe I'm missing something, so my question is

When is better to use nested controllers (nested scopes) and when it's better to use services instead in angularjs?

0 投票
1 回答
412 浏览

php - 如何避免对我们的上帝对象进行这种添加

我们的网络应用程序允许用户上传文件。我们的 Web 应用程序中有两个上帝对象:

  • 用户对象(3000+ 行)
  • 文件对象(3000+ 行)

目前常用的用法是:

我们目前正在讨论将用户对象作为另一个公共变量添加到文件对象中。因为在我们使用文件对象的任何地方,我们都需要关联的用户对象。

所以用法将是:

我们正在尝试重构这些上帝对象,将用户对象添加到文件对象感觉就像我们让问题变得更糟。但是,我真的没有很好的论据来不同意提议的更改。

在以下问题上获得一些帮助会很棒:

  1. 将用户对象添加到文件对象是一个坏主意吗?
  2. 如果这是一个坏主意,那么不这样做的主要论据是什么?
  3. 我还能如何重构这些对象?

笔记

  • 我知道行数不是真正的衡量标准,但我们的其他课程是 50-150 行,很少使用。
  • 我已经减少了重要部分的常见用法,因此对缺乏最佳实践表示歉意。
  • 我已经在尝试从我们的代码中删除静态方法和公共变量。
0 投票
1 回答
260 浏览

dependency-injection - 是否有沿对象图传播配置状态的模式?

我试图避免创建一个monster class,并且我注意到一个不太好的模式,并且很好奇是否有人对这个问题有任何见解。

问题

A很复杂。为了避免“神物”,一些逻辑被推到BandC中。

A 现在用作外观。这取决于 B 和 C。

但是,A 具有 B 和 C 需要的配置数据。所以我们必须保持数据同步。

此外,B 和 C 必须转换数据才能使用它。

为避免编写重复代码,我们将这些转换方法移回 A。

但这意味着 B 和 C 现在依赖于 A,而不仅仅是它的数据。

这导致了循环依赖。

我一直在研究依赖注入和工厂模式,这两个想法解决了很多问题,但是我对如何创建一个节点在运行时可配置的对象图感到困惑。换句话说,我需要能够在运行时从外部更改特定节点或节点组的行为。将配置状态沿对象图传播的最佳方式是什么?

编辑

在过去的几个小时里试图将我的想法变成一个问题,我想我可能偶然发现了一个解决方案。我认为我需要做的是创建一个配置提供程序类D,该类将传递到依赖此信息的节点中。

D 管理value1value2提供sum方法。D 还具有在 value1 和 value2 更改时触发的事件,以便依赖节点(A、B 和 C)可以响应更改。

我认为这个解决方案有效,但我还是想发布,以防有​​更好的解决方案。如果这我正在寻找的模式,它叫什么?“提供者”模式?(不要与 ASP.NET 的提供程序模型混淆!)

0 投票
1 回答
759 浏览

c++ - 神物替换

我现在试图从我的服务器代码中删除上帝对象。

起初我的服务器设计,我决定做World, 和const容器对象作为单例。

但是我的服务器是多线程的,单例没有好的解决方案。

所以我管理它并将这些类作为Core类实例移动。

例如:

Core在新连接上为Session类提供对对象的引用。

我只需要该对象的一个​​实例。但是上帝对象是不好的设计模式,所以我想问,我怎样才能重新设计那个对象,避免它,单例模式设计好吗?

0 投票
1 回答
57 浏览

java - 通过几个简单标准验证的验证器类 - 这是上帝对象吗?

我有一个 Java 类验证器。它验证一些文件。这是伪代码:

每个方法的行数不超过 15 行。此类的总长度约为 300 行。你认为它是上帝的对象还是其他一些难闻的类?它是某种反模式吗?如果您认为需要重新设计 - 请告诉我如何。

0 投票
1 回答
99 浏览

java - Util ==上帝的对象?

我经常使用Selenium Webdriver,并且我编写了很多“实用”方法来使其更易于使用。我将这些类放在一个WebDriverUtil类中,现在该文件的长度超过 1,200 行。每种方法都WebDriverUtil试图将我与使用区分开来,WebDriver因为这是我经常使用的东西,不会干枯继续写作。

例如,这是我要放入的方法WebDriverUtil

如果我有 1,200 行充满这样的方法的代码,我有上帝对象吗?如果是这样,我该如何解决?

我应该把我的行为分成这样的装饰器类吗?

0 投票
0 回答
51 浏览

javascript - 我怎样才能把我的上帝对象分成更小的班级?

所以我意识到我一直在写上帝的对象,我正在尝试重构一些对象,但我正在努力弄清楚我应该如何分离所有东西。这里只是看一下 Table 对象中的属性和一些函数存根

这显然是一团糟,但我正在努力将其分解。我能看到的最明显的事情是将甲板/洗牌/弹出放入甲板对象。我应该将玩家与 satPlayer/playerLeave/playerCount/countPlayersIn 一起放入 PlayerServer 或 PlayerManager 吗?如果是这样,我是否也应该移动 giveMoney 和 AwardMoney?

我一直在谷歌搜索,在所有示例代码中,我发现它是如此的小而清晰,你应该在哪里对行为进行分组,但在一个大型复杂的类上,我只能挑出几件事来分开

0 投票
0 回答
62 浏览

java - 将状态传递给每个行为是否使其成为“上帝对象”

由于实施中的行为如此多样化,我担心状态将成为具有许多不同领域的上帝对象。对于只需要一部分状态而不是所有内容的行为,这似乎有点过头了。首先,这甚至是一种反模式,然后我将如何解决它?

我已经考虑过这样做,以便行为记录它在创建时需要的状态或段,但我只是不确定它会是什么样子。此外,我考虑让 state 成为一个存储,其中所有字段都存储在一个键和值下。我唯一不喜欢的是必须在检索时强制转换对象。