# 领域层之仓储

形态上就是一个接口定义

```
type IUserRepo interface {
   FindById(IModel) error
   FindByName(IModel) error
   SaveUser(IModel) error
   UpdateUser(IModel) error
   DeleteUser(IModel) error

}
```

具体实现在其它层实现

小伙伴要想了，为啥要这么做？直接调Gorm直接干不完事了么？

确实，小项目或私活这样是可以的。

### 接下来举个栗子：

&#x20;    譬如做项目，如果用的是直接调用ORM。部门有个业务非常熟悉的人，可以写出很屌的业务代码。 但是 此时客户突然说数据库不能用mysql，要用sqlserver.(有的同学可能会说ORM支持数据库无缝切换的，那亲，你就太年轻了\~\~\~）

&#x20;    结果，这个 “业务非常熟悉的人“ 就得去学Sqlserver ，项目进度就要拖后。

&#x20;    而用了仓储后，他只要把接口定义好。然后“自说自话”的写业务代码就可以了。然后可以让其他会sqlserver的员工 来写接口实现。

从而实现了业务和数据持久化的解耦，从一定程度来说也是 “员工解耦”
