【问题标题】:MVC vs N-tier architecture - Singletons vs Objects (Django/Python)MVC 与 N 层架构 - 单例与对象 (Django/Python)
【发布时间】: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 本身,而不是每次都传递emailtoken。但随后我将不得不设置作用域变量或输入更多字符

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


    【解决方案1】:

    MVC 和 n 层架构顾名思义就是架构模式(甚至不是互斥的)。

    单例是一种设计模式。

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 2011-04-19
      • 2011-06-02
      • 2015-03-17
      • 2010-11-14
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2010-12-09
      相关资源
      最近更新 更多