当前位置:  开发笔记 > 编程语言 > 正文

不是信息专家和告诉不要问单一责任原则吗?

如何解决《不是信息专家和告诉不要问单一责任原则吗?》经验,为你挑选了2个好方法。

信息专家,Tell-Don't-AskSRP通常被一起提及为最佳实践.但我认为他们存在分歧.这就是我所说的.

有利于SRP但违反Tell-Don't-Ask&Info-Expert的代码:

Customer bob = ...;
// TransferObjectFactory has to use Customer's accessors to do its work, 
// violates Tell Don't Ask
CustomerDTO dto = TransferObjectFactory.createFrom(bob); 

有利于Tell-Don't-Ask和Info-Expert但违反SRP的代码:

Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();

请告诉我这些做法如何能够和平共处.

术语的定义,

信息专家:具有操作所需数据的对象应承载该操作.

告诉不要问:不要向对象询问数据以便工作; 告诉对象做这项工作.

单一责任原则:每个对象应具有狭义的责任.

Hamish Smith.. 8

我不认为他们是如此矛盾,因为他们正在强调会导致你痛苦的不同事物.一个是关于构造代码以明确特定职责的位置并减少耦合,另一个是关于减少修改类的原因.

我们每个人都必须每天做出关于如何构建代码以及我们愿意在设计中引入哪些依赖关系的决策.

我们已经建立了许多有用的指导方针,格言和模式,可以帮助我们做出决策.

这些中的每一个都有助于检测我们的设计中可能存在的各种问题.对于您可能正在查看的任何特定问题,某处会有一个甜蜜点.

不同的指导方针确实相互矛盾.只需应用您听过或读过的每一条指导都不会使您的设计更好.

对于您今天看到的具体问题,您需要确定可能导致您疼痛的最重要因素.



1> Hamish Smith..:

我不认为他们是如此矛盾,因为他们正在强调会导致你痛苦的不同事物.一个是关于构造代码以明确特定职责的位置并减少耦合,另一个是关于减少修改类的原因.

我们每个人都必须每天做出关于如何构建代码以及我们愿意在设计中引入哪些依赖关系的决策.

我们已经建立了许多有用的指导方针,格言和模式,可以帮助我们做出决策.

这些中的每一个都有助于检测我们的设计中可能存在的各种问题.对于您可能正在查看的任何特定问题,某处会有一个甜蜜点.

不同的指导方针确实相互矛盾.只需应用您听过或读过的每一条指导都不会使您的设计更好.

对于您今天看到的具体问题,您需要确定可能导致您疼痛的最重要因素.


确实是的.这就是编程是一门艺术而不是盲目应用规则的原因.

2> Vsevolod Par..:

You can talk about "Tell Don't Ask" when you ask for object's state in order to tell object to do something.

In your first example TransferObjectFactory.createFrom just a converter. It doesn't tell Customer object to do something after inspecting it's state.

I think first example is correct.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有