วันนี้ฉันได้มีการถกเถียงกันอย่างดุเดือดกับนักพัฒนาคนอื่นในองค์กรของฉันเกี่ยวกับสถานที่และวิธีการเพิ่มวิธีในคลาสที่แมปฐานข้อมูล เราใช้sqlalchemy
และส่วนสำคัญของฐานรหัสที่มีอยู่ในโมเดลฐานข้อมูลของเรานั้นเป็นเพียงเล็กน้อยของคุณสมบัติที่แมปด้วยชื่อคลาสการแปลเชิงกลจากตารางฐานข้อมูลไปยังวัตถุหลาม
ในการโต้แย้งตำแหน่งของฉันคือว่าค่าหลักของการใช้ ORM คือคุณสามารถแนบพฤติกรรมและอัลกอริทึมในระดับต่ำกับคลาสที่แมป โมเดลเป็นคลาสแรกและถาวรเป็นอันดับที่สอง (อาจคงอยู่โดยใช้ xml ในระบบไฟล์คุณไม่จำเป็นต้องสนใจ) มุมมองของเขาคือพฤติกรรมใด ๆ ที่เป็น "ตรรกะทางธุรกิจ" และจำเป็นต้องเป็นของทุกที่ แต่ในรูปแบบถาวรซึ่งจะใช้สำหรับการคงอยู่ของฐานข้อมูลเท่านั้น
ฉันคิดว่าแน่นอนว่ามีความแตกต่างระหว่างตรรกะทางธุรกิจคืออะไรและควรแยกออกจากกันเนื่องจากมีการแยกจากระดับล่างของวิธีการใช้งานและตรรกะโดเมนซึ่งฉันเชื่อว่าเป็นนามธรรมที่จัดทำโดยคลาสโมเดล เป็นที่ถกเถียงกันในย่อหน้าก่อนหน้า แต่ฉันมีเวลายากที่จะวางนิ้วลงบนสิ่งที่เป็น ฉันมีความรู้สึกที่ดีขึ้นเกี่ยวกับสิ่งที่อาจเป็น API (ซึ่งในกรณีของเราคือ HTTP "ReSTful") ผู้ใช้จะเรียกใช้ API กับสิ่งที่พวกเขาต้องการทำแตกต่างจากสิ่งที่พวกเขาได้รับอนุญาตให้ทำ เสร็จแล้ว
tl; dr: ประเภทใดที่สามารถหรือควรไปในวิธีการในคลาสที่แมปเมื่อใช้ ORM และสิ่งที่ควรจะออกไปอยู่ในอีกชั้นหนึ่งของสิ่งที่เป็นนามธรรม?