เริ่มจากตัวอย่างกันก่อน
สมมติว่าฉันมีวิธีที่เรียกexport
ว่าขึ้นอยู่กับ schema DB อย่างมาก และโดย“ พึ่งพาหนัก” ฉันหมายถึงฉันรู้ว่าการเพิ่มคอลัมน์ใหม่ในตารางหนึ่งบ่อยครั้ง (บ่อยครั้งมาก) จะนำไปสู่export
การเปลี่ยนแปลงวิธีการที่สอดคล้องกัน(โดยปกติแล้วคุณควรเพิ่มเขตข้อมูลใหม่ลงในข้อมูลการส่งออกด้วย)
โปรแกรมเมอร์มักจะลืมที่จะเปลี่ยนexport
วิธีการเพราะมันไม่ชัดเจนจริงๆคุณควรดูที่นี้ เป้าหมายของฉันคือการบังคับให้โปรแกรมเมอร์ตัดสินใจอย่างชัดเจนเพื่อตัดสินว่าเขาลืมดูexport
วิธีการหรือไม่ต้องการเพิ่มเขตข้อมูลลงในข้อมูลการส่งออก และฉันกำลังมองหาโซลูชันการออกแบบสำหรับปัญหานี้
ฉันมีสองแนวคิด แต่ทั้งคู่มีข้อบกพร่อง
เสื้อคลุม "อ่านทั้งหมด" สมาร์ท
ฉันสามารถสร้าง wrapper อัจฉริยะที่ทำให้แน่ใจว่าข้อมูลทั้งหมดอ่านอย่างชัดเจน
บางสิ่งเช่นนี้
def export():
checker = AllReadChecker.new(table_row)
name = checker.get('name')
surname = checker.get('surname')
checker.ignore('age') # explicitly ignore the "age" field
result = [name, surname] # or whatever
checker.check_now() # check all is read
return result
ดังนั้นchecker
ยืนยันหากtable_row
มีเขตข้อมูลอื่นที่ไม่ได้อ่าน แต่ทุกอย่างดูหนักและอาจส่งผลกระทบต่อความสมบูรณ์แบบ
“ ตรวจสอบวิธีการนั้น ” ไม่ได้
ฉันสามารถสร้าง unittest ที่จดจำ schema ของตารางสุดท้ายและล้มเหลวทุกครั้งที่เปลี่ยนตาราง ในกรณีนั้นโปรแกรมเมอร์จะเห็นบางสิ่งเช่น“ อย่าลืมตรวจสอบexport
วิธีการ” เพื่อซ่อนโปรแกรมเมอร์คำเตือนจะ (หรือไม่ - เป็นปัญหา) ตรวจสอบexport
และด้วยตนเอง (นั่นเป็นปัญหาอื่น) แก้ไขการทดสอบโดยการเพิ่มเขตข้อมูลใหม่ลงในมัน
ฉันมีความคิดอื่น ๆ เล็กน้อย แต่พวกเขาลำบากเกินกว่าจะนำไปปฏิบัติหรือยากเกินกว่าจะเข้าใจ (และฉันไม่ต้องการให้โครงการกลายเป็นตัวต่อ)
ปัญหาข้างต้นเป็นเพียงตัวอย่างหนึ่งของปัญหาที่กว้างขึ้นที่ฉันพบเป็นครั้งคราว ฉันต้องการผูกโค้ดบางส่วนและ / หรือโครงสร้างพื้นฐานเพื่อเปลี่ยนหนึ่งในนั้นแจ้งเตือนโปรแกรมเมอร์ให้ตรวจสอบอีกครั้ง โดยปกติคุณจะมีเครื่องมือง่ายๆเช่นการแยกตรรกะทั่วไปหรือการเขียนที่ไม่น่าเชื่อถือ แต่ฉันกำลังมองหาเครื่องมือสำหรับกรณีที่ซับซ้อนมากขึ้น: บางทีรูปแบบการออกแบบบางอย่างที่ฉันรู้อยู่ในตอนนี้
export
มีทุกสิ่งที่คุณต้องการตามความเป็นจริงหรือไม่?
export
จาก Schema ได้ไหม?