ชื่อวิธีการรับข้อมูล [ปิด]


104

คำเตือน:นี่เป็นคำถาม / การสนทนาที่ไม่ร้ายแรงมากนักที่ฉันโพสต์ ... แต่ฉันยินดีที่จะพนันว่านักพัฒนาส่วนใหญ่ได้ไตร่ตรอง "ปัญหา" นี้แล้ว ...

อยากได้ความคิดเห็นอื่น ๆ เกี่ยวกับหลักการตั้งชื่อสำหรับวิธีการที่ไปและได้ข้อมูลจากที่ไหนสักแห่งและส่งคืนมา ...

ชื่อเมธอดส่วนใหญ่ค่อนข้างง่ายและชัดเจน ... SaveEmployee (), DeleteOrder (), UploadDocument () แน่นอนว่าในชั้นเรียนคุณมักจะใช้รูปแบบสั้น ๆ ... บันทึก () ลบ () อัปโหลด () ตามลำดับ

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

  • GetBooks ()
  • FetchBooks ()
  • ดึงหนังสือ ()
  • ค้นหาหนังสือ ()
  • โหลดหนังสือ ()

คุณคิดอะไรอยู่?

คำตอบ:


127

มันคือทั้งหมดที่เกี่ยวกับความสอดคล้องกับความหมาย ;

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

  1. getBooks() คือเมื่อคุณได้รับหนังสือทั้งหมดที่เกี่ยวข้องกับออบเจ็กต์นั่นหมายความว่าเกณฑ์สำหรับชุดนั้นได้กำหนดไว้แล้วและที่มาที่ไปคือรายละเอียดที่ซ่อนอยู่
  2. findBooks(criteria) คือเมื่อพยายามค้นหาชุดย่อยของหนังสือตามพารามิเตอร์ในการเรียกใช้เมธอดซึ่งมักจะมีเกณฑ์การค้นหาที่แตกต่างกันมากเกินไป
  3. loadBooks(source) คือเมื่อคุณกำลังโหลดจากแหล่งภายนอกเช่นไฟล์หรือฐานข้อมูล
  4. ฉันจะไม่ใช้การดึง / ดึงข้อมูลเพราะมันคลุมเครือเกินไปและสับสนกับgetและไม่มีความหมายที่ชัดเจนที่เกี่ยวข้องกับข้อกำหนด

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

ความหมายมีความสำคัญอย่างยิ่ง:

สาขาภาษาศาสตร์และตรรกะที่เกี่ยวข้องกับความหมาย

ความคิดเห็นเป็นข้อพิสูจน์ว่าคำศัพท์ทั่วไปเช่นget and fetchไม่มีความหมายที่เฉพาะเจาะจงและถูกตีความแตกต่างกันไปตามแต่ละคน เลือกความหมายสำหรับคำศัพท์บันทึกสิ่งที่ตั้งใจจะบอกเป็นนัยว่าถ้าความหมายไม่ชัดเจนและสอดคล้องกับการใช้งาน

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


5
ฉันจะเพิ่มว่าฉันจะใช้การดึง / ดึงข้อมูลหากต้องดึงข้อมูลจากฐานข้อมูล
Liz Albin

1
อืม คุณจะแยกความแตกต่างระหว่างเกณฑ์ตัวแทนและเกณฑ์เฉพาะ ตัวอย่างเช่นคุณจะใช้ FindBooks (ผู้จัดพิมพ์) เมื่อต้องการค้นหาหนังสือจากผู้จัดพิมพ์เฉพาะหรือไม่ หรืออาจจะ GetBooksFromPublisher (ผู้จัดพิมพ์)?
Jason

6
publisher.getBooks () เป็นวิธีที่ดีกว่าในการทำโดยที่ผู้เผยแพร่เป็นอินสแตนซ์เฉพาะของผู้จัดพิมพ์ Library.getBooks (ผู้จัดพิมพ์) ที่ผู้จัดพิมพ์ใช้อินเทอร์เฟซ BookSearchCriteria เช่นเดียวกับ Library.getBooks (ผู้แต่ง) ที่ผู้เขียนใช้อินเทอร์เฟซ BookSearchCriteria นอกจากนี้คุณยังมีเหตุผลที่ Library.getPublishers () เป็นวิธีการจากโรงงาน

