30-23 之 Patterns of Enterprise Application Architecture 小总结

今天我们简单来整理一下,这几个星期从 《 Patterns of Enterprise Application Architecture - Martin Fowler 》这本书中所学习到的东西,先简单来张图。

https://ithelp.ithome.com.tw/upload/images/20211008/20089358RRrHcsQIUT.png

这张图涵盖了我们前几天所讨论的东西。

Presentation Layer

这个层级是专门用来处理画面的地方,书中虽然以模式来说只要提到 MVC,但是因为我觉得现在应该还蛮多人也有听过 MVP 与 MVVM 所以我也一起拿来说一下。

  • MVC : 最常听到,也是有最多版本的模式,最传统的 MVC 三者 Model、View、Controller 是会相互有交集的,而不是 ASP.NET MVC 那种 View → Controller → Model。
  • MVP : 为了解除 View 与 Model 的耦合,双方沟通完全改由 Presenter 来处理,我个人觉得 ASP.NET MVC 比较像这个。
  • MVVM : 其中 VM ViewModel 实现了画面与资料的双向绑定,现在很多前端 framework 都是以这个概念来实现。

相关连结 :

Presentation Layer - Domain Layer 之间

Presentation layer 与 domain layer 之间我们有提到两个东西 :

  • Remote Facade
  • DTO ( Data Transfer Object )

会有这两个东西主要原因在於 :

画面要的东西,不见得与 domain 层的形状一样

所以 remote facade 是一种设计模式,来让『 外部使用更简单 』,而 DTO 本质上就是一个传送给外部的物件,他的形状比较接近 Presentation 需要用到的。

Domain Layer

这里主要有三种模式 :

  • Transaction script : 基本就是一个业务,想办法完成就对了。
  • Domain model : 建立不同的 domain,然後该由那个 domain 处理的部份就由他来,与上面 transaction script 相比,我觉得重点在於职则分明。
  • Table module : 以每个资料表为一个类别,然後里面提到与之对应的操作。

上面的 domain model 与 table module 事实上会有一个问题,那就是要在那里串业务流程,以 domain model 来看职则分明,但问题是一定要有个地方来串啊 ? 对这就是 service。

  • Service : 以 ddd 来说近乎等同於 use case,基本上就是将业务流程串起来的地方。

然後这里我们还有提到几个我觉得算是 domain layer 的支援工具 :

  • UnitOfWork : 处理 transaction 的地方。
  • Repository : 我们很多时後,会有很多因为业务上的需要,所需要的一些资料库特殊的操作,例如 select 某些特别要用的栏位,这种为了业务而写的 query 就是放在 repository。没有他 dataSource 层的形状,就会慢慢和 domain 混在一起。
  • LazyLoading : 有一些资料,只有在需要时才需要 load 出来,如果每一次使用 domain 都要 load 所有资料,那会有性能瓶颈的。

相关连结 :

Data Source Layer

这里就是专门处理与资料库相关的操作,而不代有业务逻辑。

  • TableDataGateway : 每个物件都以表为单位,来提供操作。
  • RowDataGateway : 每个物件以 row 为单位,来提供操作。
  • Active Record: 以 table 为单位,来提供包含『 业务 』相关的操作,我觉得很接近 repository 想解决的事情。
  • Data Mapper : 专门提供资料库操作并且与 domain model 一起使用,而且他可以跨表,因为它主要回传的东西以 domain model 为单位,而 domain model 没有限定只能一张表。

相关连结 :

小总结

《 Patterns of Enterprise Application Architecture - Martin Fowler 》 这本书应该就先到这一段落了,虽然还有很多可以降,但接下来我想先往 domain layer 那在继续的往以下两个地方延伸了 :

  • DDD
  • CQRS

参考书籍


<<:  立委名单/提案 Open Data / CsvToBean - day23

>>:  Day26 - 部属到正式环境 (1)

Day08:Build Private Chat(建立私人频道)

全文同步於个人 Docusaurus Blog 除了共用的频道外,当不同使用者进入时,希望能够出现...

Chapter5 - 当一个勤劳的园丁,来修剪我们美丽的树(II)Canvas素材 修图、压缩、效能优化

树叶问题 先前在第三章画树时,就有发现把树叶画上去时,系统工作时间会增加而导致掉侦,原图是300x3...

Day09【Web】跨来源资源共用 CORS

CORS 全称 Cross-Origin Resource Sharing, 中文为「跨来源资源共用...

DAY 03 SCSS ? SASS ?

SCSS 是什麽?跟 SASS 是什麽关系? 说到这两个看起来是一样的东西,但是每次教学文章又发现好...

[Pizza吃到饱-2]【乔e欧爸爸 手工披萨吃到饱-台中新时代店】GIOIA PAPA handmade pizza lover

温馨小提醒:吃多少,拿多少(避免造成浪费啊~) 疫情前,我总是会在影片下方注明「吃多少,拿多少(避免...