# 领域服务层

**基本概念**

&#x20;  实现特定于某个领域的任务。当某个操作”不适合”放在聚合（实体）或值对像上时，那么可以使用领域服务 &#x20;

**操作内容**

1、操作多个聚合根

2、也可以调用仓储层

3、代码可以相对灵活一些

4、命名一般要能直接描述出该代码业务的功能

譬如我们认为（**也许你不这么认为**）用户登录这块不方便放在聚合方法中

#### 于是编写一个领域服务

```
type UserLoginService struct {
   userRepo repos.IUserRepo
}
func(this *UserLoginService) UserLogin(userName string,userPwd string ) (string,error)  {
    user:=this.userRepo.FindByName(userName)
    if user.UserId>0{ //有这个用户
      if user.UserPwd==utils.Md5(userPwd){
         //记录登录日志
         return "1000200",nil
      }else{
         return "1000400",fmt.Errorf("密码不正确")
      }
    }else{
      return "1000404",fmt.Errorf("用户不存在")
    }
}
```

还是那句话，领域驱动根据业务不同 允许有不同的理解
