---
# System prepended metadata

title: 系統
tags: [CleanCode]

---

###### tags: `CleanCode`
<STYLE>
p,li,oi,h3{
font-family:"微軟正黑體";
}
</STYLE>
# 系統

劃分程式的建造邏輯與執行過程。就由主函式**main**來劃分。
:::info
*  將所有與建造相關的程式碼都移至main函式，再由main函式建造系統所需的物件，傳遞給應用程式。
*  也就是以一支專門用來呼叫其他function的主函式(main)進行執行的部分(ex: public static void main())
:::
![](https://i.imgur.com/Oq1qIkQ.png)
#
#### 相依性注入(Dependency Injection, DI)
這是控管反轉(Inversion of Control,IoC)在相依性管理中的一種應用方式。
> 控管反轉：將某物件的第二個職責交由其他專注於該職責的物件，通常為主程序的container(容器)
> 相依性管理：一個物件不應該負責實體化與本身的相依，此責任應交由另一個機制，因而進行控管權反轉。

類別會提供用來注入相依性的設定者方法(setter method)或建構子參數，在建立的過程中，由DI容器實體化所需物件。
#
#### EJB(Enterprise(企業) JavaBean)
是一種Java EE组件，通常用於企業應用程式中封装商業邏輯。
用來解決永久性、安全性和交易的方式。預期會使用**AOP(剖面導向程式設計)** 來達成。
> 1. **AOP(aspect-oriented programming)**:一種恢復橫切關注點成為模組的方式。
> 2. 橫切關注點：除了主關注點可以分解方式捕捉外，其他沒有被捕捉到的關注點的實作程式碼會散在各處。這些關注點(同主關注點)是橫切的。
> 3. 關注點（Concern）：由部分有意義的、可管理的小程式組成，一個關注點通常只有同一個特定概念或目標。
> 4. 剖面（Aspect）：提供一種輔助的模組化機制，用來說明系統中那些關注點需要以某些一致性方式來修改。
#
#### JAVA代理機制(Java proxies)
適用於簡單的情況，如:在個別物件或類別中呼叫包裹方法(wrapping method)。
代理機制在JAVA的框架中都有內建支援(Spring AOP和JBoss AOP)，因此可以純粹用Java程式碼來實現剖面設計。
#
#### 總結

系統架構應包含模組化關注點的領域，每個關注點都由**普通舊式的Java物件**(Plain-Old Java Object, POJO)來實作。不同領域之間，利用最小侵入性的剖面工具將之整合。
透過撰寫POJO、使用剖面相關機制、非侵入性的組合實作的方式，使所有抽象層級的意圖都清楚可辨視。
