2011-09-24 43 views
2

讓我們說我有一個用戶類,我想返回我的數據庫中的所有用戶。爲此,我創建了一個名爲getAll()的方法;同樣的方法,多種返回類型。代碼組織

我需要在應用程序的不同部分調用該方法,並以不同格式返回數據。例如,我可能需要以逗號分隔的所有用戶放入一些「where in」條件,或以json格式放置api或數組。

什麼是組織我的代碼的最佳解決方案?

可能的解決方案: 1.爲getAll函數傳遞一個fetchMode變量,以便我可以相應地設置返回值的格式。 2.創建一個代理方法「findAllAsArray」,「findAllAsJson」等,它調用原始的getAll方法並設置響應的格式。 3. Allways以標準格式(例如:array)返回結果,然後創建一些通用方法在格式之間進行轉換:ex:arrayToJson,arrayToCsv等,並在需要除標準以外的其他格式的結果時使用它們。

如果我有很多需要的格式,方法1可能會使getAll方法太複雜。 方法2可能會添加太多的額外方法,導致我的類更復雜。 方法3,不知道,但應該從我認爲的模型中以需要的格式返回數據。在控制器中轉換它可能不是最好的解決方案。

+0

「控制器」。你是否在Ruby on Rails這樣的框架中工作?我問,因爲你的特定框架可能有內置的機制或慣例來處理這個問題。 –

回答

0

創建一個新類,例如包含原始數據的「用戶」。用戶是不可變的:一旦初始化,其狀態不會改變。現在,getAll()返回一個用戶實例,並使用getAll()創建的原始數據進行初始化。對於每種格式,結果都有一個公共方法,它可以適當地格式化原始數據並將其返回。

在僞代碼:

class User: 
    method getAll: 
    users = # fetch the users 
    return Users.new(users) 

class Users 
    method initialize(users) 
    # Save users to a member variable 
    method json: 
    # Return users formatted as json 
    method csv: 
    # Return users formatted as csv 

要檢索的所有用戶JSON格式:

users.getAll.json 

要檢索的所有用戶以CSV格式:您提到

users.getAll.csv