- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近才知道 Law of Demeter .
像很多事情一样,我意识到这是我已经在做但没有名字的事情。虽然有几个地方我似乎违反了它。
例如...
我可能有一个地址对象:
public class Address : IAddress
{
public string StreetAddress { get; set; }
public string City { get; set; }
public int Zip { get; set; }
}
public class Customer : ICustomer
{
private IAddress address;
Customer()
{
Address = null;
}
public string Name { get; set; }
public IAddress
{
get
{
if (address == null)
{
address = new Address();
}
return address;
}
set
{
address = value;
}
}
}
new Address()
或其他任何东西,但这几乎是我正在做的事情的一个例子。我没有包括接口(interface),因为我希望它们是显而易见的。
int zip = customer.Address.Zip;
之类的东西。和
customer.Address.City = "Vancouver";
public class Address extends AddressInterface
{
private String m_city;
public String getCity() { return m_city; }
public void setCity(String city) { m_city = city; }
}
customer.getAddress().setCity("Vancouver");
响起的警报比
customer.Address.City = "Vancouver";
更多为我做了。也许我应该改用 Java 一段时间。
最佳答案
本文:http://haacked.com/archive/2009/07/14/law-of-demeter-dot-counting.aspx对您正在讨论的问题有很好的解释。
正如他所指出的,这不是一个点计数练习,而是一个耦合问题。目前您的Customer
和 Address
类耦合太紧。对于初学者,Customer
不应该创建新地址,也许通过 Address
在使用构造函数。至于您是否应该使用多个点来访问地址的一部分,请阅读文章...
马丁·福勒:“I'd prefer it to be called the Occasionally Useful Suggestion of Demeter.”
关于oop - 我打破了 "Law of Demeter"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3706463/
我正在尝试了解如何正确使用被动 View 。在我看来,我在被动 View 上看到的每个例子都违反了德米特法则: //In the presenter code myview.mytextfield.t
如果我有一个包含方法 f 的类 C,该方法将 D 类型的对象(我定义的另一个类)作为参数 如果我在方法f中调用对象D的方法,是否会违反得墨忒耳定律?为什么? 例如: public C { pu
我愿意遵守得墨忒耳法则。但我也想延迟加载一些传递给构造函数的对象。我应该如何实现?通过包装类?传递函数指针? 最佳答案 您实际上可以编写一个通用包装器来完成此操作: template class L
从这里引用: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
感觉好像走到了死胡同。如果我理解正确,那么如果我遵循 Law of Demeter我永远无法制作一个返回对象的方法,然后客户端代码调用它。我只是在考虑总是返回一个对象的工厂模式。是的,有返回对象的映射
我有一个简单的 Store 类,其中包含一个 Inventory。 Inventory 包含一个 Item 列表。为了修改 Inventory 中的其中一个 Item,我必须这样写: Store st
public class BigPerformance { public decimal Value { get; set; } } public class Performance
我知道以下是一个主观问题,但您的指导方针确实有助于我追求干净、可测试的代码。 请考虑以下示例,我认为它违反了一系列设计原则。 public class OfferEligibilityCheckerS
我最近才知道 Law of Demeter . 像很多事情一样,我意识到这是我已经在做但没有名字的事情。虽然有几个地方我似乎违反了它。 例如... 我可能有一个地址对象: public class A
在敏捷开发人员的基本技能中,在需求与能力接口(interface)中,第 12 章,我试图理解作者在本章末尾提到的应用分度法则的挑战所提出的主要解决方案。 为了使故事简短。 我们从以下研究案例开始:
我经常发现自己做了很多 delegating . 在Ruby Science ,它说: Many delegate methods to the same object are an indicato
我有点想用 Java 8 流编写 Selenium 页面对象,如下面的代码所述,并收到评论说我的代码违反了 Demeter 法则,因为我在一行中执行了很多操作。我被建议将代码分解为第一个流以收集列表并
我有一个游戏引擎,我将物理模拟从游戏对象功能中分离出来。所以我有一个物理 body 的纯虚拟类 class Body 我将从中导出物理模拟的各种实现。我的游戏对象类看起来像 class GameObj
我对如何避免一对多关联违反得墨忒耳法则感到困惑。假设我有一个这样的模型: class Organization < ActiveRecord::Base has_one :address ha
如果我有一个对象的 ArrayList,那么任何时候我需要调用 ArrayList 成员的任何方法时,我都需要这样做: list.get(i).doSomething(); 这看起来很可疑地违反了 D
我在设计在 SpringMVC/Hibernate Rest Web 应用程序中的 @ManyToMany 集合上运行的服务方法时遇到问题,而不使用违反 Demeter 法则的长方法链。我的应用程序有
这可能是一个幼稚的问题,但是 RSpec 的测试 DSL 是否违反了 Demeter 法则? 这是来自 http://rspec.info 的 RSpec DSL 示例: bowling.score.
假设您有一个类 Car,它有一个 Driver。如果你想访问司机的年龄,你会这样做: @car.driver_age 代替 @car.driver.age 如果您在 Car 模型中委托(delegat
我正在使用一个工具来自动生成按层次结构组织的 XML 文件的类表示形式。 XML 文件是我的应用程序需要能够访问的设置文件(只读)。 如果我将顶级节点(例如,AppSettings)传递给需要访问一项
我是一名优秀的程序员,十分优秀!