ฉันไม่พบว่ามีประโยชน์ในทุกวันนี้เพื่ออภิปรายเกี่ยวกับสิ่งที่ทำและไม่ถือเป็นความรับผิดชอบเดียวหรือเหตุผลเดียวที่จะเปลี่ยนแปลง ฉันจะเสนอหลักการเศร้าโศกขั้นต่ำในสถานที่:
หลักการความเศร้าโศกขั้นต่ำ: รหัสควรพยายามลดความน่าจะเป็นที่ต้องมีการเปลี่ยนแปลงหรือลดความง่ายในการเปลี่ยนแปลงให้มากที่สุด
วิธีที่ว่า? ไม่ควรใช้นักวิทยาศาสตร์จรวดเพื่อหาสาเหตุว่าทำไมสิ่งนี้สามารถช่วยลดค่าใช้จ่ายในการบำรุงรักษาและหวังว่ามันจะไม่เป็นประเด็นถกเถียงที่ไม่มีที่สิ้นสุด แต่เช่นเดียวกับ SOLID โดยทั่วไปมันไม่ใช่สิ่งที่จะนำไปใช้ในทุกที่ มันเป็นสิ่งที่ต้องพิจารณาในขณะที่การแลกเปลี่ยนดุลยภาพ
สำหรับความน่าจะเป็นที่จะต้องมีการเปลี่ยนแปลงนั่นคือ:
- การทดสอบที่ดี (ปรับปรุงความน่าเชื่อถือ)
- เกี่ยวข้องกับรหัสขั้นต่ำเปล่าที่จำเป็นในการทำสิ่งที่เฉพาะเจาะจง (ซึ่งอาจรวมถึงการลดข้อต่อ afferent)
- เพียงทำโค้ด badass ในสิ่งที่มันทำ (ดู Make หลักการ Badass)
สำหรับความยากลำบากในการเปลี่ยนแปลงมันขึ้นอยู่กับข้อต่อที่น่ากลัว การทดสอบแนะนำข้อต่อที่มีประสิทธิภาพ แต่จะปรับปรุงความน่าเชื่อถือ ทำได้ดีโดยทั่วไปแล้วจะทำได้ดีกว่าอันตรายและเป็นที่ยอมรับและส่งเสริมโดยหลักการความเศร้าโศกขั้นต่ำ
Make Badass Principle: คลาสที่ใช้ในหลาย ๆ สถานที่ควรจะยอดเยี่ยม พวกเขาควรจะเชื่อถือได้มีประสิทธิภาพหากเกี่ยวข้องกับคุณภาพเป็นต้น
และหลักการทำ Badass นั้นเชื่อมโยงกับหลักการความเศร้าโศกขั้นต่ำเนื่องจากสิ่งที่เลวร้ายจะพบความน่าจะเป็นที่ต่ำกว่าที่จะต้องมีการเปลี่ยนแปลงมากกว่าสิ่งที่ดูดสิ่งที่พวกเขาทำ
ฉันจะเริ่มต้นด้วยการชี้ไปที่เส้นขนานที่กล่าวถึงข้างต้นแล้วระบุว่า SRP นั้นขึ้นอยู่กับระดับของความละเอียดที่คุณต้องการพิจารณาและถ้าคุณใช้เวลามากพอคลาสใด ๆ ที่มีคุณสมบัติมากกว่าหนึ่งหรือวิธีหนึ่งละเมิด มัน.
จากมุมมองของ SRP คลาสที่แทบจะไม่ทำอะไรเลยจะมีเหตุผลเพียงหนึ่งเดียว (บางครั้งเป็นศูนย์) ในการเปลี่ยนแปลง:
class Float
{
public:
explicit Float(float val);
float get() const;
void set(float new_val);
};
ที่จริงไม่มีเหตุผลที่จะเปลี่ยน! มันดีกว่า SRP มัน ZRP!
ยกเว้นฉันขอแนะนำว่าเป็นการละเมิดหลักการทำ Badass อย่างโจ่งแจ้ง นอกจากนี้ยังไร้ค่าอย่างแน่นอน สิ่งที่ทำเพียงเล็กน้อยก็ไม่สามารถหวังว่าจะเป็นคนเลว มีข้อมูลน้อยเกินไป (TLI) และโดยธรรมชาติเมื่อคุณมีบางอย่างที่เป็น TLI มันไม่สามารถทำอะไรที่มีความหมายได้จริงๆแม้แต่กับข้อมูลที่ห่อหุ้มดังนั้นมันจึงต้องรั่วไหลไปสู่โลกภายนอกด้วยความหวังว่าคนอื่นจะทำสิ่งที่มีความหมายและไม่ดี และการรั่วไหลนั้นก็โอเคสำหรับบางสิ่งที่เพิ่งจะรวมข้อมูลและไม่มีอะไรเพิ่มเติม แต่ขีด จำกัด นั้นคือความแตกต่างที่ฉันเห็นระหว่าง "ข้อมูล" กับ "วัตถุ"
แน่นอนว่าสิ่งที่เป็น TMI ก็ไม่ดีเช่นกัน เราอาจใส่ซอฟต์แวร์ทั้งหมดของเราเป็นหนึ่งคลาส มันสามารถทำได้เพียงrun
วิธีเดียว และบางคนอาจโต้แย้งว่าตอนนี้มันมีเหตุผลที่กว้างมากที่จะเปลี่ยน: "คลาสนี้จะต้องมีการเปลี่ยนแปลงหากซอฟต์แวร์ต้องการการปรับปรุง" ฉันโง่ แต่แน่นอนว่าเราสามารถจินตนาการถึงปัญหาการบำรุงรักษาทั้งหมดได้
ดังนั้นจึงมีความสมดุลในเรื่องความละเอียดหรือความหยาบของวัตถุที่คุณออกแบบ ฉันมักจะตัดสินจากจำนวนข้อมูลที่คุณต้องรั่วไหลไปสู่โลกภายนอกและฟังก์ชันการทำงานที่มีความหมายที่สามารถทำได้ ฉันมักจะพบว่าหลักการทำ Badass มีประโยชน์ในการค้นหาความสมดุลในขณะที่รวมเข้ากับหลักการเศร้าโศกขั้นต่ำ