【kratos入门实战教程】番外篇之充血模型(1)

欢迎 star

仓库地址:https://github.com/go-kratos/kratos

前情回顾

在前篇文章中提到了充血模型和贫血模型的概念,本篇文章将会讨论充血模型在注册/登陆业务中的应用,分析充血模型是如何分离业务和策略的。如果读者对充血模型、贫血模型等概念不熟悉,建议先翻阅相关的资料,对相关概念有大致的轮廓会对读者更有帮助。

开干

登陆业务流程分解

业务流程只是一个需求实现的大致流程,到了具体实现的时候还会有其他的操作流程的。一般的登陆认证流程大致能抽象成如图所示的流程: 在这里插入图片描述 但是回顾我们在biz层实现的时候,还做了参数校验、获取用户信息、加密密码等操作。这种就属于是流水账式的编程,在业务简单的时候可以这样一把梭。但是业务复杂的时候,一个方法就会很庞大,代码就会很臃肿,维护起来也会很困难。

让实现流程更接近业务流程

目前的贫血模型实现的流程如下: 在这里插入图片描述 从图中可以看出,其实很接近业务的流程了。接下来开始改造代码,我们实现充血模型代替目前的贫血模型。如下所示: 在这里插入图片描述

登录参数封装成对象

我们在biz里添加一个LoginRequest的对象,用来封装登录的参数。对象的属性是私有的,通过提供的构造方法来构造对象。然后参数的校验逻辑就可以前置到对象的构造方法中,如下所示:

type LoginRequest struct {
   
 username string
 password string
}

func NewLoginRequest(username, password string) (*LoginRequest, error) {
 // 校验参数
 if username == "" {
  return nil, fmt.Errorf("用户名不能为空")
 }
 if password == "" {
  return nil, fmt.Errorf("密码不能为空")
 }
 return &LoginRequest{
  username: username,
  password: password,
 }, nil
}

引入用户领域对象

参考DDD的设计,我们把

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值