关于领域模型的错误处理问题

Hi banq:
当我建立领域模型的时候,我对错误处理方案比较疑惑,先建立一个用例吧:
用户注册:我建立了一个UserService类,并写如下方法:
void Register(string name){
//验证用户名是否合法
//验证用户名是否已经存在
//new User(name);
//设置未激活,生成激活码
//发送激活邮件

我现在疑惑是在,我验证用户名,验证用户名是否存在,我需要throw一些错误,但我觉得throw 不友好,只要一出错就throw了,Action里面要去Try catch,而且这些错误我需要在web页面上去绑定到指定的Input,我需要一个Hash去存储它,我不希望用户去做多次尝试,而每次尝试只返回一个错误信息。业务层是不是可以通过out ErrorInfo这样的参数,去返回所有的错误列表。

还有一个问题是:Rich Domain Model设计下,ChangePassword这样一个业务,应该属于Domain Object吧,但我同样,改变后要发送邮件,我目前是在UserService里面加了方法,ChangePassword().问题来了,我觉得这个地方ChangePassword方法既存在于Domain Object,又存在Service,Web开发人员在Action里面很疑惑,他通过Session得到了Domain Object对象,里面就有了ChangedPassword,为什么不能调用,而要去通过Service调用