ที่ควรวางตรรกะทางธุรกิจหลามใน django


26

ฉันเพิ่งเริ่มเรียนรู้การพัฒนา Django / Python / Web ปัญหานี้ทำให้ฉันหนักใจมาระยะหนึ่งแล้ว

ฉันกำลังสร้างแอปพลิเคชันที่มีแม่แบบหลายรายการใน Django ฉันมี views.py ซึ่งเป็นเพียงการแสดงผลการตอบสนองต่อเทมเพลตนั้นและฉันมี models.py ที่ฉันได้จัดทำฐานข้อมูลของฉัน ในหนึ่งในเทมเพลตของฉันฉันต้องอัปโหลดภาพ (ซึ่งฉันสามารถทำได้) และฉันต้องเรียกใช้ลอจิกซึ่งขึ้นอยู่กับคุณสมบัติของภาพที่อัปโหลด (ยังไม่เสร็จ) ตรรกะนี้เกี่ยวข้องกับการคำนวณจำนวนมาก หลังจากทำการคำนวณตรรกะควรส่งคืนข้อมูล (พิกัด) ที่ประมวลผลไปยังเทมเพลต

ฉันสามารถดำเนินการทั้งหมดนี้ได้สำเร็จในแอปพลิเคชันหลามแบบสแตนด์อโลนสำหรับการเรียกใช้ไฟล์หลามหลังจากที่อื่น อย่างไรก็ตามเนื่องจากตอนนี้ฉันต้องการทำให้เว็บแอปพลิเคชันนี้ฉันเริ่มใช้เฟรมเวิร์ก Django

ฉันทำการค้นหาจำนวนมาก แต่ฉันยังคงไม่สามารถระบุได้ว่าฉันควรวางไฟล์ Python นี้ตรงไหนกับตรรกะทั้งหมด ฉันควรจะมีไฟล์ที่ใช้คลาสอื่น(logic.py)และเรียกมันจากview.py? ฉัน googled และพบว่านักพัฒนาจำนวนมากวางตรรกะทางธุรกิจของตนใน models.py ใน Django อย่างไรก็ตามฉันรู้สึกว่ามันไม่ถูกต้องเพราะรูปแบบควรสื่อสารกับส่วนหลังเท่านั้น ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมขอบคุณล่วงหน้า



พบบทความที่กล่าวถึงหัวข้อนี้อย่างกว้างขวาง (โดยคำนึงถึงปิรามิดไม่ใช่ django) มีลูกสาวที่เหมาะสมบางคน: nando.oui.com.br/2014/04/01/…
kratenko

คำตอบ:


16

ฉันทำการค้นหาจำนวนมาก แต่ฉันยังคงไม่สามารถระบุได้ว่าฉันควรวางไฟล์ Python นี้ตรงไหนกับตรรกะทั้งหมด

มีตัวเลือกมากมายขึ้นอยู่กับความต้องการของคุณ:

  1. เพิ่มตรรกะเพื่อเช่นImageรูปแบบ นี่เป็นตัวเลือกที่มีประโยชน์หากคุณต้องการจัดเก็บข้อมูลเมตาต่อภาพในฐานข้อมูลและแต่ละอินสแตนซ์โมเดล (แต่ละภาพ) จะถูกประมวลผลด้วยตัวเอง

  2. เพิ่มตรรกะเป็นงูหลามธรรมดาชั้นเช่นในไฟล์ที่เรียกว่าImage image.pyไม่มีสิ่งใดใน Django ที่ จำกัด ไม่ให้คุณเพิ่มตรรกะนอกเหนือจากในviewsหรือmodelsโมดูล นี่เป็นตัวเลือกที่ดีถ้าตรรกะภาพเป็นองค์ประกอบหลักของแอพ Django ของคุณ (เช่นแอปประมวลผลรูปภาพ)

  3. สร้างโครงการ Python แยกต่างหากที่ให้ตรรกะแล้วเรียกมันจากมุมมองของคุณ ตรวจสอบให้แน่ใจว่าติดตั้งโครงการนี้ในสภาพแวดล้อม Python ของแอพ Django ของคุณ ตัวเลือกนี้จะใช้ได้หากแอป Django ของคุณมีวัตถุประสงค์เพื่ออัปโหลดและดูภาพหรือเพื่อแสดงผลลัพธ์ของการประมวลผลภาพเพื่อตอบสนองต่อคำขอของผู้ใช้โดยตรง แต่โครงการอื่น ๆ ก็สามารถนำไปใช้ในการประมวลผลภาพได้เช่นกัน

  4. สร้างแอปแยกต่างหากที่ประมวลผลคำขอแบบอะซิงโครนัสและทำงานแยกจากแอพ Django ของคุณ ตัวเลือกนี้มีประโยชน์หากคุณต้องการแยกการประมวลผลภาพจากรอบคำขอของแอปประมวลผลภาพจำนวนมากหรือการคำนวณแต่ละครั้งใช้เวลานานเกินไปในการแก้ปัญหาภายในเวลาของรอบคำขอ (พูดภายในระยะ 500ms ถึง 1 วินาที) .

