我正在開發一個使用大量客戶端的系統。
有些客戶需要系統的特定行爲,例如:不同的html代碼或不同的報告,或者他們希望跳過某些命令執行。
要指定我用這樣的代碼這種行爲:
針對特定客戶的不同行爲
if sender.id == 123:
do_something()
現在我有很多的字符串用「如果」的,它確實可以防止代碼讀取。有什麼模式可以解決這個問題嗎?總的來說,我正在尋找可以將邏輯從獨特條件中分離出來的方式。
我正在開發一個使用大量客戶端的系統。
有些客戶需要系統的特定行爲,例如:不同的html代碼或不同的報告,或者他們希望跳過某些命令執行。
要指定我用這樣的代碼這種行爲:
針對特定客戶的不同行爲
if sender.id == 123:
do_something()
現在我有很多的字符串用「如果」的,它確實可以防止代碼讀取。有什麼模式可以解決這個問題嗎?總的來說,我正在尋找可以將邏輯從獨特條件中分離出來的方式。
我決定使用裝飾器。當我有一些特定於某些客戶端的代碼時,我用包含裝飾器的函數來包裝它,該裝飾器放置在「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但很顯然閱讀最重要的代碼。
如果是純粹的演示(模板),您可以爲不同的用戶行爲指定特定的模板。
我也建議不要檢查用戶標識,而是使用某種額外的模型來擴展用戶模型。因此可以在不更改代碼的情況下編輯數據。
順便說一句,把它建立在團體而不是個人的基礎上是不是更好的主意? Django對用戶組提供了強有力的支持,並且將特定用戶硬編碼到t中似乎是一個糟糕的主意。我會爲應用程序的行爲不同的人創建一個組,以便可以輕鬆地將其添加到該組(可以通過編程方式完成) –