相信大家或多或少都有去公家机关办事的经验。去公家机关办事时,如果等待时间拖太久,肯定觉得很烦吧?好不容易等到了,这时万一办事员再来一句:「资料不足,回家补足再来!」哇,一下午就这样去了!「资料不足这种小事,早点跟我说不行吗?」离开时口中不自觉唠叨的经验,肯定也不少有吧?
号码牌示意图,图片截自虾皮购物
今天我们要来实际预演一下,看看在收到一个需求後,到底要怎麽安排 Clean Architecture 的四层架构。
程序,就是让电脑去解决你真实世界发生的问题。而根据引用的不同理论,或是使用了不同的设计方式,解决的方式也不同。譬如「物件导向」程序,则是试图将真实世界参与一件事情的人事物,都用「物件与物件间的互动」来模拟。我知道很抽像。没关系,最好理解抽象描述的方法就是举例!
我们回到许久不见的教务处。在几十年前没有电脑的年代,人们是怎麽「申请奖学金」的?假设你准备要申请奖学金了,你在家填好申请单,走进教务处,接下来发生的事会有哪些?我们来试着在脑中演练一下…
首先,门口会有一位工读生上前招呼,并且询问你的来意。在了解你的来意後,会先检查你的申请表是否有确实填写,以免你因为一些资料不完整而被退件,浪费教务处专员的时间,以及,当然,你的等待时间。
接着,工读生会引导你去一个写着「奖学金申请」的柜台前椅子上坐下来排队等候。等轮到你时,负责的专员会叫你的名字,请你上前办理。专员会接过你的申请单,接着做一连串动作:
在以前没有电脑的年代,(我猜想)学校的教务处就是这麽处理「申请奖学金」的工作的。
回到现代,我们的物件导向程序该怎麽模拟上述的流程?该创建哪些物件?这些物件又该被放在 Clean Architecture 的哪一层?以下是笔者自己的分析结果,各位可以参考一下:
登场人物 | 任务 | 物件名 | 分层 |
---|---|---|---|
工读生 | 询问来者意图,初步检查文件完整性,为其带路,找到合适的专员 | ApplyScholarshipController | Adapter |
申请书 | 写着申请资料,专员审核时可以参考 | ApplicationForm | UI/Adapter |
「奖学金申请」专员 | 控管流程,根据申请书的资料,向档案管理员索取资料,依规定审核後填写正式记录 | ApplyScholarshipService | Use Case |
档案管理员 | 依专员需求,找出资料或储存资料 | ScholarshipRepository | Use Case / Adapter |
「奖学金申请」正式记录 | 记载此申请的官方资料与核心运算(如有需要) | ScholarshipApplication | Entity |
档案柜 | 存放档案 | - | DB |
上述是笔者针对真实世界的案例,分析出的一些重要物件、其主要任务,与其在 Clean Architecture 阶层架构中的所在位置。
下一篇起,我们会从 Interface Adapter 开始,一层一层地往下实作与测试,大致上会依照上表的规划,但如有需要修正或重构,将会当场修正。
谜之声:「人生如戏,戏如人生。」
ithelp2021
>>: JavaScript Day 13. forEach()
IECookiesView 02 好,昨天学了 IE 饼乾的大略简介,今天来看比较详细的介绍: 如何...
前言,今天写一写就离题了QQ,前面用ktor架websocket,在手机app接起来,复习一下cha...
前言 本文说明如何进行Scanners查询特定日期盘中或是盘後交易相关资料(当日涨(跌)幅排行、当日...
Traces - 观察应用程序的效能瓶颈 系列文章 (1/6) - Elastic APM 基本介绍...
所以我说...程序是虾饺? 程序是可以直接在电脑上执行,以完成某个目的或任务的一连串指令 换句话说,...