“经理”类通常会:
- 询问某物的状态
- 根据该状态做出决定
作为一种解毒剂或与之形成对比,面向对象的设计将鼓励您设计类 API,在其中您“告诉不要要求”类本身自己做事(并封装自己的状态):有关“告诉不要”的更多信息“不要问”参见例如此处和此处(也许其他人对“告诉不要问”有更好的解释,但这是谷歌为我找到的前两篇文章)。
看起来我们生成的小 OO 代码的主要策略是将问题分解为易于识别为离散单元的类,然后将剩余/通用位放入“管理器”类中。
即使在最好的时候,这也可能是真的。Coplien 在他的Advanced C++: Programming Styles and Idioms一书的结尾谈到了这一点:他说在一个系统中,你往往会:
举个例子,一架飞机(我很抱歉给你另一个车辆例子;我在解释他):
- “对象”可能包括副翼、方向舵和推力
- “经理”或自动驾驶仪将执行各种命令或事务
例如,“右转”交易包括:
- 襟翼.right.up()
- 襟翼.left.down()
- rudder.right()
- 推力.增加()
所以我认为你确实有交易,它跨越或使用各种相对被动的“对象”;例如,在应用程序中,“随便”的用户命令最终将由每一层(例如 UI、中间层和 DB 层)的各种对象实现(因此调用)。
所以我认为在一定程度上你会有“剩余部分”。不过,这是一个程度的问题:也许您应该希望尽可能多的代码是自包含的、封装的,以及一切……以及使用(或依赖于)其他一切的剩余部分,应该给予/使用尽可能多地隐藏并尽可能多地执行的API,因此尽可能多地从所谓的经理那里承担责任(实施细节)。
不幸的是,我只在一本书(Advanced C++)中读过这个概念,并且无法将您链接到在线内容以获得比我的这个释义更清晰的解释。