假设我需要在我的系统中注册用户。
商业规则是:
- 电子邮件应该是唯一的(一种身份);
- 名称不应为空。
看起来我需要服务。
大概是这样的:
public interface RegistrationService {
bool Register(String email, String name);
}
在我必须向用户返回失败原因之前,这很好。如何处理?
我可以看到几个选项(但我不喜欢其中任何一个):
实现一种结果对象:
public interface RegistrationService { RegistrationResult Register(String email, String name); } 公共接口 RegistrationService { bool Succes(); 错误[] 错误();用户新用户();}
很好,甚至可能对 REST api 有用。但是是不是太麻烦了(特别是考虑到可能应该在工厂检查空白名称)?
抛出异常
公共接口 RegistrationService { void Register(String email, String name) throws RegistrationError; }
它看起来更准确一些。但例外是昂贵的。像这样使用它们看起来是个坏主意。
- 使用数据库约束。但它看起来比(2)更混乱。