2011-05-17 62 views
0

我不熟悉這個概念,所以我可能會錯誤地稱它爲「多模塊項目」。在我製作的軟件中,有一個獨特的單元具有不同的輸入和輸出。我決定把它作爲一個單獨的(web)服務來運行,因爲它在這種獨立模式下具有其他的價值。設計一個多模塊項目

但事情是,現在與此單元混合的應用程序也必須單獨運行。這意味着它應該有一種新的方式讓它通過調用它的服務端點來增加新的複雜層次(序列化和反序列化非簡單的數據到XML和JSON)。軟件工程中有這樣的常見做法嗎?我可以用其他方式傳輸數據嗎?

該軟件正在使用Scala運行在JVM上,並且可能影響或不影響這個故事。

回答

1

如果你不能有你的原始客戶端AP連接到服務器,然後我會建議以下模塊的故障:

  • 服務模塊與Java/Scala的API
  • 包裝了服務模塊與REST/XML/JSON
  • 客戶端模塊
  • Web服務模塊它直接調用Java/Scala API模塊
+0

這聽起來不錯,現在什麼是最好的優雅的條款在建立?我每次構建客戶端時是否都需要構建服務器(這是否稱爲多模塊構建?)或者我只是將它打包並添加爲客戶端應用程序的依賴項?謝謝。 – parsa 2011-05-18 07:16:03

+0

每個模塊都將生成自己的工件 - jar文件,或者可能是Web服務模塊的war文件或ear文件。第二個和第三個模塊將依賴於第一個模塊,即將第一個jar包含在它們的編譯時和運行時類路徑中。像Maven這樣的構建工具將爲開發多模塊項目提供支持。 – 2011-06-22 11:40:22

0

嗯,這幾乎是什麼人做的XML和JSON,什麼SOA的目標是什麼SOAP是爲創建加之類的東西JMS等

1

恐怕我不能在Scala前端提供任何東西,但就Java而言,您應該將新服務視爲您的應用程序的服務層,而REST/SOAP /無論您的服務的接口在Web/Servlet層中定義。

所以,讓我們說你有一個像你com.myco.services包的以下服務:

public interface PersonService { 
    public Person createPerson(PersonIdentifier id, PersonType type); 
    public Person retrievePerson(PersonIdentifier id); 
    public void updatePerson(Person existingPerson); 
    public void deletePerson(Person existingPerson); 
    public boolean authenticatePerson(String personName, String password); 
} 

我們將會把它作爲閱讀你有一個PersonServiceImpl實現這一點,更新數據庫管他呢。在您的應用程序中,您可以在同一個JVM中將PersonServiceImpl注入代碼並直接調用方法,而無需編組或解組參數。

在Web層中,您可以有一個單獨的PersonServiceController映射到您的servlet中的URL。當像「http://myco.com/person/update」這樣的URL被擊中時,請求的主體可以這樣傳遞給控制器​​:

public class PersonServiceController { 
    private final PersonService personService; // Inject PersonServiceImpl in constructor 
    ... 

    public void updatePerson(String requestBody) { 
     Person updatedPerson = unmarshalPerson(requestBody); 
     this.personService.updatePerson(updatedPerson); 
    } 

    ... 
}