2012-07-04 23 views
2

我一直在使用游戏1.2.5rc4开发一个应用程序,我发现了一个有趣的游戏行为。请看下面的代码:玩!和模型验证

User user = new User(some attributes...); 
boolean userSaved = user.validateAndSave(); 

在通话过程中,以新的用户我添加使用validation.addError()方法验证错误。然后我期望在validateAndSave()期间返回false,因为验证已经包含错误。但事实并非如此。我想知道这是一个错误还是功能。我的意思是,任何人都可以想到一些用例,这种行为会有用吗?

另一个问题是,为什么validateAndSave()不是默认的save()方法?我希望如果我调用user.save()它不会保存违反约束的用户,但显然它(我有一个例子,其中违反@Unique约束的用户插入到数据库中)。任何想法为什么这可能是有用的?如果将方法save()的行为设为validateAndSave(),然后使用方法saveWithoutValidation()?我可以看到导致许多问题的方法的当前命名。

+0

请修复上面的代码。你在那里“User.validateAndSave()”,但它可能应该是“user.validateAndSave()”...只是为了在这里在stackoverflow;) –

+0

谢谢,错字固定;) – Laky

回答

2

验证并保存不会查看现有的验证对象,而是验证您要验证的特定对象。

你的第二个问题是因为你可能有一些验证,这是特定于你的一个屏幕设计,但也许在管理员屏幕上,你想有不同的业务规则。在任何时候强制对象都是正确的,这对开发者来说是一个限制,不应该被框架强制。

+0

是的,这就是我注意到。除了检查validation.hasErrors之外,还有什么方法可以使它考虑以前的错误吗? – Laky

+0

而且我不确定我是否理解为什么您想要验证模型更改,具体取决于您处于管理员屏幕还是正常屏幕。当然,如果你对你的数据设置了限制,你希望在任何地方都遵守它们。它不会强迫,你仍然可以保存没有验证,我只是想,当你保存模型时,你可能希望它是有效的。如果我错了,请纠正我,我总是乐于学习新的东西。 – Laky

+0

我认为这是个人喜好的问题,开发人员不想强制执行某种特定的风格。 – Codemwnci