การตรวจสอบความคล่องแคล่วเทียบกับคำอธิบายประกอบข้อมูล [ปิด]


124

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


52
นอกจากนี้ยังเป็นที่น่าสนใจที่จะทราบว่าคำถามที่ปิดโดยไม่สร้างสรรค์มักจะมีการโหวตเพิ่มจำนวนมากดังนั้นคำถามเหล่านี้จึงเป็นประโยชน์ต่อผู้คน ต้องมีบางอย่างผิดปกติกับสิ่งนี้
Dmitry Efimenko

2
ฉันยอมรับว่าคำถามประเภทนี้มีประโยชน์ แต่คำตอบด้านล่างดูเหมือนเป็นความคิดเห็นของฉันมากกว่าไม่ใช่ข้อเท็จจริง
Ian Warburton

3
ฉันเห็นด้วยอย่างยิ่งเช่นกันอย่างไรก็ตามการถามว่า "อะไรคือความแตกต่าง" แทนที่จะเป็น "ความชอบของคุณคืออะไร" อาจเป็นการหลีกเลี่ยงสถานการณ์นั้นได้
Jeremy A. West

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

คำตอบ:


113

ฉันชอบการตรวจสอบความถูกต้อง :

  1. มันทำให้ฉันควบคุมกฎการตรวจสอบได้ดีขึ้นมาก
  2. การตรวจสอบเงื่อนไขกับคุณสมบัติต่างๆนั้นง่ายกว่ามากเมื่อเทียบกับคำอธิบายประกอบข้อมูล
  3. มันแยกการตรวจสอบความถูกต้องออกจากโมเดลมุมมองของฉัน
  4. การทดสอบหน่วยนั้นง่ายกว่ามากเมื่อเทียบกับคำอธิบายประกอบข้อมูล
  5. มีการสนับสนุนการตรวจสอบฝั่งไคลเอ็นต์ที่ยอดเยี่ยมสำหรับกฎการตรวจสอบมาตรฐานส่วนใหญ่

6
บางจุดเพิ่มเติมจากบทความนี้ ( webdevbros.net/2010/12/03/… ): 1. คำอธิบายประกอบมากเกินไปทำให้โมเดลของคุณดูน่าเกลียด (คล้ายกับข้อ 3 ของคุณ) 2. การนำกลับมาใช้ใหม่ได้ดีขึ้น 3. ประสิทธิภาพที่ดีขึ้น (เนื่องจากไม่มีการสะท้อนกลับ )
SiberianGuy

2
@Idsa ชี้ประสิทธิภาพฟังดูน่าสงสัย การสะท้อนจะต้องเกิดขึ้นเพียงครั้งเดียวต่อรุ่น สิ่งนี้ถือว่าเป็นการใช้งานที่ดีฉันไม่รู้ว่าการใช้งานนี้ทำงานอย่างไร
CodesInChaos

@CodeInChaos ดูเหมือนว่าคุณจะพูดถูก แต่ฉันจะเก็บไว้ที่นั่นเพราะฉันก็ไม่แน่ใจ (และขี้เกียจพอที่จะค้นหา) ว่ามันถูกนำไปใช้อย่างไร
SiberianGuy

2
ฉันสอง FluentValidation ... มันเป็นหิน จากมุมมองของรหัส OCD ฉันชอบที่จะลบความรับผิดชอบในการตรวจสอบความถูกต้องออกจากมุมมองและให้คลาสของตัวเอง ฉันลองใช้ xVal สักพักใน MVC1 ... คำอธิบายประกอบข้อมูลก็โอเคสำหรับสิ่งง่ายๆ แต่เมื่อคุณมีกฎมากกว่าหนึ่งข้อคุณแทบจะไม่สามารถบอกได้ว่า ViewModel ควรจะเป็นตัวแทนอะไร
Brandon Linton

@ ดารินส่งข้อความแสดงข้อผิดพลาดในมุมมองอย่างไร? ขอตัวอย่างวิธีทำได้ไหม
Jaime Sangcap

32

ฉันชอบคำอธิบายประกอบข้อมูลอย่างชัดเจนเพราะ ...

  1. กฎการตรวจสอบทั้งหมดสามารถกำหนดค่าได้ในที่เดียวในโค้ด (ภายในคลาสข้อมูลเมตาของโมเดล) และไม่จำเป็นต้องทำซ้ำที่อื่น
  2. มีการสนับสนุนที่ดีเยี่ยมสำหรับการตรวจสอบความถูกต้องฝั่งไคลเอ็นต์ (อีกครั้ง - โดยไม่ต้องทำซ้ำกฎการตรวจสอบ!) เมื่อใช้แอตทริบิวต์คำอธิบายประกอบข้อมูล
  3. สามารถทดสอบแอตทริบิวต์คำอธิบายประกอบข้อมูลได้เพื่อให้แน่ใจว่ามีอยู่
  4. มีแอตทริบิวต์การตรวจสอบความถูกต้องเพิ่มเติมที่ดีที่สร้างขึ้นโดยชุมชน (เช่นส่วนขยายคำอธิบายประกอบข้อมูล )

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

จุดทดสอบการมีอยู่ของแอตทริบิวต์คืออะไร? นั่นไม่ใช่กฎการตรวจสอบซ้ำโดยทั่วไปหรือไม่?
แซม

30
@Sam: โดยการทดสอบว่าคุณสมบัติได้รับการตกแต่งด้วยแอตทริบิวต์คำอธิบายประกอบข้อมูลหรือไม่คุณจะไม่ทดสอบการทำงานของแอตทริบิวต์นั้นเอง คุณแค่แน่ใจว่ามันอยู่ที่นั่น ฉันควรจะบอกว่าตอนนี้สองปีต่อมาฉันอยู่ข้างดารินและเห็นด้วยกับคำตอบของเขา
Marius Schulz

@ แซมเพราะคุณคงอยากรู้ว่ามีใครลบมันออกจากโมเดลของคุณหรือเปล่า
Steve

3
ความคิดเห็นที่ยอดเยี่ยม Marius น่าเสียดายที่บทช่วยสอน EF ส่วนใหญ่ในปัจจุบันแสดงการตรวจสอบความถูกต้องด้วยคำอธิบายประกอบข้อมูล ในตอนแรกฉันยังติดอยู่กับความเรียบง่ายของคำอธิบายประกอบ แต่ไม่นานหลังจากที่ฉันพยายามใช้กฎการตรวจสอบความถูกต้องที่กำหนดเองฉันก็เข้าร่วมการตรวจสอบความถูกต้องของทีมทันที ... อย่างไรก็ตามเลวร้ายเกินไปที่ดารินหยุดโพสต์ :( ส่วนใหญ่ ความคิดเห็นของเขาใน StackOverflow เป็นจุดที่หลังจากผ่านไปนานกว่า 5 ปี !!!
Koshera
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.