3
ขอบคุณสำหรับคำตอบนี้ เพิ่มความชัดเจนแน่นอน โดยพื้นฐานแล้วคุณกำลังบอกว่าวิธีการดึงข้อมูลโดยตัวกรองเฉพาะควรอยู่กับวัตถุ จะใช้อินเทอร์เฟซในลักษณะใด ตัวอย่างเช่นอินเทอร์เฟซ BookSearchCriteria คุณสามารถระบุโค้ดตัวอย่างได้หรือไม่?
Jason

2
มักจะตั้งชื่อเป็นเหมือนfetchเมื่อข้อมูลที่เวลาในการเข้าถึงคือต่ำเช่นในอุปกรณ์เดียวกันจากฐานข้อมูลท้องถิ่นจากหน่วยความจำ loadหรือdownloadถ้าเวลาในการเข้าถึงสูงขึ้นจากอินเทอร์เน็ตฐานข้อมูลภายนอกจากไฟล์
János

13

ตามจริงแล้วคุณควรตัดสินใจร่วมกับทีมของคุณว่าจะใช้หลักการตั้งชื่อแบบใด แต่เพื่อความสนุกสนานลองดูว่ารถไฟแห่งความคิดของคุณจะตัดสินใจเลือกสิ่งใดสิ่งเหล่านี้:

  • GetBooks ()

วิธีนี้เป็นของแหล่งข้อมูลและเราไม่สนใจว่าจะได้มาอย่างไรเราแค่ต้องการรับจากแหล่งข้อมูล

  • FetchBooks ()

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

  • ค้นหาหนังสือ ()

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

  • โหลดหนังสือ ()

หนังสือเหล่านี้อยู่ใน "กระเป๋าหนังสืออิเล็กทรอนิกส์" บางประเภทและต้องโหลดไว้ในนั้น อย่าลืมเรียก ZipClosed () หลังจากโหลดเพื่อป้องกันการสูญหาย

  • ดึงหนังสือ ()

ฉันไม่มีอะไร.


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

ฉันเองก็มีปัญหากับคำตอบที่ยอมรับในวันนี้ สำหรับโครงการของฉัน (React / Redux-based) ฉันเชื่อว่าการแยกความแตกต่างระหว่างข้อมูลที่ดึงจาก Redux store กับฐานข้อมูลของแอปเทียบกับ API ของบุคคลที่สามเป็นสิ่งสำคัญ การได้รับสิทธิ์นี้จะช่วยให้อ่านง่ายขึ้นในอนาคต นักพัฒนาเดิมใช้addสำหรับทั้งการเขียนไปยังฐานข้อมูลและเขียนไปยัง Store ตอนนี้ฉันกำลังพยายามแยกสิ่งเหล่านั้นออกและมันเป็นความเจ็บปวด
tim.rohrer

9

คำตอบคือยึดติดกับสิ่งที่คุณพอใจและมีความสม่ำเสมอ

หากคุณมีเว็บไซต์โรงนาและขุนนางและคุณใช้ GetBooks () หากคุณมีรายการอื่นเช่นเอนทิตีภาพยนตร์ให้ใช้ GetMovies () ดังนั้นไม่ว่าคุณและทีมของคุณจะชอบอะไรและเสมอภาคกัน


22
อย่างน้อยคุณก็มีความสม่ำเสมอในการสะกดผิดสม่ำเสมอ ;-)
Wim Hollebrandse

1
มีความสอดคล้องกันมาก ... :)
JonH

ไม่โกรธเคืองเลย ... ขอบคุณที่ชี้ให้ดู
Jason

2

ใน OO (C ++ / Java) ฉันมักจะใช้ getSomething และ setSomething เพราะบ่อยครั้งที่ฉันไม่ได้รับแอตทริบิวต์ส่วนตัวจากคลาสที่เป็นตัวแทนของออบเจ็กต์ข้อมูลนั้นหรือตั้งค่า - คู่ getter / setter ข้อดี Eclipse จะสร้างให้คุณ

ฉันมักจะใช้ Load ก็ต่อเมื่อฉันหมายถึงไฟล์ - เช่นเดียวกับ "โหลดลงในหน่วยความจำ" และโดยปกติจะหมายถึงการโหลดลงใน primitives, structs (C) หรืออ็อบเจกต์ ฉันใช้ส่ง / รับสำหรับเว็บ

ดังที่ได้กล่าวไว้ข้างต้นความสม่ำเสมอคือทุกสิ่งและรวมถึงผู้พัฒนาข้ามกลุ่มด้วย


1

