ไม่มีคำตอบที่ชัดเจนว่า แม้ว่าคำถามจะแคบ แต่คำอธิบายไม่ได้
สำหรับฉันมันเป็นอะไรที่เหมือนมีดโกนของอ็อกคัมถ้าคุณต้องการ มันเป็นอุดมคติที่ฉันพยายามวัดรหัสปัจจุบันของฉันกับ มันยากที่จะตอกตะปูลงด้วยคำพูดธรรมดาและเรียบง่าย อุปมาอีกเรื่องหนึ่งคือ“ หัวข้อเดียว” ซึ่งเป็นนามธรรมเช่นยากที่จะเข้าใจเช่นเดียวกับ»ความรับผิดชอบเดี่ยว« คำอธิบายที่สามคือ "การจัดการกับนามธรรมระดับหนึ่ง"
นั่นหมายความว่าในทางปฏิบัติจริง ๆ ?
เมื่อเร็ว ๆ นี้ฉันใช้รูปแบบของการเข้ารหัสซึ่งส่วนใหญ่ประกอบด้วยสองขั้นตอน:
ขั้นตอนที่ดีที่สุดที่ฉันอธิบายว่าเป็นความโกลาหลความคิดสร้างสรรค์ ในขั้นตอนนี้ฉันเขียนโค๊ดเป็นความคิดที่ไหล - เช่นดิบและน่าเกลียด
ระยะที่สองเป็นสิ่งที่ตรงกันข้ามอย่างสมบูรณ์ มันเหมือนทำความสะอาดหลังจากพายุเฮอริเคน สิ่งนี้ใช้เวลาทำงานและมีระเบียบวินัยมากที่สุด จากนั้นฉันก็ดูรหัสจากมุมมองของนักออกแบบ
ตอนนี้ฉันทำงานเป็นส่วนใหญ่ใน Python ซึ่งทำให้ฉันสามารถคิดถึงวัตถุและคลาสได้ในภายหลัง First Phase I - ฉันเขียนเฉพาะฟังก์ชั่นและกระจายมันโดยการสุ่มในโมดูลที่แตกต่างกัน ในระยะที่สองหลังจากที่ฉันเริ่มทำสิ่งต่าง ๆ ฉันจะได้เห็นอย่างชัดเจนว่าโมดูลเกี่ยวข้องกับส่วนใดของโซลูชัน และในขณะที่อ่านผ่านโมดูลต่างๆหัวข้อต่างๆก็ปรากฏขึ้นสำหรับฉัน ฟังก์ชั่นบางอย่างเกี่ยวข้องกับหัวเรื่อง เหล่านี้เป็นผู้สมัครที่ดีสำหรับการเรียน และหลังจากที่ฉันเปลี่ยนฟังก์ชั่นเป็นคลาส - ซึ่งเกือบจะเสร็จสิ้นด้วยการย่อหน้าและเพิ่มself
ลงในรายการพารามิเตอร์ใน python;) - ฉันใช้SRP
เช่น Occam's Razor เพื่อตัดการทำงานให้กับโมดูลและคลาสอื่น ๆ
ตัวอย่างปัจจุบันอาจกำลังเขียนฟังก์ชันการส่งออกขนาดเล็กในวันอื่น ๆ
มีความต้องการแผ่นcsv , excelและexcelรวมกันใน zip
ฟังก์ชั่นธรรมดานั้นทำในสามมุมมอง (= ฟังก์ชั่น) แต่ละฟังก์ชั่นใช้วิธีการทั่วไปในการกำหนดตัวกรองและวิธีที่สองเพื่อดึงข้อมูล จากนั้นในแต่ละฟังก์ชั่นการเตรียมการส่งออกจึงเกิดขึ้นและได้รับการตอบสนองจากเซิร์ฟเวอร์
มีสิ่งที่เป็นนามธรรมมากเกินไปในระดับที่ผสม:
I) จัดการกับคำขอ / ตอบกลับขาเข้า / ขาออก
II) การพิจารณาตัวกรอง
III) การดึงข้อมูล
IV) การเปลี่ยนแปลงข้อมูล
ขั้นตอนง่าย ๆ คือการใช้หนึ่งนามธรรม ( exporter
) เพื่อจัดการกับเลเยอร์ II-IV ในขั้นตอนแรก
เพียงคนเดียวที่ยังคงได้รับการหัวข้อการจัดการกับการร้องขอ / การตอบสนอง ที่ระดับเดียวกันของ abstraction กำลังดึงพารามิเตอร์คำขอซึ่งก็โอเค ดังนั้นฉันจึงมีความรับผิดชอบ " มุมมอง " นี้
ประการที่สองฉันต้องแยกผู้ส่งออกออกซึ่งอย่างที่เราเห็นประกอบด้วยนามธรรมอย่างน้อยสามชั้น
การกำหนดเกณฑ์การกรองและที่เกิดขึ้นจริงretrivalเกือบจะในระดับเดียวกันของนามธรรม (ฟิลเตอร์ที่มีความจำเป็นที่จะได้รับส่วนย่อยทางขวาของข้อมูล) ระดับเหล่านี้ถูกใส่ลงไปในสิ่งที่ต้องการชั้นการเข้าถึงข้อมูล
ในขั้นตอนต่อไปฉันแยกกลไกการส่งออกที่แท้จริงออกจากกัน: เมื่อต้องการเขียนไปยังไฟล์ชั่วคราวฉันต้องแบ่งออกเป็นสอง "หน้าที่": หนึ่งสำหรับการเขียนข้อมูลลงดิสก์จริงและอีกส่วนหนึ่งซึ่งเกี่ยวข้องกับรูปแบบที่แท้จริง
ตามรูปของคลาสและโมดูลต่างๆสิ่งต่าง ๆ ก็ชัดเจนขึ้น และมักจะเป็นคำถามที่แฝงอยู่ไม่ว่าจะเป็นชั้นเรียนไม่มากเกินไป
คุณจะกำหนดความรับผิดชอบอย่างไรในแต่ละชั้นเรียนและคุณกำหนดความรับผิดชอบอย่างไรในบริบทของ SRP
ยากที่จะทำตามสูตร แน่นอนว่าฉันสามารถทำซ้ำสิ่งที่คลุมเครือ»ระดับหนึ่งของการเป็นนามธรรม« - กฎถ้าช่วยได้
ส่วนใหญ่สำหรับฉันมันเป็น "สัญชาตญาณศิลป์" ซึ่งนำไปสู่การออกแบบในปัจจุบัน ฉันจำลองรหัสเหมือนศิลปินอาจปั้นดินหรือทำสี
ลองนึกภาพฉันว่าเป็นรหัส Bob Ross ;)