ฉันกำลังคิดเกี่ยวกับส่วนต่อประสานกับชั้นเรียนที่ฉันกำลังเขียน คลาสนี้มีสไตล์สำหรับตัวละครตัวอย่างเช่นตัวละครเป็นตัวหนาตัวเอียงขีดเส้นใต้และอื่น ๆ ฉันได้ถกเถียงกับตัวเองเป็นเวลาสองวันว่าฉันควรใช้ getters / setters หรือชื่อโลจิคัลสำหรับวิธีที่เปลี่ยนค่าเป็น สไตล์เหล่านี้ ในขณะที่ฉันมักจะชอบชื่อแบบลอจิคัลมันหมายถึงการเขียนรหัสที่ไม่มีประสิทธิภาพและไม่เป็นแบบลอจิคัล ให้ฉันยกตัวอย่างให้คุณ
ฉันมีชั้นเรียนCharacterStyles
ที่มีตัวแปรสมาชิกbold
, italic
, underline
(และอื่น ๆ บางอย่าง แต่ฉันจะปล่อยให้พวกเขาออกไปให้มันง่าย) วิธีที่ง่ายที่สุดที่จะช่วยให้ส่วนอื่น ๆ ของโปรแกรมที่จะเข้าถึงตัวแปรเหล่านี้จะเขียนวิธีการ getter / หมาเพื่อให้คุณสามารถทำและstyles.setBold(true)
styles.setItalic(false)
แต่ฉันไม่ชอบสิ่งนี้ ไม่เพียงเพราะผู้คนจำนวนมากพูดว่าผู้ได้รับ / setters ทำลายการห่อหุ้ม (มันเลวร้ายจริงๆเหรอ?) แต่ส่วนใหญ่เป็นเพราะมันไม่สมเหตุสมผล ฉันคาดหวังที่จะจัดสไตล์ตัวละครผ่านวิธีการหนึ่งstyles.format("bold", true)
หรือบางอย่างเช่นนั้น แต่ไม่ผ่านวิธีเหล่านี้ทั้งหมด
แม้ว่าจะมีปัญหาหนึ่งข้อ เนื่องจากคุณไม่สามารถเข้าถึงตัวแปรสมาชิกวัตถุโดยเนื้อหาของสตริงใน C ++ ฉันจะต้องเขียนคอนเทนเนอร์ if-statement / switch ขนาดใหญ่สำหรับสไตล์ทั้งหมดหรือฉันจะต้องเก็บสไตล์ไว้ในอาเรย์แบบเชื่อมโยง ( แผนที่).
ฉันไม่สามารถเข้าใจได้ว่าวิธีที่ดีที่สุดคืออะไร ช่วงเวลาหนึ่งฉันคิดว่าฉันควรเขียนตัวรับสัญญาณ / ผู้ตั้งค่าและช่วงเวลาถัดไปที่ฉันเอนตัวไปทางอื่น คำถามของฉันคือคุณจะทำอย่างไร แล้วทำไมคุณถึงทำอย่างนั้น?
bold
ชุดtrue
และตัวแปรอื่น ๆ ไม่ได้กำหนดวิธีการ getter สำหรับตัวแปรอื่น ๆ ควรกลับค่าของสไตล์แม่ (ซึ่งถูกเก็บไว้ในทรัพย์สินของผู้อื่น) ในขณะที่ทะเยอทะยานสำหรับคุณสมบัติที่ควรจะกลับbold
true
มีบางสิ่งอื่น ๆ เช่นชื่อและวิธีการแสดงในอินเทอร์เฟซเช่นกัน