ไม่ชัดเจนว่าคุณหมายถึงอะไรสำหรับ "การรับข้อมูล" จากฐานข้อมูล? ไฟล์? ความจำ?

มุมมองของฉันเกี่ยวกับการตั้งชื่อวิธีการคือบทบาทของมันคือการกำจัดความคลุมเครือและความจำเป็นในการค้นหาเอกสาร ฉันเชื่อว่าสิ่งนี้ควรทำได้แม้จะเสียชื่อเมธอดที่ยาวกว่าก็ตาม จากการศึกษาพบว่าผู้พัฒนาระดับกลาง + ส่วนใหญ่สามารถอ่านหลายคำในกรณีอูฐได้ ด้วย IDE และการกรอกอัตโนมัติการเขียนชื่อเมธอดแบบยาวก็ไม่ใช่ปัญหาเช่นกัน

ดังนั้นเมื่อฉันเห็น "fetchBooks" เว้นแต่บริบทจะชัดเจนมาก (เช่นคลาสที่ชื่อ BookFetcherFromDatabase) แสดงว่ามีความคลุมเครือ เอามาจากไหน? ความแตกต่างระหว่างการดึงและค้นหาคืออะไร? นอกจากนี้คุณยังเสี่ยงต่อปัญหาที่นักพัฒนาบางรายจะเชื่อมโยงความหมายกับคำหลักบางคำ ตัวอย่างเช่นดึงฐานข้อมูล (หรือหน่วยความจำ) เทียบกับโหลด (จากไฟล์) หรือดาวน์โหลด (จากเว็บ)

ฉันค่อนข้างจะเห็นบางอย่างเช่น "fetchBooksFromDatabase", "loadBookFromFile", "findBooksInCollection" เป็นต้นซึ่งเห็นได้น้อยกว่า แต่เมื่อคุณใช้งานเกินความยาวแล้วจะชัดเจน ทุกคนที่อ่านข้อความนี้จะเข้าใจทันทีว่าคุณกำลังพยายามทำอะไร


4
ปัญหาเกี่ยวกับ fetchBooksFromDatabase คือเมื่อคุณต้องการแยกตัวประกอบ / วางนัยและดึงข้อมูลจากนั้นอาจเป็นการดึงข้อมูลจาก XML ที่พูด ฉันชอบเฉพาะเจาะจงมากเกินไป แต่คุณพบว่าตัวเองแยกฟังก์ชันการทำงานเดียวกันออกจากชื่อฟังก์ชันต่างๆ และคุณชายไม่เท่!
JonH

ฉันคิดว่าความแตกต่างระหว่าง Get กับ Find มีแนวโน้มที่จะชัดเจน แต่ฉันสงสัยเกี่ยวกับคำถามเกี่ยวกับ Get versus Fetch นรก.. มีความแตกต่างหรือไม่?
Jason

@ จอนห์: ฉันเห็นด้วยกับคุณในเรื่องนั้น อย่างไรก็ตามหากคุณรู้ล่วงหน้าว่าคุณจะมีการดึงข้อมูลประเภทต่างๆคุณจะต้องเข้ารหัสสิ่งนั้นในการตั้งชื่อคลาส (เพื่อให้คุณสามารถแปลความหมายจากบริบทเช่น DatabaseConnector กับ XmlConnector)
Uri

7
@ Jason: เนื่องจาก "getters" แพร่หลายมาก (และเป็นส่วนหนึ่งของเฟรมเวิร์กเช่น JavaBeans) โปรแกรมเมอร์หลายคนมักคิดว่าพวกเขาเป็นวิธีการเข้าถึงฟิลด์ข้อมูลที่เกือบโปร่งใส ในทางกลับกัน "Fetch" บ่งชี้ให้โปรแกรมเมอร์บางคนเข้าถึงได้นานขึ้นซึ่งเกี่ยวข้องกับการถ่ายโอนข้อมูลจากที่หนึ่งไปยังอีกที่หนึ่ง (การดึงข้อมูลจาก CPU) หรือการดึงฐานข้อมูล ตัวอย่างเช่นภาษาแบบสอบถามของ Hibernate มีโครงสร้างการดึงข้อมูล นักพัฒนามักใช้วิธีการตามความคาดหวังของชื่อแทนที่จะอ่านเอกสารดังนั้นการหลีกเลี่ยงการส่งสัญญาณผิดจึงเป็นสิ่งสำคัญ
Uri
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.