ฉันรู้สึกว่ามันไม่ถูกต้องเนื่องจากรูปแบบควรสื่อสารกับส่วนหลังเท่านั้น

ไม่มีอะไรใน Django ที่ต้องใช้แบบจำลองในการสื่อสารกับส่วนหลังหรือแทนที่จะเป็นฐานข้อมูล ฉันคิดว่าคุณกำลังผสมความหมายของสิ่งที่ Django พิจารณาโดยทั่วไปว่าแบบจำลอง (กล่าวคือนามธรรมของหนึ่งหรือหลายตารางในฐานข้อมูล) เทียบกับคำว่าแบบจำลองเป็นโครงสร้างการออกแบบ (เช่นใน Domain Driven Design)


ขอบคุณ! มันลึกซึ้งจริงๆฉันรู้สึกว่าตัวเลือกหมายเลข 3 น่าจะดีพอสำหรับฉัน :)
adrita

มันตกลงเพื่อประเมินเชิงลบคำตอบ แต่โปรดเพิ่มความคิดเห็นเพื่อให้สามารถปรับปรุงให้ดีขึ้น
miraculixx

5

Daniel Greenfeld ผู้เขียนร่วมของ "Two Scoops of Django ขอแนะนำตรรกะทางธุรกิจที่ควรอยู่ในแบบจำลอง" เมื่อเป็นไปได้หรือในรูปแบบที่คุณต้องทำ "สำหรับสำเนาของ Bart ที่เป็นไปได้ django อาจคล้ายกับ MVC แต่เป็น ไม่ใช่ MVC ดังที่อธิบายไว้ในเอกสารอย่างเป็นทางการของ django @adrita ฉันคิดว่าคุณต้องไปทบทวนเอกสารอย่างเป็นทางการเพื่อช่วยให้คุณเข้าใจแนวคิดของโมเดลมุมมองและเทมเพลตดีขึ้นเล็กน้อย


ขอบคุณสำหรับคำแนะนำของคุณ จะอ่านเอกสารอย่างแน่นอน :)
adrita

ดีใจที่คุณได้รับการแก้ไข @ miraculixx ให้คำอธิบายที่มั่นคง หากคุณอยู่บน fb เข้าร่วมกลุ่มกรอบงาน django python
ตาย

2

ในเอกสารอย่างเป็นทางการของ Django https://docs.djangoproject.com/en/1.11/ได้กล่าวว่า:

Django มีแนวคิดของ "มุมมอง" เพื่อสรุปเหตุผลที่รับผิดชอบในการประมวลผลคำขอของผู้ใช้และเพื่อตอบกลับ ค้นหาสิ่งที่คุณต้องรู้เกี่ยวกับมุมมองผ่านลิงค์ด้านล่าง:

Django แนะนำตรรกะที่จะอยู่ในมุมมอง


3
นั่นไม่จำเป็นต้องเหมือนกับตรรกะทางธุรกิจ
แรก

1
ฉันไม่เห็นด้วยกับการตีความเอกสาร Django นั้น ที่อื่นในเอกสาร Django (เช่นสำหรับModel.clean()) มันบอกเป็นนัยมากกว่าอีกเล็กน้อยว่า (ถ้าเราเพียงแค่โครงการ Django ในโลกแห่งความจริงสำหรับโมเดลแม่แบบและมุมมอง) - ตรรกะทางธุรกิจ (หรืออย่างน้อยที่สุดการตรวจสอบ) เป็นของ เลเยอร์โมเดล โปรดทราบว่าฉันไม่ได้รวมฟอร์มในการทำให้เข้าใจง่ายซึ่งเป็นที่ยอมรับได้เช่นกัน
Kye R
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.