企業級Spring最佳實踐 - 應用程序架構

Sections


應用領域 Application Domains


咱們的應用程序組件分解爲兩個基本類別:系統和問題領域。
  • 系統領域(System Domain) – 基礎設施架構,這個是Spring的強項!
  • 問題領域(Problem Domain) – 業務組件,一般這個是用例驅動的,這種方式是大多數開發者的使用的解決方案。


應用層(Application Layers)


應用程序的組件(beans)應該被分爲不一樣的層次和類別。 



Bean Layers
  1. Controllers (MVC, 系統領域)
  2. Services (問題領域)
  3. Repository (系統領域)
Other Bean Categories
  • 數據傳輸對象(問題領域)
  • 系統函數(系統領域)


控制器(Controller Beans)


更多的關於 企業級Spring MVC最佳實踐的博文即將發表 - 待定。


業務(Service Beans)


Service Beans 是問題領域組件. 在應用程序中是最重要的部分,同時,也是SOA的組成部分。
  • 所有是 POJO
  • 老是以接口方式定義
  • 不要包含基礎設施架構組件的引用
  • 不要引入Spring和工具包依賴
  • 不要使用基礎架構層中的註解
  • 老是在公有方法中聲明事務(譯註:可以使用 @Transactional)。
  • 在接口包中建立一個名叫 internal 的子包,裏面存放 Service 接口的實現類

Spring的 @Service 和 @Transactional 註解對 Service 很是有用。建立並使用項目特寫的元註解,能夠將業務接口從基礎架構中抽象出來。 java

自定元註解
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
packagecom.gordondickens.service.annotation;
 
importorg.springframework.stereotype.Service;
importorg.springframework.transaction.annotation.Transactional;
 
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
 
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Transactional
public @interface AppService {
    String value() default"";
}
使用元註解
?
1
2
3
4
5
...
@AppService
publicclassMyClass() {
  ...
}


倉儲或倉庫(Repository Beans)


Repository beans 屬於系統領域。更多的關於 Repository 的最佳實踐將陸續推出博文 - 待定。
  • 實現中不要包含業務邏輯
  • 使用Spring和JPA的註解
  • 考慮可配置性

數據傳輸對象(Data Transfer Beans)


數據傳輸對象 (DTO) 是系統輸入和輸出的基本對象。DTOs 是做爲邏輯集合用於接收和發送的簡單的公用 POJO。
  • 老是公用的 JavaBean
  • 使用 JAXB2 註解


轉換(Conversion Beans)


Spring core 組件中提供了一套豐富的轉換實現。Spring的轉換服務是基於普通的JavaBean 的 PropertyEditor 規範。

Spring中 PropertyEditors 專一於應用中的輸入和輸出的轉換。 spring

org.springframework.beans.PropertyEditorRegistrySupport 類顯示的內建了 String <–> object 的支持. 在咱們的應用程序中,只需知道怎麼使用便可。咱們的應用程序使用XML做爲配置,而且設置屬性值時,Spring使用反射機制肯定參數的類型,若是屬性類型不是一個字符串,Spring將查找內建的 PropertyEditor實現,將字符串轉換爲目標屬性類型。咱們也能夠建立自定義的 PropertyEditor實現,並註冊該類型。例如:美國社會化安全碼和電話號碼 Craig Wall’s Spring in Action, 3rd Ed  數組

  • 基本類型的包裝類型:Long, Integer 等
  • 集合類型: List, Property, Set, Map, 等
  • 數組
  • 工具類型: URL, TimeZone, Locale, 等

Spring3.0 引入了一個 ConversionService 接口,該接口提供咱們註冊一個將 Object <–> 其餘對象的轉換服務的能力。 使用轉換註冊,咱們能註冊一個自定義的轉換類,自動將一個對象轉換爲另外一個對象:MyObject <–> MyOtherObject。具體請參看: Using Spring Customer Type Converter Blog. 安全

相關文章
相關標籤/搜索