2014-03-05 126 views
-1

我有大約10 Web服務調用和我做了,我已經把所有的電話在同一類最好的方法調用

class WebserviceCalls { 
    public static function getReportDetails($reportId) {} 
    public static function getUserSession($userId) {} 
    .................................... 
} 

然後單靜態類,我將有一個代理在實際調用WebServiceCalls類之前處理所有緩存的類WebServiceCallProxy

有了這個設計,隨着我的發展,我有新的要求需要新的Web服務調用,我只需將新調用添加到WebServiceCalls類。由於所有這些設計,隨着它的發展,它呼籲代碼味道,它違反了所有OOP固體原則,類也不是凝聚力。我知道必須有更好的方法,可能是一些預定義的設計模式來處理這類問題,或者在簡單對象中分解每個方法,並將整個WebServiceClass作爲一個不同的組件處理。

回答

-1

如果您使用的是MVC體系結構或類似的東西,那麼可以更好地分割您的WebServiveCalls並將這些方法放置在模型層中。

在您的Report類中放置getDetails()函數,並在User類中放入getSession()函數。

這些函數內部準備請求參數,您需要檢索nessesary數據。然後在WebService類中調用返回答案的request函數。

在您的方法中處理響應。

如果您必須添加新呼叫,則可以輕鬆添加新模型或擴展現有模型。無需修改您的WebService課程。

+0

有意義,但可以說如果我已經有用戶模型,並且我將getSession的哪個數據源(屬性或參數)添加爲Web服務,而用戶模型中的其他方法的數據源是數據庫,那麼如何構造? –

+0

將您的'WebService'和'Database'作爲服務處理。它們應該只在您的應用程序生命週期中存在一次。你可以使用singlton模式來創建它們的一個實例。在你的User模型中,getSession調用WebService :: getInstance() - > request(params)',並且對於DB查詢使用'Database :: getInstance() - >查詢(查詢)'更好的是某種'ServiceManager'來獲取服務實例。 –

+0

MVC中沒有「模型」。模型是一個圖層。請停止建議人們的模式,你不明白。另外,這對OP的問題沒有任何幫助。而且,作爲頂級櫻桃:** SINGLETONS是一個反模式!! ** –