MVC与N层架构 - 单例与对象(Django/Python)

0 投票
1 回答
1426 浏览
提问于 2025-04-28 04:45

我在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层进行联系。与其每次都传递emailtoken,我可以直接传递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

不过,我的同事说单例模式更好,因为它更符合N层架构。我之前没听过这个术语,但即使看了StackOverflow上关于MVC与N层的问题,我还是不太明白他的意思。根据我的理解,N层架构就是所有的交流都通过一个中介层,而不是直接跟组件对话。我看不出不使用单例模式会让我的程序变得更糟或不够规范。

暂无标签

1 个回答

1

MVC和多层架构就像名字所说的,是一种架构模式(而且它们并不是互相排斥的)。

而单例模式则是一种设计模式。

在一个特定架构的应用中,你可以根据应用的需求使用任意数量的设计模式。这些需求会让一种或多种设计模式在实现时变得更合适。

以单例模式为例,如果你觉得在你的应用中只需要这个类的一个实例,那就可以使用单例模式;如果需要多个实例或者其他方式更合适,那就不使用。这就是唯一的标准。

所以,不,你并没有做错什么。

撰写回答