2013-02-02 75 views
4

想知道在多層應用程序結構中設置默認值的最佳方法。具體來說,如果某個工作流需要嵌套的一組函數調用,則默認是在上指定的所有函數,還是隻在頂層函數中傳遞?還是完全是一些其他模式?多層體系結構中的默認功能值

例如,考慮一個Web應用程序與3層:

  • 資源層處理HTTP請求和響應,從客戶端
  • 獲得HTTP參數業務層執行,以確定所需的業務邏輯需要信息
  • 數據層訪問數據庫並返回請求的數據。

可以說客戶端想要獲得一個對象 - 對於這個例子,可以說它的一個Place對象。地方對象有一個type - 省,市,鎮,縣等

的資源功能可能是這樣的(使用Django HTTP對象):

def resource_get_place(request, type=None): 
    """ Gets a place of the specified type, or a place of any type if 
    type is None """ 

    place = business_get_place(type=type) 

    return HttpResponse(request, { 
     "place" : place 
    } 

然後其他兩個可能:

def business_get_place(type): 
    # Trivial in this case, used for consistency 
    return data_get_place(type) 

def data_get_place(type): 
    # Get a place of specified type from the cache, or db, 
    # or wherever else. If type is None, get place of any type. 
    return place 

這兩個函數'下面'這個堆棧中的資源層是否也默認類型爲None?我的一部分認爲這樣做會違反幹。我的另一部分認爲,這樣做的最可預測的和模塊化的方式是在堆棧中的每個函數默認鍵入'合理'到None。

回答

1

我實際上會在最低級別進行默認設置,而不是最高級別。

從必要性的角度來看這一點 - 就資源層而言,'type'是可選的。同樣的事情適用於您的業務層 - 這裏沒有任何需要類型值的邏輯。直到你的數據層,一個默認值是必要的,並且有任何意義。

無論從「上方」調用它,每層中的功能都需要能夠工作。所以,如果你的數據層需要'type'的某種值(並且有一個默認值,無論誰調用它都是有意義的),那麼把默認值放在數據層中。

如果您想要保持一致,那麼在高層中指定默認值也沒什麼問題。也許如果你的一些業務層函數的邏輯需要一個值傳遞給數據層的值,那麼你可以爲該層中的所有函數設置默認值。但是,我真的不認爲這是必要的。

關鍵是,默認情況下,他們實際需要。