python应用体系_python-大型django应用程序体系结构

孙京
2023-12-01

如何适当地构建一个较大的Django网站,以保持可测试性和可维护性?

本着最好的django精神(我希望),我们开始时不太关心网站不同部分之间的去耦.我们确实将其分为不同的应用程序,但是通过共同使用模型类和直接方法调用,它们直接相互依赖.

这变得越来越纠结.例如,我们的一项操作/服务如下所示:

def do_apply_for_flat(user, flat, bid_amount):

assert can_apply(user, flat)

application = Application.objects.create(

user=user, flat=flat, amount=bid_amount,

status=Application.STATUS_ACTIVE)

events.logger.application_added(application)

mails.send_applicant_application_added(application)

mails.send_lessor_application_received(application)

return application

该功能不仅执行实际的业务流程,不执行功能,它还处理事件记录并向相关用户发送邮件.我认为这种方法没有内在的错误.但是,正确地推理代码甚至测试应用程序变得越来越困难,因为从知识和程序上分离各个部分变得越来越困难.

因此,我的问题是,大男孩如何构建应用程序,使得:

>可以隔离测试应用程序的不同部分

>通过仅启用特定测试确实需要的零件,测试可以保持快速

>减少代码耦合

我对这个问题的看法是引入一个集中的信号中心(单个python文件中只是一堆django信号),单个django应用可以发布或订阅.上面的示例函数将发布一个application_added事件,邮件和事件应用程序将监听该事件.然后,为了进行有效的测试,我将断开不需要的部分.这也大大增加了解耦,因为服务根本不需要知道发送邮件.

但是,我不确定,因此对这些问题的公认做法非常感兴趣.

解决方法:

将应用程序的某些部分转移到不同的微服务.这将使您的应用程序的某些部分专注于正确执行一两项操作(例如,事件记录,电子邮件).代码耦合也减少了,站点的不同部分也可以单独进行测试.

The microservice architecture style involves developing a single application as a collection of smaller services that communicates usually via an API.

您可能需要使用类似Flask的较小框架.

资源:

有关微服务的更多信息,请单击此处:

标签:python,django

 类似资料: