告诉不要问 - 它如何适用于这个例子?

时间:2012-05-20 00:33:10

标签: encapsulation tell-dont-ask

作为我正在研究的真实事物的代理,请考虑构建模型。我们有一个代表模型部件的Parts类,包括基于给定参数制造零件的方法,验证等等。我们有一个Glue类,它做的大致相同,并且{ {1}}课程。

我可以用很好的封装来制造我的胶水和零件。然后,我将ModelBuilder和我的PartsInstance传递给我的GlueInstance作为参数。这里是一切都崩溃的地方。我可以告诉我的模型构建器,但是要这样做,它需要访问ModelBuilder(可能是Parts)中的数据。例如,我可能需要知道Glue的角落或中心位置,以便正确构建。

我在这里陷入困境,因为似乎Tell,Do not Ask阵营会说该部分应该以某种方式建立自己。但这对我来说没有意义。零件是一部分,而不是整个模型。那应该是自己构建的。 PartsInstance.Part[0]可能非常复杂,ModelBuilder可能会在其他地方使用。另一方面,我正在询问Parts对象的状态,然后根据该状态做出决定。此外,无论如何,决定可能不仅仅适用于PartsInstance概念。它可能涉及我选择的Parts类型。

如何构建或重写此示例以使其不违反封装?

0 个答案:

没有答案