我在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的。每次我都不通過email
和token
,我可以簡單地通過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層意味着一切都通過中間層進行通信,而不是直接與組件進行交流。我不明白我沒有使用單身是如何使我的程序變得更差或者更少地道的。