Dependence injector : 依賴注入
late binding、unittesting 、abstract factory、di container
將依賴關係於DI Container或第三方
目的 : loosely couple、maintain、extensibility
method 情境 : 即有的依賴對象使用 ex : physicianFee 計算,依賴於 Doc
constructor 情境 : 建立使用物件 ex : DocService 需查Dal,注入 DocRepo
property 情境 : 依賴關係非必要的,已有內定預設,比較像Strategy Pattern簡單式,先有預設的method,然又想更換另一種method
ex : physicianFee 預設一般算法無加乘,然又要加班算法加乘,就可以替換算法
loosely couple : 不修改原本 produce code, 依新request、增加function, 專注於新function,加入新的code (OCP open/close Principle)
decorator、composite、Adapter、null object
LSP liskov Substitution Principle、SRP Single Responsibility Principle
捉住橫切 同樣 interface 實作為 decorator,此方式為 cross-cutting-concerns 橫切關注點
依base共通interface上,加入新function,實作為composite
Tightly coupled : 還滿常見的寫法,需什麼class,就new 傳下去。
auto register : Assembly
DI 反模式 : 控制狂、服務定位、環境物件、限制性建構 (偏向一般Tightly coupled)
code smell :
constructor :
solution :
facade service : abstract interface 為前台,把作業流程上緊密dependence,隱藏於後台、
domain event
1. constructor over-injection 傳入variable over 5 count,SRP
ref :