关于对象字段验证

Mar 16, 2009 at 4:04 AM
Edited Mar 16, 2009 at 4:06 AM
提一个建议:
关于对象属性的验证
例如有一个User定义如下。
public abstract class User : LinqObjectModel<User>{
public abstract string Name{get;set;}
public abstract string Pwd{get;set;}
}
我需要验证用户名和密码都不为空
User user=User.New();
user.Validate();
如果用户是英文的,那么提示 Invalid Field Name , Not Allow Null
是不错,但是,由于Name 来自于属性名 
在非英语的应用中,提示将不是那么友善了。

应该提供一个类似enum 的 ShowStringAttribute 的功能:)

这样也许会更好一些。
----------------------------------------------------
虽然也可以把User定义成中文
public abstract class User : LinqObjectModel<User>{
public abstract string 用户名{get;set;}
public abstract string 密码{get;set;}
}

但是一般编码中,好像不是很提倡这种做法...
使用中文来做属性名,貌似还会带来不必要的"被人鄙视"~


Mar 16, 2009 at 8:47 AM
他的意思是把Validate生成的提示“国际化”
Mar 16, 2009 at 8:55 AM
其实这样国际化的意义不是很大,因为有时候我们一个字段不允许为空,需要的提示并不一定是“对不起用户名不允许为空”,也许是别的。
比如,同时两三个字段都为空,我们可能才需要提示什么东西,提示的这个东西也许不包含字段名,反正实际是很复杂的。
因此,怎样根据Validate之后的信息综合计算,并得到你想要的提示,这是一个复杂的课题。我个人认为。
Mar 16, 2009 at 9:01 AM
Edited Mar 16, 2009 at 9:18 AM
我觉得一种解决方案也许应该是,把validate生成的东西返回成一个“错误对象列表”。在这个对象里面我可以遍历到那些字段是不符合非空要求,哪些字段不符合长度要求,哪些字段不符合unique要求。然后让用户根据这个错误对象来自己生成一定的“错误提示语言”,然后这些错误提示语言里面可以套用“内定的模板”,还要考虑国际化啥的,可以自己“定义模板”也可以提取某个字段的“ShowStringAttribute”(ikk说的)。。。反正满复杂的哈~
Coordinator
Mar 16, 2009 at 1:52 PM
ikk的提议还是不错的,虽然要完全解决i18n确实是很复杂的说。。
Coordinator
Mar 16, 2009 at 3:05 PM
This discussion has been copied to a work item. Click here to go to the work item and continue the discussion.
Mar 17, 2009 at 1:55 AM
sipo说复杂情况可以重写Validate来实现,但是一般情况下,还是使用简单验证的多~