【发布时间】:2023-03-27 18:40:01
【问题描述】:
我在 Django 中有一个类,负责通过 http 与另一个服务通信。目前在应用程序中它被用作单例。但是,每种方法都需要相同的 2-3 条数据(来自用户会话)才能运行。此外,每个方法都必须多次调用类中的其他方法,这意味着数据会非常频繁地作为参数传递
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 种方法,它们通过 Django 中的一个简单的 Api 层进行联系。我可以简单地传递session 本身,而不是每次都传递email 和token。但随后我将不得不设置作用域变量或输入更多字符
def get_user_group(self, session):
email = session.get("email")
token = session.get("token")
这似乎是重复的。我的解决方案是停止使用 Singleton 并在 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
但是,我的同事说单例模式要好得多,因为它更符合 N 层架构。我以前没有听过这个词,但是即使在阅读了 StackOverflow 上的所有MVC v n-tier 问题之后,我似乎仍然不明白他的来历。尽我所能告诉 n 层只是意味着一切都通过中间层进行通信,而不是直接与组件通信。我看不出我不使用单例是如何使我的程序变得更糟或不那么惯用的。
【问题讨论】:
标签: python django model-view-controller architecture n-tier-architecture