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

上海知名网站引流app推广软件

上海知名网站,引流app推广软件,晋江市住房与城乡建设局网站,少儿编程十大骗局假设一个触发器 Trigger ,在 v1 版本中只有 Polling Trigger (是一种通过轮询的方式的触发器),领域对象是这样设计的。 type Trigger struct {base TriggerBase // 基本属性... // 其他属性extra TriggerExtra // 扩展属性,包含了 Polling Tr…

假设一个触发器 Trigger ,在 v1 版本中只有 Polling Trigger (是一种通过轮询的方式的触发器),领域对象是这样设计的。

type Trigger struct {base TriggerBase // 基本属性... // 其他属性extra TriggerExtra // 扩展属性,包含了 Polling Trigger 的特定属性
}

如果在 v2 版本中,需求要求添加一个 Instant Trigger (即时触发器),具备与 Polling Trigger 不同的特定属性。

我们需要在 TriggerExtra 结构体中继续添加 需要的字段吗?显然感觉怪怪的,我们从设计模式的角度来分析一下。

extra 字段存在的不合理性

  1. 违反开闭原则
    extra 作为扩展值对象,在进行扩展时,需要对 TriggerExtra 结构体进行修改。
  2. 违反单一职责原则
    extra 字段包含了一些不相关的属性。如 Polling Trigger 和 Instant Trigger 两者的不相关属性,以后扩展可能会变得更多。这些属性被统一放在 extra 字段中,它所承担的责任过多。

解决方案

  1. 可以通过「继承」的方式。
type Trigger struct {base TriggerBase // 基本属性
}type PollingTrigger struct {Triggerpolling PollingConfig
}type InstantTrigger struct {Triggerinstant InstantConfig
}

这样就解决问题了。在进行不同版本的扩展时,无需修改原有的代码,只需扩展需要的代码即可。
但 go 并不鼓励继承,子类和父类具有强耦合性。

  • 继承复用破坏了包装,因为父类的实现细节会暴露给子类。比如子类可以访问父类的成员变量等,一旦父类的这些变量定义发生变化,子类就可能会失败。
  • 如果父类的实现发生改变,那么子类的实现也不得不发生改变。
  1. 「组合复用」
    也叫 聚合复用。
    将扩展的字段替换为抽象的接口。
type Trigger struct {base TriggerBasetypeSpecific TypeSpecificConfig
}type TypeSpecificConfig interface {TriggerType() TriggerTypeValidate() errorString() string
}type PollingConfig struct {pollingInterval   time.DurationmaxRetries        intretryDelay        time.Duration
}func (c PollingConfig) TriggerType() TriggerType {return TriggerTypePollingTrigger
}func (c PollingConfig) Validate() error {if c.pollingInterval <= 0 {return errors.New("polling interval must be positive")}// 其他校验return nil
}func (c PollingConfig) String() string {s, _ := json.Marshal(c)return s
}type InstantConfig struct {webhook   string
}func (c InstantConfig) TriggerType() TriggerType {return TriggerTypeInstantTrigger
}func (c InstantConfig) Validate() error {if len(c.webhook) == 0 {return errors.New("webhook settings required")}// 其他校验return nil
}func (c InstantConfig) String() string {s, _ := json.Marshal(c)return s
}

为什么要使用「组合复用」,或者说它的收益在哪?

  1. 代码可复用,可以组合多个类对象,可以直接使用子对象的方法。
  2. 降低耦合度。类的继承是一种强耦合的方式,特别是如果继承的关系比较深,这种耦合度会更加严重。
  3. 可扩展性。我们可以根据需求不断增加新的成员,让系统更加灵活和可扩展。
http://www.dtcms.com/wzjs/127680.html

相关文章:

  • 花瓣是模仿哪个网站发布软文网站
  • 厦门网站建设公司排名互联网平台推广是什么意思
  • 邢台建设网站免费优化
  • 广西翔路建设有限责任公司网站模板建站哪个平台好
  • 网站策划需要什么能力百度模拟点击软件判刑了
  • 淘宝做网站怎么在网上做广告
  • 衡水网页网站建设域名权重查询
  • 怎么让网站被收录手机优化器
  • 毕业设计餐饮网站建设网推什么意思
  • 开平网站建设游戏推广拉人渠道
  • 网站营销有哪些百度收录提交入口地址
  • wordpress网站响应速度插件杭州网站优化企业
  • 大港网站开发有做网站的吗
  • 网站流量查询平台淘宝seo搜索排名优化
  • 开源网站建设运营推广的方式和渠道有哪些
  • ppt做视频模板下载网站有哪些天津关键词优化专家
  • 北京网站制作策划外贸推广代理
  • 长春企业建站平台微信推广软件哪个好
  • 网站制作需要注意什么男生最喜欢的浏览器
  • 如何撰写一个网站规划建设方案最新国际新闻
  • 网站建设管理员角色设置企业网站有哪些功能
  • 海南省住房公积金管理局网上办事大厅深圳百度推广优化
  • 湖南网站推广建设公司深圳seo优化外包
  • 家里电脑可以做网站服务器吗快速建网站
  • 网站上传文件存储方式广告推广平台代理
  • 企业网站的建设要注意哪些方面seo搜索引擎优化技术教程
  • 免费建设公司网站外贸平台自建站
  • 广州网站seocps推广
  • 二级网站的建设方案seo排名优化公司
  • 南昌做网站公司哪家好安装百度到手机桌面