[DAY8] 与 ActiveRecord 分手

先来看看目前我们专案的资料夹结构:

https://ithelp.ithome.com.tw/upload/images/20210923/20108265Pfvxl4MYfy.jpg

前面有提到,ActiveRecord 所建立的 model 与 schema 会直接互相绑定,要摆脱这个限制、重新建立 domain 中的 aggregate ,就需要额外处理资料存取的问题,因此在 domain 中大致上可以分成两层,一层是资料存取层 Data Access Layer (後简称 DAL),另一层则是领域逻辑层 Domain Logic Layer。至於 view 和 controller 因为不属於业务逻辑,因此不会放在 domain 资料夹内。

注1:
这边分层的名词是我和同事在讨论时约定成俗的共通语言,不一定为专有名词
注2:
显示逻辑要放在 domain 内或外在团队内部也还没有定论,因此先不放

Data Access Layer 资料存取层

包含 models 和 repository内的所有东西。

DAL 层负责提供一个稳定的介面,处理对资料的 CRUD,使领域层可以不用在意底下的实作方式。在 domain 中只有这层会与外部介面耦合,资料的异动仅能透过 repository 来处理。

Domain Logic Layer 领域层

包含 entity 和 use case。

DLL 层负责处理业务逻辑,视为整个专案中最核心的地方,因为他提供真实世界中的需求解决方案,因此这层最需要测试保护,也是含有最多领域知识的地方。

client 和 listener 是用来处理不同 domain 之间的依赖关系,往後会有专门一篇文章做讨论。

本系列文章中所举的例子,资料存在资料库中、且使用 ActiveRecord 当 ORM;但其实 ORM 和资料库对此架构来说,都是外部介面,因此假设今天储存资料的地方是 local 的 csv 档、或用另一套 ORM 系统,都一样可以套用此架构。

下一篇会介绍失去了 model 这个物件,要用甚麽来取代他,以及我们在实作上的原则。


<<:  [DAY-09] 放宽更多限控制 决策不必上级核准

>>:  认识共享服务+使用SMB

Day 27-如何测试 terraform 之二:自动化测试写起来辛苦,但跑起来就是一个爽

本章介绍如何使用 terratest 为 terraform 准备整合测试 课程内容与代码会放在 G...

CompTIA SY0-601 Braindumps - All About The SY0-601 Exam

Most of the aspiring professionals are getting cer...

[Day 19] 实作 - 介面篇3

首先先将各个快捷键设好 将ActionBattle_Var.js改成 开一只程序ActionBatt...

Powershell 远程连接

使用过 Linux 的都知道,Linux 的 shell 不但可以本地运行,也可以通过远程的方式连接...

Day30 | 30天系列回顾 X赛程後规划

好啦,今天是第三十天了,今天会分享下赛程心得,并回顾一下前面系列文,最後是三十天後的规划! 参赛动机...