ใช้คำกริยาที่มีฟังก์ชั่นคำนามกับคลาส - สิ่งที่เกี่ยวกับอินเตอร์เฟซ? [ปิด]


23

ตกลงฉันเข้าใจการประชุมปกติของการใช้คำกริยากับฟังก์ชั่นและคำนามกับชั้นเรียน อินเทอร์เฟซคืออะไร มีวิธีการใดบ้างเมื่อคิดชื่อส่วนต่อประสานที่ไม่ชัดเจน

เพื่อให้ชัดเจนฉันไม่ได้พูดถึงว่าจะใส่ "I" ต่อหน้าชื่อหรือถ้าใช้ camelCase หรือ PascalCase ฉันสงสัยเกี่ยวกับวิธีการหาชื่อที่ชัดเจนและมีความหมายสำหรับอินเทอร์เฟซ

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


2
หืมม. จากชื่อเรื่องฉันคิดว่านี่น่าจะเกี่ยวกับการเปรียบเทียบบางส่วนของคำพูดระหว่างการเขียนโปรแกรมและภาษาอังกฤษ ในกรณีนี้madlibsดูเหมือนจะเป็นไปได้
Izkata

โปรดจำไว้ว่าเมื่อคุณสร้างชั้นเรียนคุณยังมีการสร้างอินเตอร์เฟซสำหรับวัตถุ instantiated โดยชั้นที่ ... หรือจะนำมันอีกทางหนึ่งชั้นเรียนจะตระหนักถึงการเชื่อมต่อ ดังนั้นพวกเขาควรใช้หลักการตั้งชื่อเดียวกัน
Daniel T.

นอกจากนี้ IMHO "คำกริยาใช้กับฟังก์ชั่น" ก็กว้างเกินไป คุณควรใช้คำกริยากับคำสั่งและคำนามกับคำสั่ง
Daniel T.

คำตอบ:


21

ฉันจะบอกว่ามันขึ้นอยู่กับสิ่งที่อินเตอร์เฟซที่กำหนด ในบางกรณีเมื่ออินเทอร์เฟซค่อนข้างเฉพาะเจาะจงและมีรายละเอียดฉันคิดว่าคำนามดีที่สุด ตัวอย่างเช่น,IListICollection

บางครั้งอินเทอร์เฟซจะเกี่ยวกับการเพิ่มคุณสมบัติทั่วไปบางอย่างให้กับคลาส ในกรณีนี้ฉันคิดว่าคำคุณศัพท์ดีที่สุด ตัวอย่างเช่นIDisposable, IEnumerable...

บางทีวิธีคิดอีกอย่างคือว่า "ความสามารถ" ที่อินเตอร์เฟสของคุณกำหนดไว้

ตัวอย่างเช่นIList<T>อินเทอร์เฟซจะกำหนดความสามารถเหล่านี้: เพิ่ม, ล้าง, มี, แทรก, ลบ, ... นี่คือคุณสมบัติทั้งหมดของรายการดังนั้นจึงIListเป็นชื่อที่ดี

IDisposableในอีกทางหนึ่งจะกำหนดเพียงหนึ่งความสามารถ: กำจัด ดังนั้นจึงเหมาะสำหรับทุกสิ่งที่ทิ้ง IDisposableดังนั้นชื่อ


10
ฉันขอแนะนำให้ใช้คำคุณศัพท์ "_able" หากอินเทอร์เฟซของคุณจะถูกตั้งชื่อตามสิ่งที่สามารถทำได้กับวัตถุของคุณ (เช่นIEnumerable) คำนาม "_er" ถ้าอินเทอร์เฟซของคุณจะถูกตั้งชื่อตามสิ่งที่วัตถุของคุณทำกับวัตถุอื่น ๆ เช่นIEqualityComparer) และคำนามทั่วไปหากส่วนต่อประสานของคุณตั้งชื่อตามประเภทของสิ่งที่พฤติกรรมนั้นเลียนแบบ (เช่นIList<T>)
supercat

