SRP (หลักการความรับผิดชอบเดี่ยว) มีวัตถุประสงค์หรือไม่


17

พิจารณานักออกแบบ UI สองคนที่ต้องการออกแบบการออกแบบที่“ ดึงดูดผู้ใช้” "การดึงดูดผู้ใช้" เป็นแนวคิดที่ไม่ได้มีวัตถุประสงค์และอยู่ในใจของนักออกแบบเท่านั้น ดังนั้นผู้ออกแบบสามารถยกตัวอย่างเช่นสีแดงในขณะที่นักออกแบบ B เลือกสีน้ำเงิน นักออกแบบ A สร้างเลย์เอาต์ที่แตกต่างอย่างสิ้นเชิงจากดีไซเนอร์ B และอื่น ๆ

ฉันอ่านเกี่ยวกับ SRP (Single Responsibility Principle) และสิ่งที่ฉันเข้าใจคือการวิเคราะห์เชิงอัตวิสัยหรือการแยกความรับผิดชอบที่อาจแตกต่างจากนักออกแบบ OO ถึงผู้ออกแบบ OO คนอื่น ฉันถูกไหม? กล่าวอีกนัยหนึ่งเป็นไปได้หรือไม่ที่จะมีตัววิเคราะห์เชิงวัตถุสองตัวที่ยอดเยี่ยมและผู้ออกแบบที่มาพร้อมกับการออกแบบที่แตกต่างกันสองแบบสำหรับหนึ่งระบบโดยยึดตามหลักการ SRP


4
ฉันคิดว่าการออกแบบทุกประเภท (ศิลปะ, วิศวกรรม, ... ) มีความสมดุลของความเป็นกลางและความเป็นส่วนตัว - กฎและข้อ จำกัด ที่ชัดเจนบางอย่างประสบการณ์และการตัดสินที่ชัดเจนและแม้แต่ตัวเลือกทั้งหมดที่ไม่มีค่าใช้จ่าย ตัวเลือกซึ่งกันและกัน
Steve314

คำตอบ:


12

คำถามที่ดีและคำถามที่ฉันมักจะครุ่นคิดมากกว่า

ฉันจะบอกว่าไม่มีวัตถุประสงค์ไม่มี ส่วนตัววิสัยอย่างแน่นอน วิธีที่คุณจัดการกับปัญหาต่างๆขึ้นอยู่กับปรัชญาของคุณที่มีต่อปัญหาประเภทนั้น วิทยาศาสตร์แสดงให้เราเห็นว่ามีหลายวิธีในการแก้ปัญหาเดียวกันได้อย่างมีประสิทธิภาพ วิทยาศาสตร์ยังแสดงให้เราเห็นว่าผู้คนในทวีปต่าง ๆ สามารถหาทางแก้ปัญหาเดียวกันได้อย่างอิสระและวิธีแก้ปัญหาบางอย่างก็ชัดเจนกว่าคนอื่น ๆ ไม่ว่าในกรณีใดการตัดสินโซลูชันในแง่ของ "ดีที่สุด" นั้นขึ้นอยู่กับเกณฑ์ของคุณ

จริงๆแล้วสิ่งหนึ่งที่อาจเห็นเป็นสองส่วนในภาพรวมทั้งหมดอีกแนวคิดหนึ่งอาจมองว่าเป็นแนวคิดที่แยกจากกันโดยสิ้นเชิง หนึ่งเห็นสิ่งนี้ตลอดเวลาเมื่อดูว่าผู้ดูแลของรหัสห้องสมุดที่แตกต่างกันเข้าหาปัญหาเดียวกัน และยังแก้ปัญหาทั้งสองทำงานได้ดี

(PS. แก้ไขคำตอบนี้เมื่อคำถามสุดท้ายของ OP ถามตรงข้ามกับชื่อคำถาม)


5

หลักการนั้นมีวัตถุประสงค์ แต่มีวิธีการมากมายในการนำสิ่งที่เป็นไปตามหลักการมาใช้ซึ่งผู้พัฒนาอิสระสองรายจะออกแบบระบบที่แตกต่างออกไปสำหรับแอพพลิเคชั่นเดียวกัน

อาจเป็นไปได้ว่าผู้พัฒนารายเดียวกันที่ทำแบบเดียวกันสองครั้งจะยังคงเกิดขึ้นกับโซลูชันสองตัวที่แตกต่างกันอย่างน้อยบางส่วน

