- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个游戏引擎,我将物理模拟从游戏对象功能中分离出来。所以我有一个物理 body 的纯虚拟类
class Body
我将从中导出物理模拟的各种实现。我的游戏对象类看起来像
class GameObject {
public:
// ...
private:
Body *m_pBody;
};
而且我可以为该特定游戏插入我需要的任何实现。但是当我只有一个 GameObject
时,我可能需要访问所有 Body
函数。所以我发现自己写了很多东西,比如
Vector GameObject::GetPosition() const { return m_pBody->GetPosition(); }
我很想把它们都刮掉,然后做类似的事情
pObject->GetBody()->GetPosition();
但这似乎是错误的(即违反得墨忒耳法则)。另外,它只是将冗长的实现从实现推向了使用。所以我正在寻找一种不同的方式来做到这一点。
最佳答案
Demeter 法则的思想是您的 GameObject
不应该具有 GetPosition()
之类的函数。相反,它应该具有可以在内部调用 GetPosition()
(以及其他函数)的 MoveForward(int)
或 TurnLeft()
函数。本质上,它们将一种界面转换为另一种界面。
如果您的逻辑需要 GetPosition()
函数,那么将其转换为 Ates Goral 的接口(interface)是有意义的。否则,您将需要重新考虑为什么要如此深入地了解一个对象以调用其子对象的方法。
关于c++ - 如何重构此代码层次结构(与 Demeter 法则相关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/468090/
在 SO解释了为什么像 scalaz、cats (Scala) 或 Arrow (Kotlin) 中的 Validation 不能是 monad。 据我所知,这是因为他们已经根据应用仿函数对 mona
给定例如像 这样的类型 data Tree a = Branch (Tree a) (Tree a) | Leaf a 我可以轻松地为 Functor、Applicative、
从这里引用:https://en.wikipedia.org/wiki/Law_of_Demeter More formally, the Law of Demeter for functions r
以下代码打破了 Law of Demeter : public class Student extends Person { private Grades grades; public Stu
我有一个简单的 Store 类,其中包含一个 Inventory。 Inventory 包含一个 Item 列表。为了修改 Inventory 中的其中一个 Item,我必须这样写: Store st
public class BigPerformance { public decimal Value { get; set; } } public class Performance
当我需要多态行为时,我经常发现自己在 C++ 中使用唯一指针。我通常实现如下所示的纯抽象类: class A { public: virtual A* clone() const = 0; /
5 规则指出,如果一个类有一个用户声明的析构函数、复制构造函数、复制赋值构造函数、移动构造函数或移动赋值构造函数,那么它必须有其他 4 个。 但今天我突然明白了:你什么时候需要用户定义的析构函数、复制
编译器或库的更“ native ”部分(IO 或可以访问黑魔法和实现的函数)是否对这些定律做出假设?打破它们会导致不可能的事情发生吗? 或者它们只是表达了一种编程模式——也就是说,你唯一会因为破坏它们
我有点想用 Java 8 流编写 Selenium 页面对象,如下面的代码所述,并收到评论说我的代码违反了 Demeter 法则,因为我在一行中执行了很多操作。我被建议将代码分解为第一个流以收集列表并
我对如何避免一对多关联违反得墨忒耳法则感到困惑。假设我有一个这样的模型: class Organization < ActiveRecord::Base has_one :address ha
如果我有一个对象的 ArrayList,那么任何时候我需要调用 ArrayList 成员的任何方法时,我都需要这样做: list.get(i).doSomething(); 这看起来很可疑地违反了 D
我在我的 Purescript 代码中广泛使用了来自库和我自己的类型类。每个类型类法则似乎都提供了一个很好的测试。目前,我正在为每个类(class)和法律单独编写测试。有没有办法部分自动化?也许像 H
我看到提到过 ListT is a classic example of a buggy monad transformer that doesn't satisfy the monad laws.
当我审查一些代码时,我看到了这个片段。 List users = /* Some code that initializes the list */; users.stream() .fil
我是一名优秀的程序员,十分优秀!