ข้อดีของการ FindById ()
อนาคตพิสูจน์อักษร : ถ้าคุณเริ่มต้นด้วยFind(int)และต่อมามีการเพิ่มวิธีการอื่น ๆ ( FindByName(string), FindByLegacyId(int), FindByCustomerId(int), FindByOrderId(int)ฯลฯ ) FindById(int)คนอย่างผมมักจะใช้ทุกเพศทุกวัยที่กำลังมองหา ไม่ใช่ปัญหาหากคุณสามารถและจะเปลี่ยนFind(int)เป็นFindById(int)เมื่อจำเป็น - การพิสูจน์ในอนาคตเกี่ยวกับสิ่งเหล่านี้ถ้า s
ให้อ่านง่ายขึ้น Findเป็นอย่างดีดีถ้าโทรลักษณะชอบrecord = Find(customerId);แต่จะง่ายขึ้นเล็กน้อยสำหรับการอ่านถ้ามันFindByIdrecord = FindById(AFunction());
ความมั่นคง คุณสามารถใช้FindByX(int)/ FindByY(int)รูปแบบได้อย่างสม่ำเสมอทุกที่ แต่Find(int X)/ Find(int Y)เป็นไปไม่ได้เพราะขัดกัน
ข้อดีของการค้นหา ()
- จูบ.
Findเรียบง่ายและตรงไปตรงมาและอยู่ข้างoperator[]หนึ่งในสองชื่อฟังก์ชันที่คาดหวังมากที่สุดในบริบทนี้ (บางทางเลือกที่ได้รับความนิยมเป็นget, lookupหรือfetchขึ้นอยู่กับบริบท)
- ตามกฎของหัวแม่มือหากคุณมีชื่อฟังก์ชั่นซึ่งเป็นคำที่รู้จักกันดีซึ่งอธิบายถึงสิ่งที่ฟังก์ชันใช้อย่างถูกต้อง แม้ว่าจะมีชื่อหลายคำที่ยาวกว่าซึ่งดีกว่าเล็กน้อยในการอธิบายสิ่งที่ฟังก์ชั่นทำ ตัวอย่าง: ความยาว VS NumberOfElements มีการแลกเปลี่ยนกันและตำแหน่งที่จะลากเส้นนั้นเป็นเรื่องของการถกเถียง
- เป็นเรื่องปกติที่จะหลีกเลี่ยงความซ้ำซ้อน ถ้าเราดู
FindById(int id)เราสามารถลบความซ้ำซ้อนได้อย่างง่ายดายโดยเปลี่ยนเป็นFind(int id)แต่มีการแลกเปลี่ยน - เราสูญเสียความชัดเจน
หรือคุณจะได้รับประโยชน์จากทั้งคู่โดยใช้รหัสที่พิมพ์อย่างมาก:
CustomerRecord Find(Id<Customer> id)
// Or, depending on local coding standards
CustomerRecord Find(CustomerId id)
การติดตั้งใช้งานId<>: พิมพ์ค่า ID อย่างมากใน C #
ความคิดเห็นที่นี่รวมทั้งในลิงก์ด้านบนทำให้เกิดข้อกังวลหลายประการเกี่ยวกับการId<Customer>ที่ฉันต้องการจะกล่าวถึง:
- ข้อกังวลที่ 1: เป็นการใช้ชื่อสามัญอย่างไม่เหมาะสม
CustomerIdและOrderIDเป็นประเภทที่แตกต่างกัน ( customerId1 = customerId2;=> ดี, customerId1 = orderId1;=> ไม่ดี) แต่การใช้งานของพวกเขาเกือบจะเหมือนกันดังนั้นเราจึงสามารถนำไปใช้งานได้ด้วยการคัดลอกหรือวาง ในขณะที่มีค่าในการอภิปรายเกี่ยวกับการเปิดเผยหรือซ่อนทั่วไป metaprogramming เป็นสิ่งที่ generics มีไว้สำหรับ
- ความกังวลที่ 2: มันไม่ได้หยุด mistakes./It's ง่ายวิธีการแก้ปัญหาในการค้นหาของปัญหา
DoSomething(int customerId, int orderId, int productId)ปัญหาหลักที่ถูกลบออกโดยใช้ขอพิมพ์รหัสเป็นคำสั่งอาร์กิวเมนต์ไม่ถูกต้องในการเรียกไปยัง รหัสที่พิมพ์อย่างมากยังป้องกันปัญหาอื่น ๆ รวมถึง OP ที่ถามด้วย
- ข้อกังวลที่ 3: มันเป็นการปิดบังรหัสจริงๆ เป็นการยากที่จะบอกว่ามี ID อยู่
int aVariableหรือไม่ ง่ายที่จะบอกว่ามีการถือครองรหัสId<Customer> aVariableและเราสามารถบอกได้ว่าเป็นรหัสลูกค้า
- ข้อกังวลที่ 4: รหัสเหล่านี้ไม่มีประเภทที่แข็งแกร่งเพียงแค่ห่อหุ้ม เป็นเพียงเสื้อคลุมรอบ
String byte[]การห่อหุ้มหรือการห่อหุ้มไม่ได้ขัดแย้งกับการพิมพ์ที่รัดกุม
- ข้อกังวลที่ 5: มันผ่านการออกแบบมา ต่อไปนี้เป็นรุ่นที่น้อยที่สุด แต่ฉันขอแนะนำให้เพิ่ม
operator==และoperator!=เช่นกันถ้าคุณไม่ต้องการพึ่งพาเฉพาะในEquals:
.
public struct Id<T>: {
private readonly int _value ;
public Id(int value) { _value = value; }
public static explicit operator int(Id<T> id) { return id._value; }
}
T Find<T>(string name)หรือ(int size)คุณวางแผนที่จะแก้ไขปัญหาที่หลีกเลี่ยงไม่ได้อย่างไร