背景
我正在阅读“清洁代码手册”,并且在并行中,我正在像银行账户那样从事诸如体操之类的身体对象卡塔(Kata)的研究:
健美操对象的第9条规则是我们不要使用吸气剂或吸气剂。
看起来很有趣,我同意这一原则。而且,在“清洁代码”的第98-99页,作者解释说,getters / setters破坏了抽象,并且我们不必询问对象,而必须告诉对象。
在我看来,这是完全合理的,我完全同意这一原则。问题出在实践中。
语境
例如,我有一个必须列出一些用户并显示用户详细信息的应用程序。
我的用户包括:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
问题
当我只需要显示一个简单的信息(并且我必须确认我不需要对该特定字段进行额外的操作)时,我该怎么办?或者如何避免吸气剂以简单的方式显示Firstname值(随机)输出支持?
我想到什么
一种解决方案是:
user.getName().getFirstName().getStringValue()
这非常可怕,违反了许多健美操规则,并违反了Demeter法则。
另一个可能是这样的:
String firstName = user.provideFirstnameForOutput();
// That would have called in the user object =>
String firstName = name.provideFirstnameForOutput();
// That would have called in the name object =>
String firstName = firstname.provideFirstnameForOutput();
但是我对这种解决方案感到不满意,因为它似乎只是一种“高阶访问器”,就像使用旨在匹配Demeter法则的方法绕过标准的getter / setter方法一样。
任何的想法 ?