iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
Modern Web

全端成長之旅系列 第 21

Day.21 Laravel with DDD Part.2

  • 分享至 

  • xImage
  •  

現在我們有 modules 資料夾來放置每一個 Bounded Context

接下來介紹,Bounded Context 裡的東西

  • Exceptions
    放各種自訂 Exception,沒特別。
  • Http
    Http 裡的東西跟原先一樣,主要就是放 Controller,雖然在某一版開始 routes 被放到跟目錄,但我個人是設定每一個 Bounded Context 的 routes.php 都放在 Http 裡面,所以 Http 目錄裡面就只有 Controller 跟 routes。
  • Services
    放 Application Service,各種業務行為的 Service。
  • DomainServices
    放 Domain Service,各種業務檢查、判斷的 Service。
  • OpenService
    放 Open Service,要開放出去給其他 Bounded Context 的 Service,所有外部其他 Bounded Context 都只能使用這個目錄的 Service。
  • Providers
    放 Laravel 的 Provider,記得要註冊到容器中。
  • Repositories
    放 DDD 的 Repository,最佳實踐來說 Repository 要有 interface,然後再寫各種實作,例如:UserRepository interface 讓 SqlUserRepository 與 RedisUserRepository 去實作,但我個人是沒寫,因為我專案本身沒太大這部分需求,不過如果未來有多儲存機制在切換,那麼這層介面就會做。
  • Models
    放 Eloquent Model。
  • Database
    就是放跟原本根目錄 database 裡一樣的東西
    • migrations
    • factories
    • seeders
  • Policies
    放 Laravel Policy class。
  • Tests
    測試檔案,需要設定 phpunit.xml ,讓測試知道要讀各個 Bounded Context 的測試目錄。
  • Factories
    各種物件的工廠。
  • DomainModels
    放 ValueObject、Entity、Aggregate。

每一個 Bounded Context 的內容都大同小異,可以視情況增加所需要的目錄,這邊額外提一下,上面有寫到只有 OpenService 的東西可以給其他 Bounded Context 使用,不過可以有一個例外 Bounded Context 專門放置那些完全沒有業務知識又是高共用性的程式。

程式寫起來大概是這個樣子:

  • Route 調用 Ccontroller
  • Contoller 調用 Service
  • Service 中使用 Repository、Factory 找出或是建立出 Domain Model 做事
    Repository 回傳給 Service 的東西只能是基值或是 Domain Object(領域層物件)
  • Service 回傳結果到 Controller
  • Controller 回傳結果

前端的東西我是直接完全移到另一個專案,所以 Laravel 這邊沒有前端程式。


上一篇
Day.20 Laravel with DDD Part.1
下一篇
Day.22 Laravel with DDD Part.3
系列文
全端成長之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言