สำหรับหลักการที่ทำให้การออกแบบระบบมีลักษณะเหมือนกันตลอดเวลาก็จะต้องครอบคลุมการตัดสินใจในการออกแบบทุกด้าน ความรับผิดชอบหลักเดียวครอบคลุมเพียงส่วนเล็ก ๆ ของการตัดสินใจออกแบบที่เกี่ยวข้องกับการออกแบบระบบใด ๆ


การวิเคราะห์ที่ดี @Guffa +1 ฉันชอบความคิดที่ว่าไม่ได้ครอบคลุมทั้งหมด ใช่ SRP บอกให้คุณพยายามทำให้ทุกอย่างรับผิดชอบต่อปัญหาเดียว แต่มันไม่ได้บอกคุณว่าขอบเขตความรับผิดชอบอยู่ตรงไหน
Saeed Neamati

2

การประยุกต์ใช้หลักการเป็นอัตนัย อย่างไรก็ตาม "อัตนัย" ไม่ถือเอา "ความชอบ" แบบเดียวกับที่สุนทรียภาพ

มีความสุดขั้วที่ชัดเจน ชั้นตรงกับวิธีการหนึ่งที่มีเพียงไม่กี่บรรทัดของรหัสที่ไม่ได้โทรออกไปเรียนที่อื่น ๆ เป็นที่แน่นอนต่อไปนี้การ SRP ในอีกทางหนึ่งคลาสที่มีสองวิธีวิธีหนึ่งซึ่งมีการใช้งานอีเมลแบบสมบูรณ์ผ่านซ็อกเก็ตแบบดิบและอีกแบบหนึ่งซึ่งสร้างฟอร์ม GUI ไม่ได้ติดตาม SRP อย่างแน่นอน

สุนทรียศาสตร์เป็นการเปรียบเทียบที่ไม่ดี คล้ายคลึงดีกว่าที่จะเป็นที่รู้จักกันดีแนวคิดวิทยาศาสตร์คอมพิวเตอร์ของการมีเพศสัมพันธ์และการทำงานร่วมกัน สิ่งเหล่านี้ไม่ได้เป็นคุณลักษณะขาวดำจริงหรือเท็จ แต่พวกเขามีวัดแม้ว่าจะมีองค์ประกอบคุณภาพ หากคุณแสดงกลุ่มนักพัฒนาที่มีประสบการณ์สองการออกแบบแยกกันสำหรับคุณสมบัติเดียวกันพวกเขาจะให้การอ่านที่คล้ายกันซึ่งการออกแบบมีการเชื่อมต่อและ / หรือการทำงานร่วมกันมากขึ้น

ในความเป็นจริง SRP นั้นเป็นเพียงแค่การทำงานร่วมกันเป็นหลัก มันบอกว่าส่วนของโมดูล (เช่น class) บางส่วนควรจะจัดกลุ่มเข้าด้วยกันเพราะพวกมันทั้งหมดมีส่วนช่วยในการทำหน้าที่เดียวกันและไม่มีเหตุผลอื่น "ฟังก์ชั่น" อาจมีการตีความ - บางคนอาจตีความว่านี่เป็นฟังก์ชั่นเดียว (หรือวิธีการหรือขั้นตอน) ประกาศคนอื่นอาจย้อนกลับเล็กน้อยและคิดว่าฟังก์ชั่นเป็น "ส่งอีเมล" หรือ "เล่นดนตรี" แต่ยังมีที่ว่างเหลือเฟือสำหรับการซ้อมรบ "การจัดการเนื้อหา"ไม่ใช่คำอธิบายหน้าที่ที่ถูกต้อง


0

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


0

SRP มีวัตถุประสงค์; การใช้งานเป็นอัตนัย

การใช้งานสองแบบด้วยฟังก์ชันการทำงานเดียวกันที่แน่นอนอาจใช้โครงสร้างภายในที่แตกต่างกันอย่างสิ้นเชิงซึ่งส่งผลให้คลาสและวิธีการต่างกันและทั้งคู่สามารถตอบสนอง SRP ได้

ถ้าพวกเขาใช้วิธีการและสถานะเดียวกันและทั้งสองอย่างเป็นมาตรฐาน (น้อยที่สุด / ไม่ซ้ำซ้อน) จากนั้นพวกเขาจะ - ในทางทฤษฎี - จบลงด้วยคลาสและวิธีการเดียวกันภายใต้ SRP

แต่ฉันไม่สามารถพิสูจน์ได้ ยัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.