[DAY17] 关於 DAL 的一些问题

Q: 为甚麽原本 ActiveRecord 提供的 ORM 不用,要再包一层自己的 ORM?

在本系列的第2~5篇中有稍微提到过,这边列点整理

  • Model 没办法代表领域物件,且修改 schema 的成本过高。
  • ActiveModel 可以直接更新资料,而以 Boxenn 建立的 domain 则是必须透过 repository,较不容易向外溢出 DAL 逻辑。
  • 测试中很难替换 model ,做到没有 DB 的测试,而以 Boxenn::Entity 建立的物件则完全不依赖外部资源,进而达到执行速度快的测试。

Q: 额外建立 domain 的基础设施不会很花时间吗?

一开始没有制定 DAL 的介面时,会花很多时间来想要怎麽实践和通用化。但後来收敛成 Boxenn 後,最花时间的是讨论 domain 内的 aggregate 要怎麽设计及要以哪个 entity 当 agrregate root, 然而这步正好是蒐集领域知识、深入了解领域专家想法後的产物,因此值得花费较久时间设计来得到贴近现实世界的领域。当有了 aggregate 後,剩下的部分就可以很快速地建立。

Q: 一定要每个 domain 都用那麽复杂的基础建设吗?

不一定,我们只有在拥有复杂业务逻辑的领域才会使用 DDD 来解决。除此之外, 如果遇到读取复杂的领域,Boxenn 也可以实做 readonly domain,Write 则使用原本的 AactiveRecord

这边有点 CQRS pattern 的味道。


<<:  [面试][资料库]设计资料库时会考量哪些点?

>>:  G-coin scam?

Python海关三旬汇率 - Python练习题三

公司需要使用到海关的三旬汇率 海关提供目前汇率与历史三旬汇率 目前汇率(TXT):https://p...

Day22 探讨Templates

经过这几天的介绍,相信大家也越来越了解它里面包含的功能了吧! 多了解一些东西,对之後的开发一定会越来...

Day8# Array & Slice(下)

昨天没有写完的 Array & Slice(上) ,今天要来把补完进度。 那我们就开始吧 ─...

HERE API Example - Context menu

本文说明如何为地图和地图物件加入 Context menu,当您在地图上按滑鼠右键即显示该位置的经纬...

视觉化当日趋势图(1)-client端架设&&工具篇

昨天我们完成了用Flask撰写ticks API, API端好了之後,接下来我们要开始架设我们的cl...