python应用体系_python-大型django应用程序体系结构
如何適當地構建一個較大的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
總結
以上是生活随笔為你收集整理的python应用体系_python-大型django应用程序体系结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php获取变量数据类型,php如何确定变
- 下一篇: python程序文件是什么_.py文件是