gpt4 book ai didi

oop - "tell, don' t询问“是否适用于用户输入验证?

转载 作者:行者123 更新时间:2023-12-04 15:52:05 25 4
gpt4 key购买 nike

这些年来,我肯定以某种方式忽略了“告诉,不要问” OOP原则,因为我是几天前才第一次了解它。

但是上下文是关于已从ASP.NET Web表单页面移到数据/业务对象中的验证代码的讨论,并且没有“Validate()”方法,只有一个保存方法自己进行验证和(据说)提出了一个异常(exception)。我问为什么要这样设计,然后我被我从未听说过的OOP的“告诉,不要问”原则,于是我们一起看着Google,我立刻就受到了教育。 ;)

还是有些东西不对劲,难道不应该在将数据从用户手中转移到处理和/或收集数据的业务层之前对数据进行清理,而不是反过来吗?我对这如何使好的设计感到困惑。

似乎“告诉,不要问”的规则与您不应该向目标对象询问目标对象的状态有关,并且该原理从未真正适用于传递给数据对象的数据。目标对象。

最佳答案

我同意AviewAview,但只会在用户告诉(而不是他询问)时抛出异常:

public Foo
{
bool Validate(Baz bar)
{
if(!is_number(bar)) return false;
return true;
}

AssignBar(Baz bar)
{
if (!Validate(bar)) throw numberexception();
}
}

告诉:
try
{
foo.AssignBar(bar);
}
catch(numberexception e)
{
alert('Not a number!');
}

问:
if (foo.Validate(bar)
{
foo.AssignBar(bar);
}
else
{
alert('Not a number!');
}

因此,AssignBar期望使用VALID条,如果不是,则会引发异常,但我们还提供了Validate的方法,该方法不会引发异常。

关于oop - "tell, don' t询问“是否适用于用户输入验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com