我在Django有一个班,负责通过http与另一个服务交谈。目前在应用程序中它被用作Singleton。但是,每种方法都需要相同的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层进行联系。我不是每次都传递email
和token
,而是简单地传递session
本身。但是我必须要么设置范围内的变量或者输入更多的字符
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
然而,我的同事说Singleton模式更好,因为它更好地遵循N层架构。我之前没有听过这个词,但即使在阅读了StackOverflow上的所有MVC v n-tier
个问题之后,我仍然无法得到他来自的地方。最好的我可以告诉n-tier只是意味着一切都通过中间层进行通信,而不是直接与组件通信。我没有看到我不使用单身人士如何使我的节目变得更糟或更少惯用。
答案 0 :(得分:1)
MVC和n层架构是最后一个暗示ARCHITECTURAL模式的名称(甚至不是mutualy独家)。
Singleton是一种DESIGN模式。
在具有特定体系结构的应用程序中,您可以根据应用程序的用例使用任意数量的设计模式。此用例使一个或多个设计模式最适合实现它们。
对于Singleton,如果您认为应用程序中应该只有该类的一个实例,那么您可以使用它,如果需要多个实例或更合适,则不需要。这是唯一的标准。
所以不,你没有做错任何事,