DI

  • 97
  • 0
  • DI
  • 2020-08-17

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 :

https://www.tenlong.com.tw/products/9789864344987