MVC与N层架构 - 单例与对象(Django/Python)
我在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层进行联系。与其每次都传递email
和token
,我可以直接传递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和多层架构就像名字所说的,是一种架构模式(而且它们并不是互相排斥的)。
而单例模式则是一种设计模式。
在一个特定架构的应用中,你可以根据应用的需求使用任意数量的设计模式。这些需求会让一种或多种设计模式在实现时变得更合适。
以单例模式为例,如果你觉得在你的应用中只需要这个类的一个实例,那就可以使用单例模式;如果需要多个实例或者其他方式更合适,那就不使用。这就是唯一的标准。
所以,不,你并没有做错什么。