เช่นเดียวกับกฎใด ๆ ฉันคิดว่าสิ่งสำคัญที่นี่คือการพิจารณาวัตถุประสงค์ของกฎวิญญาณและไม่ได้ติดหล่มในการวิเคราะห์อย่างชัดเจนว่ากฎได้รับการกล่าวถึงในตำราบางเล่มอย่างไรและนำไปใช้กับกรณีนี้อย่างไร เราไม่จำเป็นต้องเข้าหานักกฎหมายเช่นนี้ วัตถุประสงค์ของกฎคือช่วยให้เราเขียนโปรแกรมได้ดีขึ้น มันไม่เหมือนวัตถุประสงค์ของการเขียนโปรแกรมคือการรักษากฎ
วัตถุประสงค์ของกฎความรับผิดชอบเดียวคือการทำให้โปรแกรมเข้าใจง่ายและดูแลรักษาโดยการทำให้แต่ละฟังก์ชั่นทำสิ่งที่อยู่ในตัวเองและเชื่อมโยงกัน
ตัวอย่างเช่นฉันเคยเขียนฟังก์ชั่นที่ฉันเรียกว่า "checkOrderStatus" ซึ่งระบุว่าคำสั่งนั้นค้างอยู่ส่งคำสั่งซื้อคืนหรืออะไรก็ตามและส่งคืนรหัสที่ระบุ จากนั้นโปรแกรมเมอร์คนอื่นก็เข้ามาและแก้ไขฟังก์ชั่นนี้เพื่ออัพเดทปริมาณสินค้าในมือเมื่อมีการส่งคำสั่งซื้อ นี่เป็นการละเมิดหลักการความรับผิดชอบอย่างรุนแรงเพียงครั้งเดียว โปรแกรมเมอร์คนอื่นที่อ่านโค้ดนั้นในภายหลังจะเห็นชื่อฟังก์ชั่นดูว่ามีการใช้ค่าส่งคืนอย่างไรและอาจไม่เคยสงสัยเลยว่าจะมีการอัพเดทฐานข้อมูล ผู้ที่ต้องการรับสถานะการสั่งซื้อโดยไม่ต้องอัปเดตปริมาณในมือจะอยู่ในตำแหน่งที่น่าอึดอัดใจ: เขาควรจะเขียนฟังก์ชันใหม่ที่ทำซ้ำส่วนคำสั่งซื้อหรือไม่ เพิ่มการตั้งค่าสถานะเพื่อบอกว่าจะทำการปรับปรุง db หรือไม่ เป็นต้น
ในทางกลับกันฉันจะไม่พูดพล่ามสิ่งที่ถือเป็น "สองสิ่ง" ฉันเพิ่งเขียนฟังก์ชันที่ส่งข้อมูลลูกค้าจากระบบของเราไปยังระบบของลูกค้า ฟังก์ชั่นนั้นทำการฟอร์แมตข้อมูลใหม่เพื่อให้ตรงตามความต้องการ ตัวอย่างเช่นเรามีบางฟิลด์ที่อาจเป็นโมฆะในฐานข้อมูลของเรา แต่พวกเขาไม่อนุญาตให้มีโมฆะดังนั้นเราต้องกรอกข้อความจำลอง "ไม่ได้ระบุ" หรือฉันลืมคำที่แน่นอน ฟังก์ชั่นนี้กำลังทำสองสิ่ง: จัดรูปแบบข้อมูลและส่งใหม่ แต่ฉันจงใจทำสิ่งนี้ในฟังก์ชั่นเดียวมากกว่าที่จะ "ฟอร์แมต" และ "ส่ง" เพราะฉันไม่ต้องการที่จะเคยส่งโดยไม่ต้องฟอร์แมต ฉันไม่ต้องการให้ใครบางคนเขียนสายใหม่และไม่รู้ว่าเขาต้องโทรฟอร์แมตแล้วส่ง
ในกรณีของคุณอัพเดตฐานข้อมูลและส่งคืนอิมเมจของบันทึกที่เขียนดูเหมือนสองสิ่งที่อาจเข้ากันได้อย่างมีเหตุผลและหลีกเลี่ยงไม่ได้ ฉันไม่ทราบรายละเอียดของใบสมัครของคุณดังนั้นฉันไม่สามารถพูดได้อย่างชัดเจนว่านี่เป็นความคิดที่ดีหรือไม่ แต่ฟังดูน่าเชื่อถือ
หากคุณกำลังสร้างวัตถุในหน่วยความจำที่เก็บข้อมูลทั้งหมดสำหรับบันทึกการเรียกใช้ฐานข้อมูลเพื่อเขียนสิ่งนี้และจากนั้นส่งคืนวัตถุสิ่งนี้ทำให้รู้สึกได้อย่างมาก คุณมีวัตถุอยู่ในมือของคุณ ทำไมไม่ลองส่งคืนล่ะ หากคุณไม่ส่งคืนวัตถุผู้เรียกจะรับมันได้อย่างไร เขาจะต้องอ่านฐานข้อมูลเพื่อให้ได้วัตถุที่คุณเพิ่งเขียน? ดูเหมือนว่าค่อนข้างไม่มีประสิทธิภาพ เขาจะพบบันทึกได้อย่างไร คุณรู้คีย์หลักหรือไม่? หากมีคนบอกว่ามันเป็น "ถูกกฎหมาย" สำหรับฟังก์ชั่นการเขียนเพื่อส่งคืนคีย์หลักเพื่อให้คุณสามารถอ่านบันทึกอีกครั้งทำไมไม่เพียงแค่ส่งคืนระเบียนทั้งหมดดังนั้นคุณไม่จำเป็นต้อง? ความแตกต่างคืออะไร?
ในทางตรงกันข้ามถ้าการสร้างวัตถุเป็นงานค่อนข้างแตกต่างจากการเขียนบันทึกฐานข้อมูลและผู้โทรอาจต้องการเขียน แต่ไม่ได้สร้างวัตถุดังนั้นสิ่งนี้อาจสิ้นเปลือง หากผู้เรียกอาจต้องการวัตถุ แต่ไม่ทำการเขียนคุณจะต้องให้วิธีอื่นในการรับวัตถุซึ่งอาจหมายถึงการเขียนรหัสซ้ำซ้อน
แต่ฉันคิดว่าสถานการณ์ 1 มีแนวโน้มมากกว่าดังนั้นฉันจึงอาจพูดว่าไม่มีปัญหา