這不是我面臨的問題,只是一場公開的討論。在Django Rest框架中,我們聲明了一個decorator @api_view[],它接受如下參數
- POST
- GET
- PUT
- DELETE
在我的例子中,我可以在decorator中放置多個參數,并使一個函數具有多個責任,例如
@api_view['POST', 'GET]
def fbv_list(request):`
if request.method == 'POST':
#do something
if request.method == 'GET':
#do something
在這種情況下fbv_list做了不止一件事,即POST和GET。在這種情況中,這個函數不符合SOLID原則中的單一責任類????
這是我的問題,如果是,應該怎么做才能避免打破固體。
提前感謝。
我將引用Django's官方文檔中的視圖定義來開始我的回答:
視圖的職責是將web請求作為輸入,并返回web響應作為輸出。DRF API也是“視圖”,因此該定義也適用于此。
進一步細分,視圖的核心職責是接受請求并對其執行“任意”邏輯。什么是武斷的?當視圖收到請求時,它將如何決定要執行的操作集?請求是否試圖從系統中獲取一些信息、創建記錄,或者對數據模型進行復雜的更新操作?這是視圖必須決定的,因為這是它的主要目的。根據輸入請求的性質,輸出類型將發生變化。然而,核心功能仍然相同。它不違反SRP。我還列出了使用相同模式的Django文檔中的一個代碼片段:
注意:請檢查此鏈接,以了解SRP如何具有誤導性,以及其目的和用法如何主觀。