2013-10-22 52 views
1

我正在開發一個使用大量客戶端的系統。
有些客戶需要系統的特定行爲,例如:不同的html代碼或不同的報告,或者他們希望跳過某些命令執行。
要指定我用這樣的代碼這種行爲:
針對特定客戶的不同行爲

if sender.id == 123: 
    do_something() 

現在我有很多的字符串用「如果」的,它確實可以防止代碼讀取。有什麼模式可以解決這個問題嗎?總的來說,我正在尋找可以將邏輯從獨特條件中分離出來的方式。

回答

0

我決定使用裝飾器。當我有一些特定於某些客戶端的代碼時,我用包含裝飾器的函數來包裝它,該裝飾器放置在「decorators.py」文件中。例如:

 
view.py 

def some_fuction(request): 
    do_some_usual_stuff() 
    ... 
    @do_specific_stuff_decorator 
    def do_specific_stuff(sender): 
     return sender.price1 + sender.price2 

    value = do_specific_stuff(request.sender) 
    ... 

decorators.py 

def do_specific_stuff_decorator(do_specific_stuff) 
    def inner(sender): 
     #sender foo doesn't need to pay price2 in some cases 
     if sender.name = 'foo': 
      price = sender.price1 
     else: 
      price = do_specific_stuff(sender) 
     return value 
    return inner 

裝飾的這種用法提醒你,這部分代碼包含了一些客戶特定befaviour但很顯然閱讀最重要的代碼。

+0

順便說一句,把它建立在團體而不是個人的基礎上是不是更好的主意? Django對用戶組提供了強有力的支持,並且將特定用戶硬編碼到t中似乎是一個糟糕的主意。我會爲應用程序的行爲不同的人創建一個組,以便可以輕鬆地將其添加到該組(可以通過編程方式完成) –

0

如果是純粹的演示(模板),您可以爲不同的用戶行爲指定特定的模板。
我也建議不要檢查用戶標識,而是使用某種額外的模型來擴展用戶模型。因此可以在不更改代碼的情況下編輯數據。

相關問題