我正在尝试将 ddd 概念应用于我的 go 项目
然后我有一个带有嵌套结构的实体,如下所示:
type Person struct {
Id string
Name valueObject.Name
Email valueObject.Email
Password valueObject.Password
Created time.Time
Updated time.Time
}
func NewPerson(name valueObject.Name, email valueObject.Email, password valueObject.Password) *Person {
return &Person{
Id: "a",
Name: name,
Email: email,
Password: password,
Created: time.Now(),
Updated: time.Now(),
}
}
我所有的对象值都具有与此类似的结构:
type Email struct {
address string
}
func NewEmail(address string) (Email, error) {
isValid := valid(address)
if !isValid {
return Email{}, ErrEmail
}
return Email{address}, nil
}
func (e Email) Value() string {
return e.address
}
func (e Email) Format() string {
return strings.TrimSpace(strings.ToLower(e.Value()))
}
func (e Email) Equals(e2 Email) bool {
return e.Value() == e2.Value()
}
然后因为我有一个嵌套的结构,我想创建一个 ToJSON 函数来返回我的数据,我还需要排除一些作为密码的返回:
type personJson struct {
id string
name string
email string
createdAt time.Time
updatedAt time.Time
}
func (p *Person) ToJSON() personJson {
email := p.Email.Value()
name := p.Name.FullName()
person := personJson{id: "dasdas", email: email, name: name, createdAt: p.Created, updatedAt: p.Updated}
return person
}
但随后在我的控制器中我尝试访问它,或者当我返回此 ToJSON 时总是以 {} 形式出现:
type createPersonDTO struct {
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
Password string `json:"password"`
Email string `json:"email"`
}
func (*PersonController) CreateNewPerson(ctx *fiber.Ctx) error {
var dto createPersonDTO
if err := ctx.BodyParser(&dto); err != nil {
return utils.CtxError(ctx, http.StatusUnprocessableEntity, err)
}
email, err := valueObjects.NewEmail(dto.Email)
if err != nil {
return utils.CtxError(ctx, http.StatusUnprocessableEntity, err)
}
name, err := valueObjects.NewName(dto.FirstName, dto.LastName)
if err != nil {
return utils.CtxError(ctx, http.StatusUnprocessableEntity, err)
}
password, err := valueObjects.NewPassword(dto.Password)
if err != nil {
return utils.CtxError(ctx, http.StatusUnprocessableEntity, err)
}
person := entities.NewPerson(name, email, password)
return ctx.Status(http.StatusOK).JSON(person.ToJSON())
}
我的 res.body 总是一个空的 json
将要导出到的结构的每个字段的第一个字母大写json.Marshal
:
type personJson struct {
ID string
Name string
Email string
CreatedAt time.Time
UpdatedAt time.Time
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句