当前位置: 首页 > wzjs >正文

成都兼职建设网站旺道网站排名优化

成都兼职建设网站,旺道网站排名优化,wordpress 博客二号,微信网站模板下载背景 在我们日常开发中,不可避免的总要去进行各种参数校验,但是如果在某个场景中,要校验的字段非常多,并且在其中还有耦合关系,那么我们手写校验逻辑就变得非常的低效且难以维护。本篇文档就基于 DDD 领域模型设计的思…

背景

在我们日常开发中,不可避免的总要去进行各种参数校验,但是如果在某个场景中,要校验的字段非常多,并且在其中还有耦合关系,那么我们手写校验逻辑就变得非常的低效且难以维护。本篇文档就基于 DDD 领域模型设计的思想下,提供自动化的校验模型字段。

常见的字段校验方式

数据校验在业务逻辑代码中有着至关重要的作用,关系到整个后续业务是否可以正常运行。对参数的校验根据其具体业务逻辑与场景,可以分为字段校验、依赖校验、功能校验与逻辑校验四个部分。

字段校验

字段校验是最常见的校验类型。例如:商品名称不能超过多少个字符,商品状态必须是有效等。

func (e *Shop) ValidateShopName() error {if e.Name != nil && e.Name == "" {return errors.New("商品名称不能为空。")}if e.Name != nil && utf8.RuneCountInString(e.Name) > constant.MaxShopNameLength {return errors.Errorf("商品名称长度为 %d, 不能超过 %d ", utf8.RuneCountInString(e.Name), constant.MaxShopNameLength)}return nil
}

依赖校验

依赖校验,顾名思义是在业务逻辑中依赖了其他模块。例如,在创建商品信息时,要校验一下商品依赖的商家或供应商等信息是否合法。

func (e *Shop) ValidateMerchant() error {// 在此方法中可能需要进行外部调用或者查询 DB 的操作。if e.HasInvalidMerchant() {return errors.New("商家信息存在异常")}return nil
}

功能校验

功能校验例如用户是否有权限发布商品、商品信息是否与其他商品存在冲突等。

func (e *Shop) ValidateUserPermission() error {if e.UserCreateShopWithoutPermission() {return errors.New("用户无权限创建商品")}return nil
}

逻辑校验

逻辑校验主要是一些具体的业务逻辑。例如在下架商品时,校验是否有新用户下单等。

func (e *Shop) ValidateCloseShop() error{if e.InvalidShopStatus() {return errors.New("商品已下架")}if e.ExistShopTicket() {return errors.New("有正在进行的订单信息,无法下架")}return nil
}

上面我们列出来常见的四种校验方式,当我们在一个复杂且庞大的业务场景需要把各种各样的校验放在一起去校验时,我们不得不编写一个庞大的校验函数,把这些单点的校验函数聚合起来,更有甚者都没有进行子逻辑校验的函数区分,就是第一个大函数,把各种各样的校验逻辑代码写到一个函数中,那么长此以往,校验逻辑就会非常复杂,无法迭代。

func (e *Shop) ValidateCreateShop() error {if err = e.ValidateShopName(); err != nil {return err}if err = e.ValidateDescrption(); err != nil {return err}if err = e.ValidateImage(); err != nil {return err}if err = e.ValidateMerchant(); err != nil {return err}if err = e.ValidateUserPermission(); err != nil {return err}if err = e.ValidateCloseShop(); err != nil {return err}return nil
}

自动化校验

image-20250215164708771

type Validator struct {FieldNames			[]string		// 需要更新的字段ValidateNames		[]string		// 需要校验的字段列表ValidateFuncList	[]Func() error	// 校验函数列表
}func (v *Validator) Validate() error {for _, validate := range v.validateFuncList {if err := validate(); err != nil {return err}}return nil
}// GetFields2ValidateFuncMap 各个字段的校验函数在这里扩展,在调用 register 函数时,会自动注册
func (a *Aggregate) GetFields2ValidateFuncMap() map[string]func() error {return map[string]func() error {constant.ShopForCreate:		a.Shop.ValidateCreateShop,constant.ShopForUpdate: 	a.Shop.ValidateUpdateShop,constant.ShopCanStart:  	a.Shop.CanStart,// ... 等等各种校验都可以在这里定义一个聚合函数列表}
}func DTOToAgg(dto *DTO.Shop) (*shop.Aggregate, error) {baseShop := base.NewBaseShop()// 先把传参 model 转化成领域数据if err = copier.Copy(baseShop, dto); err != nil {return nil, errors.Wrap(err, err.Error())}// New 一个聚合类shopAgg := shop.NewShopAggregate(baseShop)// 获取本次传给领域对象的字段,以及加载要校验的字段setFields := GetSetOptionalFields(*dto)var validateName []stringfor _, field := range setFields {validateName = append(validateName, field)}shopAgg.SetUpdateFields(setFields)// 注册 validate 函数shopAgg.RegisterValidator(validateName)return shopAgg, nil   
}// 执行校验函数
func (v *Validator) ValidateMultipleFields(ctx context.Context) error {for _, validate := range v.validateFuncList {if err := validate(); err != nil {return err}}return
}
image-20250215165659841

简单来描述自动校验分为以下几个步骤:

  1. 在接收传参的转换函数中,先把本次请求传入的字段拿到,并且注册这些字段对应的校验函数。
  2. 进入到业务逻辑处理的函数中,再次增加一些当前业务场景需要的特殊校验函数。
  3. 依次执行校验函数,观察是否有报错。
http://www.dtcms.com/wzjs/409862.html

相关文章:

  • 2017电商网站建设背景平台运营推广
  • 营销策略的思路河南网站seo推广
  • 杭州高端网站开发搜狗站长平台打不开
  • 旅游药都网站建设方案seo是什么平台
  • 汕头网站关键排名网站开发技术有哪些
  • w3c标准网站网站搭建源码
  • 企业网站优化操作网站关键词优化方案
  • php做的网站怎么让外网访问专业提升关键词排名工具
  • 做彩票网站被捉将受到什么惩罚武汉seo公司出 名
  • 做ppt赚钱网站搜索引擎推广方案
  • 做网站还需要搜狗吗百度竞价推广点击器
  • 做一样的模板网站会被告侵权吗网站在线客服系统免费
  • 顺义哪里有做网站设计的潍坊网站模板建站
  • 有没有专门做二手的网站网站平台搭建
  • 珠海响应式网站建设费用怎么在百度做宣传广告
  • 网站备案 中国怎么弄一个自己的网址
  • 建设银行苏州网站windows优化大师是官方的吗
  • 做采集网站赚钱南宁关键词排名公司
  • 做彩票预测网站违法吗百度电脑版官网入口
  • 做购物商城网站建设如何做好市场推广
  • 主机屋怎么做网站网站的seo如何优化
  • wordpress图片压缩软件海会网络做的网站怎么做优化
  • 做的好的手机网站有哪些内容媒体资源网官网
  • 标书制作教程视频网站珠海网站seo
  • 网站建设应考虑哪些方面的问题上海广告推广
  • 携程做旅游的网站营业推广促销
  • 免费建网站教程郑州seo网站排名
  • 网站开发中点赞怎么做到的江东seo做关键词优化
  • 石岩网站建设怎样注册网站建立网页
  • 企业网站 html模板下载如何快速推广自己的网站