ความคิดเห็นโดย @supercat ควรรวมอยู่ในคำตอบนี้จริง ๆ มันสมเหตุสมผลมาก
Nikhil Vartak

คำนำหน้าชื่ออินเทอร์เฟซที่แท้จริงด้วยIซ้ำซ้อน
user1870400

5

อินเตอร์เฟซที่อธิบายพฤติกรรมเพื่อให้ชื่อควรพูดอย่างนั้น ฉันไม่แน่ใจเกี่ยวกับกฎนี้ แต่คุณจะรู้ชื่อเมื่อคุณได้ยินมัน

ตัวอย่างบางส่วน:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

ฉันคิดว่ามันไม่เหมาะสมที่จะตั้งชื่ออินเทอร์เฟซด้วยIและการโทรSetด้วยISetเพราะในฐานะนักพัฒนาคุณไม่ควรกังวลว่าจะเป็นอินเทอร์เฟซหรือคลาส ฉันเห็นการปฏิบัตินี้ไม่ได้อยู่ใน Java ตอนนี้


+1 สำหรับ "ในฐานะนักพัฒนาคุณไม่ควรกังวลว่าจะเป็นอินเทอร์เฟซหรือคลาส"
Kazark

"ในฐานะนักพัฒนาคุณไม่ต้องกังวลว่าจะเป็นอินเทอร์เฟซหรือคลาส" - ไม่เห็นด้วยเพราะถ้ามันเป็นอินเทอร์เฟซคุณต้องรู้ว่าสมาชิกคนไหนควรนำไปใช้
Maximus Minimus

@ MaximusMinimus นำหน้าด้วยIซ้ำซ้อนโดยไม่คำนึงถึง ถ้าเช่นนั้นทำไมไม่ใช้คำนำหน้าคลาสนามธรรมกับAคลาสปกติด้วยCฯลฯ
user1870400

@ user1870400 - จริง แต่นั่นไม่ใช่ส่วนที่ฉันไม่เห็นด้วย
Maximus Minimus

4

เนื่องจากอินเทอร์เฟซเป็นเพียงการแสดงออกของ "อะไร" แต่ไม่ใช่ "ได้อย่างไร" ของประเภทฉันจะตั้งชื่อพวกเขาในลักษณะเดียวกับที่คุณตั้งชื่อคลาสอย่างน้อยจากส่วนของมุมมองการพูด สิ่งเดียวที่ฉันอาจเพิ่มลงในนี้ก็คือพวกเขามักจะเป็นทั่วไปมากกว่าผู้ใช้งานเฉพาะ (เช่น "ลูกค้า" อินเทอร์เฟซอาจมี "ProspectiveCustomer" และ "PayingCustomer")


0

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


0

คำตอบด่วน:อินเตอร์เฟซเป็นเรื่องเกี่ยวกับการเพิ่มขึ้นของSETในความสามารถของคุณสมบัติขอบเขตทั่วไปหรือการเชื่อมโยงระหว่างหน่วยงาน, เรียน, รูปแบบแนวคิด ฯลฯ ..

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

การตั้งชื่ออินเทอร์เฟซที่ชอบ: IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.อาจอธิบายแนวคิด


1
ใช่อินเตอร์เฟสแสดงถึงสัญญาหรือความสามารถ; เป็นที่รู้จักกันดีมาก แต่นี่จะตอบคำถามว่าจะตั้งชื่ออย่างไรได้อย่างไร สิ่งที่คุณพูดในเรื่องนั้นคือ "คิดเกี่ยวกับมันและแรงบันดาลใจจะทำให้คุณ" สิ่งนี้ไม่ได้ให้คำแนะนำใด ๆ ตัวอย่างเช่นควรเลือกชื่อใดต่อไปนี้เพราะอะไร: IStateMachineBuilder(คำนาม), IBuildStateMachine(ตั้งชื่อตามการกระทำ), ICanBuildStateMachine(ตั้งชื่อตามความสามารถ) ฯลฯ
stakx

0

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

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