1、UserService中的入口:
public bool Login(string email, string password) { var user = _userRepository.Find(x => x.Email.ToLower() == email.ToLower()).FirstOrDefault(); if (user == null) { throw new ApplicationServiceException("no such user"); } if (!user.Login(password)) { return false; } _userRepository.Update(user); Context.Commit(); return true; }第一部分代码我们可以认为通过Email来获取User领域模型,读取到领域模型后调用user.Login()方法。这同样说明了这样一个事实:Service层没有任何业务逻辑,所有的逻辑都应该在Domain。
2、User领域模型中的Login实现:
public bool Login(string password) { Contract.Requires(!password.IsNullOrEmpty(), "password can not be empty"); var hashedPassword = new Password(Password, Salt); if (hashedPassword.IsCorrectPassword(password)) { LastLoginDateTime = DateTime.Now; return true; } return false; }正如你所见:这些逻辑反应出了一个用户登录的实际逻辑是什么,而这些逻辑全部都应该归属于Domain。
整个方案代码提供下载:https://git.oschina.net/richieyangs/MvcTests.BestPractice.git