ชื่อมีโอกาสถ่ายทอดความหมาย ทำไมคุณถึงทิ้งโอกาสนั้นกับ Impl
ก่อนอื่นถ้าคุณจะมีการติดตั้งใช้งานเพียงครั้งเดียว มันสร้างปัญหาการตั้งชื่อและไม่เพิ่มอะไรเลย ยิ่งแย่ไปกว่านั้นมันอาจทำให้เกิดปัญหากับลายเซ็นวิธีที่ไม่สอดคล้องกันใน API หากคุณและนักพัฒนาอื่น ๆ ทั้งหมดไม่ระมัดระวังที่จะใช้อินเทอร์เฟซเท่านั้น
ระบุว่าเราสามารถสันนิษฐานได้ว่าทุกอินเตอร์เฟสมีหรืออาจมีการปรับใช้สองตัวขึ้นไป
หากคุณมีเพียงคนเดียวในตอนนี้และคุณไม่ทราบว่าอีกวิธีหนึ่งจะแตกต่างกันไปค่าเริ่มต้นเป็นการเริ่มต้นที่ดี
หากคุณมีสองตอนนี้ให้ตั้งชื่อแต่ละคนตามวัตถุประสงค์
ตัวอย่าง: เมื่อเร็ว ๆ นี้เรามีบริบทคลาสที่เป็นรูปธรรม(อ้างอิงถึงฐานข้อมูล) มันก็รู้ว่าเราจำเป็นเพื่อให้สามารถที่จะเป็นตัวแทนบริบทครับดังนั้นบริบทชื่อที่ใช้สำหรับอินเตอร์เฟซใหม่ (เพื่อรักษาความเข้ากันได้สำหรับ API เก่า) และการดำเนินงานที่ถูกสร้างขึ้นใหม่, OfflineContext แต่เดาได้ว่าเปลี่ยนชื่อต้นฉบับเป็นอะไร ถูกต้องContextImpl (yikes)
ในกรณีนี้DefaultContextน่าจะพอใช้ได้และผู้คนจะได้มัน แต่มันไม่ได้อธิบายอย่างที่ควรจะเป็น ท้ายที่สุดถ้ามันไม่ออฟไลน์มันคืออะไร? ดังนั้นเราไปกับ: OnlineContext
กรณีพิเศษ: การใช้คำนำหน้า "ฉัน" บนอินเตอร์เฟส
หนึ่งในคำตอบอื่น ๆ ที่แนะนำโดยใช้คำนำหน้า I บนอินเตอร์เฟส คุณไม่จำเป็นต้องทำสิ่งนี้
อย่างไรก็ตามหากคุณต้องการทั้งอินเทอร์เฟซสำหรับการใช้งานที่กำหนดเอง แต่คุณยังมีการใช้งานหลักที่เป็นรูปธรรมที่จะใช้บ่อยและชื่อพื้นฐานมันง่ายเกินไปที่จะยอมแพ้ต่ออินเทอร์เฟซเพียงอย่างเดียว "ฉัน" ไปยังอินเทอร์เฟซ (แม้ว่าจะไม่เป็นไรหากยังไม่เหมาะกับคุณและทีมของคุณ)
ตัวอย่าง: วัตถุจำนวนมากสามารถเป็น "EventDispatcher" เพื่อประโยชน์ของ API สิ่งนี้จะต้องสอดคล้องกับอินเตอร์เฟส แต่คุณต้องการให้ผู้มอบหมายเหตุการณ์ขั้นพื้นฐานสำหรับการมอบหมาย DefaultEventDispatcherจะดี แต่มันเป็นบิตนานและถ้าคุณกำลังจะได้เห็นชื่อของมันบ่อยครั้งคุณอาจจะชอบที่จะใช้ชื่อฐานEventDispatcherสำหรับการเรียนที่เป็นรูปธรรมและดำเนินการIEventDispatcherสำหรับการใช้งานที่กำหนดเอง:
/* Option 1, traditional verbose naming: */
interface EventDispatcher { /* interface for all event dispatchers */ }
class DefaultEventDispatcher implements EventDispatcher {
/* default event dispatcher */
}
/* Option 2, "I" abbreviation because "EventDispatcher" will be a common default: */
interface IEventDispatcher { /* interface for all event dispatchers */ }
class EventDispatcher implements IEventDispatcher {
/* default event dispatcher. */
}