oop – 不是信息专家/告诉不要单一责任原则的问题?

这可能只是我,这就是为什么我在问这个问题。信息专家,不要问,SRP通常被一起提到最佳做法。但我认为他们是不对的。这是我在说的:

有利于SRP但违反的代码告诉不要问,信息专家:

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

代码有助于告诉不要/信息专家,但违反SRP:

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

如果他们确实是不对的,那就是对我的OCD的证明。否则,请填写这些做法如何和平共处。谢谢。

编辑:有人想要定义术语 –

信息专家:具有操作所需数据的对象应主持操作

告诉不要问:为了做工作,不要求对象的数据;告诉对象做工作

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

我不认为他们是如此之多,因为他们强调不同的事情会导致你的痛苦。一个是关于结构化代码,以明确哪些特定的职责和减少耦合,另一个是减少修改类的原因。

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

我们已经建立了许多有用的指导方针,可以帮助我们做出决定的最大化和模式。

这些都可用于检测可能存在于我们设计中的不同类型的问题。对于您可能会看到的任何具体问题,会有一个甜点在某个地方。

不同的指导方针相互矛盾。只要应用你听到或阅读的每一个指导,都不会使你的设计更好。

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

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...