不知何故,这些年来我一定忽略了“告诉,不要问”OOP 原则,因为我几天前才第一次了解它。
但是上下文是关于验证代码的讨论,该代码已从 ASP.NET Web 表单页面移到数据/业务对象中,并且没有“Validate()”方法,只是一个本身进行验证的保存方法和(据说)引发了异常。我问为什么要这样设计,我被引导到 OOP 的“告诉,不要问”原则,这是我从未听说过的,所以我们一起研究了 Google,我立即受到了教育。;)
仍然,有些东西闻起来不对劲,是否应该在数据从用户手中转移到处理和/或收集数据的业务层之前对其进行清理,而不是反过来?我很困惑这如何促成好的设计。
似乎“告诉,不要问”的规则与您不应该向目标对象询问目标对象状态的想法有关,并且该原则从未真正适用于传递给目标对象。