python应用体系_python-大型django应用程序体系结构
如何適當(dāng)?shù)貥?gòu)建一個較大的Django網(wǎng)站,以保持可測試性和可維護性?
本著最好的django精神(我希望),我們開始時不太關(guān)心網(wǎng)站不同部分之間的去耦.我們確實將其分為不同的應(yīng)用程序,但是通過共同使用模型類和直接方法調(diào)用,它們直接相互依賴.
這變得越來越糾結(jié).例如,我們的一項操作/服務(wù)如下所示:
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
該功能不僅執(zhí)行實際的業(yè)務(wù)流程,不執(zhí)行功能,它還處理事件記錄并向相關(guān)用戶發(fā)送郵件.我認為這種方法沒有內(nèi)在的錯誤.但是,正確地推理代碼甚至測試應(yīng)用程序變得越來越困難,因為從知識和程序上分離各個部分變得越來越困難.
因此,我的問題是,大男孩如何構(gòu)建應(yīng)用程序,使得:
>可以隔離測試應(yīng)用程序的不同部分
>通過僅啟用特定測試確實需要的零件,測試可以保持快速
>減少代碼耦合
我對這個問題的看法是引入一個集中的信號中心(單個python文件中只是一堆django信號),單個django應(yīng)用可以發(fā)布或訂閱.上面的示例函數(shù)將發(fā)布一個application_added事件,郵件和事件應(yīng)用程序?qū)⒈O(jiān)聽該事件.然后,為了進行有效的測試,我將斷開不需要的部分.這也大大增加了解耦,因為服務(wù)根本不需要知道發(fā)送郵件.
但是,我不確定,因此對這些問題的公認做法非常感興趣.
解決方法:
將應(yīng)用程序的某些部分轉(zhuǎn)移到不同的微服務(wù).這將使您的應(yīng)用程序的某些部分專注于正確執(zhí)行一兩項操作(例如,事件記錄,電子郵件).代碼耦合也減少了,站點的不同部分也可以單獨進行測試.
The microservice architecture style involves developing a single application as a collection of smaller services that communicates usually via an API.
您可能需要使用類似Flask的較小框架.
資源:
有關(guān)微服務(wù)的更多信息,請單擊此處:
標(biāo)簽:python,django
總結(jié)
以上是生活随笔為你收集整理的python应用体系_python-大型django应用程序体系结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php获取变量数据类型,php如何确定变
- 下一篇: java 图类_Java集合类,一张图说