ขั้นตอนการจัดเก็บ [ปิด]


11

หนึ่งในนักพัฒนาอาวุโสของเราระบุว่าเราควรใช้แบบแผนการตั้งชื่อสำหรับกระบวนการจัดเก็บด้วยรูปแบบการตั้งชื่อแบบ "objectVerb" เช่น ("MemberGetById") แทนการตั้งชื่อแบบ "verbObject" ("GetMemberByID") เหตุผลสำหรับมาตรฐานนี้คือกระบวนการที่เก็บไว้ทั้งหมดที่เกี่ยวข้องจะถูกจัดกลุ่มเข้าด้วยกันโดยวัตถุแทนที่จะกระทำ

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

คุณทำอะไรกับสิ่งนี้ วิธีการตั้งชื่อ proc ที่จัดเก็บโดยทั่วไปวิธีใดและคุณใช้อนุสัญญาการตั้งชื่อประเภท proc ที่เก็บไว้หรือไม่


1
"ชื่อไม่สามารถอ่านได้ตามธรรมชาติ"? โดยใคร ภาษาธรรมชาติครั้งแรกของคุณคืออะไร? ภาษาอังกฤษ? หรืออย่างอื่น?
S.Lott

9
@ S.Lott - สำหรับฉันดูเหมือนว่ามีบางสิ่งที่คุณได้ยินในหนองน้ำใน Degobah
TZHX

1
เป็นคำถามที่ดีมาก! การมีมาตรฐานบางอย่างดีกว่าไม่มีมาตรฐาน แต่บางคนที่สามารถใช้แนวคิดนี้ได้ดียิ่งขึ้นและมีมาตรฐานที่ดี ตัวอย่างเช่น Dijkstra ได้เขียนเกี่ยวกับสาเหตุที่ทำให้การจัดทำดัชนีอาร์เรย์ด้วย 0 เป็นองค์ประกอบแรกมากกว่า 1 developeronline.blogspot.com/2008/04/ ......มันเป็นหัวข้อที่น่าสนใจ แต่ฉันก็พนันได้ มันทำให้เขาต้องซ่อมมันขึ้นมา ในทำนองเดียวกัน Spolsky มีระบบที่ดี: joelonsoftware.com/articles/Wrong.html การคิดล่วงหน้าเพื่อหลีกเลี่ยงความเจ็บปวด
งาน

4
ผมว่าได้รับการกำจัดของวิธีการจัดเก็บ alltogether;)
ไมเคิลบราวน์

คำตอบ:


10

ดูมันแบบนี้ วิธีการของคุณเป็นระเบียบในรหัส? โดยวัตถุด้วยวิธีการห้อยออก

MyObject.GetById(int)
MyObject.Save()

การมี procs ที่จัดเก็บของคุณเลียนแบบการตั้งชื่อมันจะง่ายขึ้นมากในการดูว่ามันเกี่ยวข้องกับซอร์สโค้ดของคุณอย่างไร

MyObjectGetById
MyObjectSave

จุดดี แต่ SQL ไม่ใช่ OO โดยเนื้อแท้ ในความเป็นจริงมันแตกต่างจาก Java / C # / etc รหัสที่เชื่อมต่อกับมัน เป็นเรื่องธรรมดาที่จะให้ SQL ทำสิ่งนั้นและปล่อยให้ Java ทำสิ่งนั้น หากต้องสร้างรหัสจะสามารถทำได้โดยใช้ความพยายามเพียงเล็กน้อย
งาน

4
ฉันไม่คิดว่า OO เป็นข้อพิจารณาที่นี่ ข้างต้นเป็นเพียงตัวอย่างของวิธีการที่ไม่เป็นธรรมชาติอย่างที่ไม่เคยปรากฏมาก่อนว่าจะใช้แบบแผนการตั้งชื่อดังกล่าว
Mark Freedman

2
หากมีวิธีในรหัสเป็น "MyObject.GetById (int)" ทำไม proc ที่จัดเก็บอาจไม่ถูกเรียกว่า "MyObject.GetById" การจัดกลุ่มจะยังคงเกิดขึ้นและจุดจะให้แยกระหว่างวัตถุ / ตารางและการกระทำที่ต้องการ
Chris

1
@Chris ฉันไม่แน่ใจว่าคุณสามารถใช้ '.' ในชื่อ proc แต่แน่นอนว่าใช้ objectVerb group groups ในลักษณะเดียวกับที่คิดเกี่ยวกับสิ่งนั้น ฉันไม่คิดว่าจะเป็นคนแรกฉันคิดถึงสิ่งที่ฉันต้องการแล้วจะดึงมันอย่างไร
CaffGeek

1
@ Marked Freedman ไม่ใช่ว่ามันจำเป็นต้องมี OO คุณจัดกลุ่มสิ่งต่าง ๆ ในภาษาเชิงกระบวนวิธีเดียวกับที่พวกมันไม่ได้อยู่ในวัตถุจริง แต่มักจะนำหน้าด้วยสิ่งที่จะกลายเป็นวัตถุตามธรรมชาติถ้ารหัสถูกแปลง strCompare, strLen ฯลฯ ฯลฯ objectAction
CaffGeek

6

ฉันก็สามารถเห็นเหตุผลเช่นกัน; มันจัดกลุ่มการกระทำร่วมกันโดยเอนทิตี อย่างไรก็ตามหากการกระทำของคุณเป็น GET, PUT และ DELETE เสมอการเปลี่ยนแปลงในการตั้งชื่ออาจไม่สำคัญมากนัก ฉันเห็นประโยชน์ที่ดีที่สุดจากมาตรฐานการตั้งชื่อใหม่ที่เกิดขึ้นเมื่อคุณมีชื่อการกระทำที่ไม่ซ้ำกันเช่น "AccountTransferMoney" สิ่งนั้น

สิ่งที่สำคัญที่สุดคือมีมาตรฐานเดียวและทุกคนก็ตามมา


1
มาจาก บริษัท ที่ไม่มีมาตรฐานการตั้งชื่ออย่างเป็นทางการ (นอกเหนือจาก "คำนำหน้าด้วยsp") การมีมาตรฐานเป็นสิ่งเดียวที่สำคัญ
Glen Solsberry

5

คุณต้องตัดสินใจว่าอะไรคือผู้ออกรายใหญ่ค้นหา procs ที่คุณกำลังมองหาหรือถอดรหัสความหมายของพวกเขาได้อย่างรวดเร็ว?

ถ้าคุณเห็น:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

เมื่อถึงจุดหนึ่งเมื่อคุณพบ 'สมาชิก' แล้วคุณก็ไม่สนใจสิ่งนั้นและไปจากที่นั่น

ดูในสมุดโทรศัพท์ หากคุณต้องการค้นหา John Smith คือ Smith, Dave Smith, John Smith, Robert

ยากจริงๆเหรอ? ฉันจะไม่เรียกชื่อผู้คนด้วยชื่อของพวกเขาแล้วเรียกชื่อจริงเว้นแต่ว่าเป็นเจมส์บอนด์


1
+1 ฉันรักคำถามนี้และคำตอบ! มันเกี่ยวกับการใช้งานและนั่นอาจเป็นเรื่องยุ่งยากและน่าสนใจ
งาน

0

แทน "objectVerb" คุณสามารถใช้ "namespace_verbObject" Member_GetByIdเช่น
มันจะจัดกลุ่มขั้นตอนตามเนมสเปซและยังคงใช้การตั้งชื่อ "verbSomething" แบบดั้งเดิม

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