MVC与N层架构 - Singletons vs Objects(Django / Python)

时间:2014-10-17 20:24:45

标签: python django model-view-controller architecture n-tier-architecture

我在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层进行联系。我不是每次都传递emailtoken,而是简单地传递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只是意味着一切都通过中间层进行通信,而不是直接与组件通信。我没有看到我不使用单身人士如何使我的节目变得更糟或更少惯用。

1 个答案:

答案 0 :(得分:1)

MVC和n层架构是最后一个暗示ARCHITECTURAL模式的名称(甚至不是mutualy独家)。

Singleton是一种DESIGN模式。

在具有特定体系结构的应用程序中,您可以根据应用程序的用例使用任意数量的设计模式。此用例使一个或多个设计模式最适合实现它们。

对于Singleton,如果您认为应用程序中应该只有该类的一个实例,那么您可以使用它,如果需要多个实例或更合适,则不需要。这是唯一的标准。

所以不,你没有做错任何事,