意识到有问题时,首先寻找有没有专案遇到同样的问题——有使用 Ruby on Rails 的大规模专案不少,那为何不会浮现这些问题,代表我们肯定是有哪个环节需要修正,但每个专案的情境和需求都大相迳庭,因此没有甚麽进展。
因缘际会下,同事麦可认识了领域驱动开发(Domain-Driven Design,後简称 DDD),并认为我们可以试着遵循里面的原则套用在专案,理由有以下几点:
决定要导入 DDD 後,首先是先整理目前的状况
一开始我们先做了两件事
分析现有系统,并尝试切割出不同领域
我们先印出 DB 中的 er-diagram 和列出网站大致上的所有功能,接着尝试把我们认为是同一个领域的 model 圈在一起,其中也会有出现不同领域共用同一个 model 的情况。
在核心领域(core domain)中找寻共通语言与领域事件
透过目前的程序码和到处询问相关部门的人员,收敛领域知识。这边比较有系统的做法可以透过 事件风暴 (Event storming) 的方式来实践。
关於事件风暴可以看这系列的文章,有详细的解释
Event Storming Part 1 - 简介与事前准备
专案一开始如果视为一个大领域,不管怎麽切都可以减少需要关注的逻辑,因此对我们来说这样的改动方向是对的。
当时我们的想法是,先透过既有程序码和脑中旧有的知识大致规划出一个雏形,这样的切法肯定不会是最完美的,但至少能降低每个领域的复杂度,收敛各领域的知识并为其建立知识库和测试,而有了测试,要再把领域切更细或是把多个领域合并成一个都会比较轻松。
除此之外,每个领域的设计其实会对应到我们对该领域的认识,而切分领域会使我们更专注在业务逻辑上,这也使我们更容易对领域去做更深的认识。
我认为切割领域是一种持续循环的调整,因此只需要满足当前的需求就可以有效地解决问题,当新需求进来时,如果目前的设计导致开发成本过高,代表有新的领域知识,需要重新调整领域。
一开始踏入 DDD 是透过阅读 Eric Evans 所撰写的领域驱动设计,老实说到现在仍有许多地方没有理解的很透彻,直接阅读本书会有许多新的观点,但比较可惜的是这本书对如何实作 DDD 的方法着墨较少,所以後来都把这本书当作灵感书来使用,当有想不通的地方回去翻翻通常都会有新发现。
亚当·贝特拉姆(Adam Bertram)解释了自动化新员工入职过程的好处。 不论全新租赁的角色如何...
文字方块 entry 建立文字方块 加入按钮 Entry应用 选项纽 核取方块 功能表设计 ...
前言 背景是一个如此重要的东西,你能想像萤幕的话棉全都是白底或黑底吗!!当然不行啊!! backgr...
Button和Toast 今天要介绍的是Button这个常在程序中能看到的元件,在Button的属性...
下面这边要来分享我面试有到最後一轮的公司~ SmartNews 这是一间日本的新创公司,目前算是日本...