美文网首页
设计原则练习-积分兑换系统

设计原则练习-积分兑换系统

作者: 西山薄凉 | 来源:发表于2020-03-29 22:56 被阅读0次

需求分析

技术人也要有一些产品思维。
对于产品设计、需求分析,我们要学会“借鉴”,一定不要自己闷头想。一方面这样做很难想全面,另一方面从零开始设计也比较浪费时间。
除此之外,我们还可以通过线框图和用户用例来细化业务流程,挖掘一些比较细节的、不容易想到的功能点。

系统架构设计

面向对象设计聚焦在代码层面(主要是针对类),那系统设计就是聚焦在架构层面(主要是针对模块),两者有很多相似之处。
很多设计原则和思想不仅仅可以应用到代码设计中,还能用到架构设计中。
实际上,我们可以借鉴面向对象设计的步骤,来做系统设计。
面向对象设计的本质就是把合适的代码放到合适的类中。合理地划分代码可以实现代码的高内聚、低耦合,类与类之间的交互简单清晰,代码整体结构一目了然。类比面向对象设计,系统设计实际上就是将合适的功能放到合适的模块中。合理地划分模块也可以做到模块层面的高内聚、低耦合,架构整洁清晰。
在面向对象设计中,类设计好之后,我们需要设计类之间的交互关系。类比到系统设计,系统职责划分好之后,接下来就是设计系统之间的交互了。

业务开发

业务开发包括:接口设计、数据库设计和业务模型设计(也就是业务逻辑)。

为什么要分 MVC 三层开发?

1. 分层能起到代码复用的作用

同一个 Repository 可能会被多个 Service 来调用,同一个 Service 可能会被多个 Controller 调用。比如,UserService 中的 getUserById() 接口封装了通过 ID 获取用户信息的逻辑,这部分逻辑可能会被 UserController 和 AdminController 等多个 Controller 使用。如果没有 Service 层,每个 Controller 都要重复实现这部分逻辑,显然会违反 DRY 原则。

2. 分层能起到隔离变化的作用

分层体现了一种抽象和封装的设计思想。比如,Repository 层封装了对数据库访问的操作,提供了抽象的数据访问接口。基于接口而非实现编程的设计思想,Service 层使用 Repository 层提供的接口,并不关心其底层依赖的是哪种具体的数据库。当我们需要替换数据库的时候,比如从 MySQL 到 Oracle,从 Oracle 到 Redis,只需要改动 Repository 层的代码,Service 层的代码完全不需要修改。
除此之外,Controller、Service、Repository 三层代码的稳定程度不同、引起变化的原因不同,所以分成三层来组织代码,能有效地隔离变化。比如,Repository 层基于数据库表,而数据库表改动的可能性很小,所以 Repository 层的代码最稳定,而 Controller 层提供适配给外部使用的接口,代码经常会变动。分层之后,Controller 层中代码的频繁改动并不会影响到稳定的 Repository 层。

3. 分层能起到隔离关注点的作用

Repository 层只关注数据的读写。Service 层只关注业务逻辑,不关注数据的来源。Controller 层只关注与外界打交道,数据校验、封装、格式转换,并不关心业务逻辑。三层之间的关注点不同,分层之后,职责分明,更加符合单一职责原则,代码的内聚性更好。

4. 分层能提高代码的可测试性

后面讲单元测试的时候,我们会讲到,单元测试不依赖不可控的外部组件,比如数据库。分层之后,Repsitory 层的代码通过依赖注入的方式供 Service 层使用,当要测试包含核心业务逻辑的 Service 层代码的时候,我们可以用 mock 的数据源替代真实的数据库,注入到 Service 层代码中。代码的可测试性和单元测试我们后面会讲到,这里你稍微了解即可。

5. 分层能应对系统的复杂性

所有的代码都放到一个类中,那这个类的代码就会因为需求的迭代而无限膨胀。我们知道,当一个类或一个函数的代码过多之后,可读性、可维护性就会变差。那我们就要想办法拆分。拆分有垂直和水平两个方向。水平方向基于业务来做拆分,就是模块化;垂直方向基于流程来做拆分,就是这里说的分层。

BO、VO、Entity 存在的意义是什么?

从设计的角度来说,VO、BO、Entity 的设计思路并不违反 DRY 原则,为了分层清晰、减少耦合,多维护几个类的成本也并不是不能接受的。但是,如果你真的有代码洁癖,对于代码重复的问题,我们可以通过继承或者组合来解决。

相关文章

  • 设计原则练习-积分兑换系统

    需求分析 技术人也要有一些产品思维。对于产品设计、需求分析,我们要学会“借鉴”,一定不要自己闷头想。一方面这样做很...

  • 遵从设计原则的积分兑换系统

    我们把积分赚取和消费的渠道和规则的管理维护工作,划分到了上层系统中,所以,积分系统的功能变得非常简单。 1 业务开...

  • 电商测试点总结

    电商测试点 积分兑换:纯积分兑换 OK、积分商品需要运费 fail、积分+钱商品的兑换(页面显示)fail、虚拟商...

  • 积分兑换简书钻调整计划公告

    简书于11月9日0时开放“积分兑换简书钻”,系统为每一位用户自动兑换了1个简书钻,剩余的积分需要手动兑换。 12月...

  • 各大所有银行信用卡积分兑兑换

    一、积分兑兑换是什么? 积分兑兑换是一个能将信用卡积分兑换成现金的平台。 二、如何将我的积分兑换成现金? ① 登陆...

  • 用户体系搭建(三)——积分价值计算

    1、积分概述 积分定义:**积分是用户行为产生的分数系统,是衡量用户活跃度和粘性的指标,积分可以兑换延展权益;同时...

  • 电商平台积分兑换系统设计

    业务需求描述 1.用户在电商平台里通过购买商品、晒单评论可以有不断的积累积分;2.积累到足够的积分后,可以在电商平...

  • 积分儿变钻,华丽转身

    简书公告,积分儿下架,钻石系统正式出台。 我就想啊,积分儿兑换钻石,是不是像银行一样兑换成黄金呢?那东西能升值啊!...

  • 滴滴会员体系

    滴滴会员等级及特权 1,积分会员 特权:积分兑换 2,白银会员 特权:积分兑换、生日红包 3,黄金会员 特权:积分...

  • 联盟积分需求说明

    联盟积分可在真芯天下商城兑换商品。UT=联盟积分,联盟积分可通过账户币种进行一定的比例兑换,该比例由后台配置。兑换...

网友评论

      本文标题:设计原则练习-积分兑换系统

      本文链接:https://www.haomeiwen.com/subject/sompuhtx.html