goft
  • gin脚手架使用文档
  • 所需环境
  • 建议的目录结构
  • 配置
  • 最简单的启动代码
  • 出错跟踪
  • 自定义错误展示
  • 覆盖系统内置异常处理
  • 路由
    • 路由写在一个文件里
    • 常规设置
  • 控制器
    • 控制器形式
    • 控制器方法
    • 控制器方法不想返回值
    • 输出JSON
    • 获取请求对象
  • 全局中间件
    • 基本定义
    • 注册中间件
    • 示例1:判断token参数
    • 示例2:修改响应内容
    • 跨域中间件
  • 路由级中间件
    • 基本定义
    • 示例:参数验证和业务分离
  • 依赖注入
    • 基本定义
    • 注册依赖配置
    • 基本使用
    • 注入Gorm和XOrm
  • 精简版领域驱动
    • 基本说明和概念
    • 基本分层
    • 领域层
    • 领域层之实体
    • 领域层之值对象
    • 领域层之仓储
    • 领域层之聚合
    • 领域服务层
    • 应用层(application)
    • 应用层之DTO
    • DTO和实体映射
    • 应用层之应用服务层
    • 代码落地
由 GitBook 提供支持
在本页
  • 用来描述一个事物的特征,没有唯一标识的对象
  • 来个示例:

这有帮助吗?

  1. 精简版领域驱动

领域层之值对象

用来描述一个事物的特征,没有唯一标识的对象

譬如用户的QQ、手机等。其实除了唯一标志,其他任何字段都可以是值对象

值对象有2个重要原则

1、实体只能通过ID(唯一标识) 来判断两者是否相同

2、而值对象。只需根据“值”就能判断两者是否相等

不可变的特性

修改值对象。必须传入新对象

来个示例:

首先这是实体 -- 用户实体

type UserModel struct {
   UserId int `gorm:"column:user_id;primary_key;auto_increment" json:"user_id"  xorm:"'user_id'"`
   UserName string `gorm:"column:user_name" json:"user_name" xorm:"'user_name'"`
   Extra *valueobjs.UserExtra   `gorm:"embedded"`//值对象
 
}

这是值对象-- 用户值对象,包含了QQ、手机等

type UserExtra struct {
   UserPhone string `gorm:"column:user_phone" json:"user_phone" xorm:"'user_phone'"`
   UserQQ string `gorm:"column:user_qq" json:"user_qq" xorm:"'user_qq'"`
   UserCity string `gorm:"column:user_city" json:"user_city" xorm:"'user_city'"`
}

在这里面,假设userid 是唯一标识

那么

user1:=&UserModel{UserId:101,UserName:"lisi"}

user2:=&UserModel{UserId:102,UserName:"lisi"}

这两个实体,哪怕都叫lisi。但是ID不同,所以这两个实体是不一样的

但是如果这两个实体的QQ、手机和所在城市都一样,那么可以认为这两个用户实体的“Extra值”是一样的

上一页领域层之实体下一页领域层之仓储

最后更新于4年前

这有帮助吗?