2011-11-29 48 views
1

考慮有兩個Web服務Test1Test2坐在同一個項目中的同一個服務器上。有impl類是Test1ImplTest2Impl。 Test1Impl包含方法的定義getDetailsTest2Impl包含方法addDetails如果兩個服務都坐在同一個項目中,如何從其他服務調用一個Web服務方法?

現在我想從getDetailsTest1Impl調用addDetailsTest2Impl。 我得到以下思路來實現這個功能

1),因爲這些服務IMPL類都坐在同一個項目,我可以把它作爲一個正常運轉的Java方法就像

new Test1Impl().addDetails(request) 

這將打破網絡服務的限制。

2)我應該使Web服務調用來調用該方法。這將變得令人討厭,因爲它將在同一個項目中擊中網絡並使服務器調用到位於同一臺服務器上的服務。

ServiceLocator.getTest1Services().addDetails(request); 

3)在addDetails實現相同的方法在Test1Impl作爲私人方法。

public class Test1Impl{ 

public Response addDetails(Request request){ 
// 
// 
} 
} 

public class Test2Impl{ 

public Response addDetails(Request request){ 
// 
// 
} 
} 

這將是多餘的代碼,它會降低代碼標準。

請幫助我走哪條路,甚至是新的想法都歡迎。

回答

1

我認爲你在你的設計中混合了關注點:你應該重構業務邏輯遠離Web服務接口/公開暴露/傳輸邏輯。也許有DetailsService商業服務類(不是網絡服務!)有addDetailsgetDetails這些服務根據需要調用的方法。這樣你就不會有重複的代碼,並且你仍然在Web服務接口級別保持讀寫操作的獨立性。

我喜歡讓我的web服務類儘可能小,並且負責只有用於將信息傳遞到我的業務服務層。這意味着如果您要將GUI添加到您的應用程序中,那麼業務邏輯已經被編碼了,您可以將新的GUI掛接到DetailsService

1

您已回答了您自己的問題。使用最簡單和最簡單的版本。只需直接調用其他Web服務Java即可。

如果您真的擔心'打破Web服務限制',那麼無論如何,然後將共享方法重構爲共享助手類。

1

我建議重構代碼併爲Web服務中的通用功能製作一個Utilities類。

如果這是不可能的,我會選擇選項1,即直接調用該方法,而不是使用Web服務調用。

從我的角度來看,它在概念上更好,因爲它們都在同一臺機器中,並且不必使用網絡呼叫(即使它轉到回送地址)。
因爲你會直接調用實現,所以你不必承受編組/解碼的懲罰(特別是如果你使用SOAP)

相關問題