from: 字节跳动-内部课程(掘金)
author: June
created: 2023-07-31 14:57
上次课程的项目实践没来得及消化,趁热打铁续上这波“社区话题”小工程,主要是根据课程内容实践学会对应自己学习过的理论知识,有的放矢。
需求分析:描述、用例、E-R图
- 需求的作用:在任何软件开发活动中,第一步都是调查、确定需求。软件需求是软件开发的工作基础。
- 需求发现的几种方式:自悟 Introspection,交谈 Individual interviews,观察 Observation,小组会 Group session,提炼 Extraction。
- E-R图这块一般使用UML进行描述,UML是一种可视化语言,用于规约系统的制品,构造系统的制品,很适合作为系统分析和设计的工具。我一般使用plantuml( plantuml.com/zh/use-case… )这个网站的工具进行绘图,这里推荐给大家。
代码设计:结构设计(分层结构:数据层、逻辑层、视图层)
- 代码设计这里进行了分层的结构设计,分层思想是应用系统里最常见的一种架构模式。将系统进行横向切割,根据业务职责划分,以此实现了代码分层。可以规范软件系统的逻辑结构,便于开发,也便于后期的维护。
组件工具:Gin(Web框架)、Mod依赖管理
- 在代码设计结束后,就需要考虑实现,为了避免重复“造轮子”,还需要了解常见的组件工具,这里使用了Go的Web框架--Gin和依赖管理--之前介绍的Mod。我们在使用其他语言时也要考虑类似的事情,避免无谓重复,站在巨人肩上。
代码实现:
- 数据层(Topic、Post对应的结构体),如何实现查询:Index,用map实现,这里重点是常见数据结构的使用,类似C++的STL。同时这里的查询sync. once 是设计模式里单例模式的实现,使用经典的设计模式 Design Pattern 也是我们站在巨人肩上的另一种方式。这里提一下单例模式 Singleton Pattern,保证一个类仅有一个实例,并提供一个访问它的全局访问点,可以解决一个全局使用的类频繁地创建与销毁的问题。
- 服务层:定义实体,分析流程(参数校验、准备数据、组装实体),这里的错误处理需要注意。同时关键点:并行,分析流程是否可以并行,以提高执行效率;前面的课程也学习了Go的协程使用。
- 视图层:构建业务对象,分析业务错误码
- Router,Web服务的引擎配置。
运行与测试
- 前面的课程已经介绍了测试的重要性,软件测试是检测和评价软件以确定其质量的过程和方法,即评价软件或程序的属性和能力,以确定它是否满足所需结果的过程与方法。对于该项目,我们可以尝试进行单元测试,通过后我们可以进行系统测试:功能、恢复、安全性、强度、性能、可用性、部署(配置)。