2014-10-17 36 views
0

我在Django中有一個類,負責通過http與另一個服務對話。目前在應用程序中它被用作單例。但是,每種方法都需要相同的2-3個數據(來自用戶的會話)才能運行。此外,每種方法有多次調用類中的其他方法,這意味着得到的數據作爲參數傳遞非常頻繁MVC vs N層架構 - 單身人士vs對象(Django/Python)

class MySingletonClass(): 
    def get_user_group(self, email, token): 
     # request to service 

    def get_user_picture(self, email, token, pic_id): 
     # request to service 

    def get_user_item(self, email, token, item_id): 
     # request to service 

總共有大約14的方法,他們通過一個簡單的API層接觸Django的。每次我都不通過emailtoken,我可以簡單地通過session本身。但後來我不得不設置範圍變量或輸入更多字符

def get_user_group(self, session): 
    email = session.get("email") 
    token = session.get("token") 

這似乎是重複的。我的解決辦法是停止使用獨立的,並與在API層

def my_api_endpoint(request): 
    myObj = MyClass(request.session) 

    return HttpResponse(myObj.get_user_group()) 



class MyClass(): 
     def __init__(self, session): 
      self.email = session.get("email") 
      self.token = session.get("token") 

     def get_user_group(self): 
      # request to service 

     def get_user_picture(self, pic_id): 
      # request to service 

     def get_user_item(self, item_id): 
      # request to service 

然而,會話信息實例化類,我的同事說,Singleton模式要好得多,因爲它更加牢固粘合N層建築。我之前沒有聽說過這個術語,但即使在閱讀關於StackOverflow的所有MVC v n-tier問題之後,我仍然無法得到他來自哪裏。最好的情況是我可以告訴n層意味着一切都通過中間層進行通信,而不是直接與組件進行交流。我不明白我沒有使用單身是如何使我的程序變得更差或者更少地道的。

回答

1

MVC和n層體系結構是最後一個暗示ARCHITECTURAL模式的名稱(甚至不互相排斥)。

Singleton是一種設計模式。

在具有一定的架構,你可以使用任意數量的設計模式的應用,根據應用程序的使用情況。這個用例使得一個或多個設計模式最適合於實現它們。

在單身的情況下,如果你認爲應該只有一個類的實例在您的應用程序,然後你使用它,如果需要多個實例,或更適合,你不知道。這是唯一的標準。

所以不,你沒有做錯什麼,