技術問答
技術文章
iT 徵才
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
第 12 屆 iThome 鐵人賽
DAY
25
1
自我挑戰組
30天|入門NestJs連載學習筆記
系列 第
25
篇
D25 Ch 22 整潔的架構
12th鐵人賽
azsx96385
團隊
Outcome First
2020-10-08 19:55:03
1103 瀏覽
分享至
架構都有同個目標-關注點分離
透過將軟體分層,實現關注點分離,每個業務規則至少有一層屬於他們,使用者及系統也至少有一層屬於他們
共同特徵
獨立於框架
好的架構不依賴於現有強大的軟體程式庫,它允許你使用這樣框架作為工具,而非強迫你將系統塞進入有限約束中
可測試
業務規則可以在沒有UI、資料庫、web伺服器或其他外部元素的情況下,進行測試
獨立於UI
無需更改系統其他部分,UI也可以很輕易做更改,ex. web → APP
獨立於資料庫
你的業務規則不綁定資料庫,你可以隨意將Mongo\Bigtable\couchDB抽換成Oracle\SQLserver
獨立於任何外部代理
業務規則對於外界介面一無所知
依賴規則-原始碼依賴關係只能指向內部,朝向更高層級策略
內圈是策略,外圈是機制
越內圈軟體,層次越高,越外圈,層次越低
內圈沒有任何東西可以對外圈事情有所了解
外圈宣告名稱不能在內圈程式碼中出現(函式、類別、變數、任何被命名之軟體實體)
外圈宣告的資料格式不應該被內圈使用,尤其是格式是由外圈中框架所產生,內圈不應該被外圈任何東西影響
實體層
Entity 封裝了企業級的關鍵業務資料,當外部變化,實體曾是最不可能被改變的
使用案例層
使用案例層,包含應用程式特定的業務規則,封裝並實作系統所有使用案例
這些使用案例編排實體之間的資料流,並指揮這些實體使用他們的關鍵業務規則,來實現使用案例的目標
介面轉接層
介面轉接層,的軟體是一組轉接器,可以將資料從最適合於使用案例和實體的格式→轉換→最適合某些外部代理(ex. DB or web)的格式
介面轉接層,包括GUI的MVC架構、表示器(presenter)、視圖、控制器controller
模型 model 可能只是資料結構,他從控制器傳給使用案例,並且之後還會從使用案例回傳給表示器(presenter)和視圖(view)
在介面轉接層,資料從最適合實體和使用案例的形式,轉換為最適合正在使用的任何持久性框架(ex. DB )
在介面轉接層,之內的所有程式碼都不應該對於資料庫有所暸解
任何其他必須將資料從外部格式(ex. 外部服務)轉換為使用案例和實體所使用的內部格式轉接器,也屬於這一層
框架和驅動層
框架和驅動層,通常由框架和工作組成(ex. 資料庫和web框架),一般來說,我們不會在此寫太多程式碼
框架和驅動層是所有細節的去處,web是細節,資料庫是細節,我們將這些東西放最外層,因為他們不會有什麼危害
留言
追蹤
檢舉
上一篇
D24 無暇程式碼-CH20 商業邏輯
下一篇
D25 ch 22 整潔的架構
系列文
30天|入門NestJs連載學習筆記
共
26
篇
目錄
RSS系列文
訂閱系列文
1
人訂閱
22
D22 台南的散步點心
23
D23 台南|國慶煙火在漁光
24
D24 無暇程式碼-CH20 商業邏輯
25
D25 Ch 22 整潔的架構
26
D25 ch 22 整潔的架構
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
19844
篇
完賽人數
528
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
iOS 裝置無法透過 IPsec VPN 連入 FortiGate,請問正確設定方式?
EPSON LQ-690C 印表機中一刀跑版
[Javascript] 非同步執行,如何延緩後面程式的處理 ??
AARQ 通訊協議是?
印表機設定 - Epson 690c
Dell or Asus Storage 或NAS,哪牌比較好?
Dell or Asus 伺服器,哪牌比較好?
將硬碟上的 EFI 分割區複製到固態硬碟後,ARM 架構的 Ubuntu Server 無法啟動
sdray vigor2927 sslvpn ip設定問題
FortiGate SSLVPN替代方案?
熱門回答
iOS 裝置無法透過 IPsec VPN 連入 FortiGate,請問正確設定方式?
EPSON LQ-690C 印表機中一刀跑版
[Javascript] 非同步執行,如何延緩後面程式的處理 ??
FortiGate SSLVPN替代方案?
印表機設定 - Epson 690c
熱門文章
DNS 可見度差距:防火牆在網路安全中忽略的錯誤設定
Vue 3 生命週期(Lifecycle) 四大階段 建立(Create)、掛載(Mount)、更新(Update)、 銷毀(Unmount)
[資料治理實戰回憶錄]0-從失敗中開始
台灣職場必學的Excel函數技巧
VScode 開發應用系統專案(8-1) - Spring Boot Security 設定與認證前置準備
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}