คำแนะนำในการออกแบบเว็บแอปพลิเคชันด้วยอายุการใช้งานมากกว่า 40 ปี


73

สถานการณ์

ขณะนี้ฉันอยู่นอกเหนือโครงการดูแลสุขภาพที่มีความต้องการหลักคือการเก็บข้อมูลที่มีคุณลักษณะที่ไม่รู้จักโดยใช้แบบฟอร์มที่ผู้ใช้สร้างขึ้นโดยผู้ให้บริการด้านสุขภาพ ข้อกำหนดที่สองคือความสมบูรณ์ของข้อมูลเป็นกุญแจสำคัญและแอปพลิเคชันจะใช้งานมากกว่า 40 ปี ขณะนี้เรากำลังย้ายข้อมูลลูกค้าจาก 40 ปีที่ผ่านมาจากแหล่งข้อมูลต่างๆ (กระดาษ, Excel, Access, ฯลฯ ... ) ไปยังฐานข้อมูล ข้อกำหนดในอนาคตคือ:

  • การจัดการเวิร์กโฟลว์ของแบบฟอร์ม
  • การจัดการตารางเวลาของแบบฟอร์ม
  • ความปลอดภัย / การจัดการตามบทบาท
  • เครื่องมือสร้างรายงาน
  • รองรับมือถือ / แท็บเล็ต

สถานการณ์

เพียง 6 เดือนเท่านั้นสถาปนิก / โปรแกรมเมอร์อาวุโส (ที่เซ็นสัญญา) คนปัจจุบันใช้แนวทาง "เร็ว" และได้ออกแบบระบบที่ไม่ดี ฐานข้อมูลไม่ได้รับการปรับให้เป็นมาตรฐาน, โค้ดนั้นเป็นแบบคู่, เทียร์ไม่มีวัตถุประสงค์เฉพาะและข้อมูลเริ่มหายไปเนื่องจากเขาได้ออกแบบถั่วบางตัวเพื่อทำการ "ลบ" บนฐานข้อมูล รหัสฐานนั้นเต็มไปด้วยฟองเลือดมากและมีงานที่ต้องทำการซิงโครไนซ์ข้อมูลเนื่องจากฐานข้อมูลไม่ได้ถูกทำให้เป็นมาตรฐาน วิธีการของเขาคือการพึ่งพางานสำรองเพื่อกู้คืนข้อมูลที่หายไปและดูเหมือนจะไม่เชื่อในการกู้คืนข้อมูล

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

ฉันแนะนำให้ใช้ระบบ CMS เช่น Drupal แต่ด้วยเหตุผลด้านนโยบายที่องค์กรของลูกค้าระบบจะต้องถูกสร้างขึ้นใหม่ทั้งหมด

นี่เป็นครั้งแรกที่ฉันจะออกแบบระบบที่มีอายุมากกว่า 40 ปี ฉันทำงานในโครงการที่มีอายุการใช้งานนาน 3-5 ปีเท่านั้นดังนั้นสถานการณ์นี้ใหม่มาก แต่ก็น่าตื่นเต้น

คำถาม

  • สิ่งที่ต้องพิจารณาในการออกแบบจะทำให้ระบบ "หลักฐานในอนาคต" มากขึ้น?
  • ลูกค้า / PM ควรถามคำถามอะไรเพื่อทำให้ระบบมี "หลักฐานในอนาคต" มากขึ้น?

59
การพิสูจน์ในอนาคตเป็นสิ่งหนึ่ง แต่ฉันเชื่อว่าไคลเอนต์จะขอซอฟต์แวร์ที่คาดว่าจะมีอายุการใช้งานนานกว่า 10x-20x ที่มีอยู่ในประวัติศาสตร์ปัจจุบันของคอมพิวเตอร์มือถือ / แท็บเล็ตหรือ 5x-8x ยาวกว่าประวัติศาสตร์ปัจจุบันของภาษา ใช้งานอยู่ ... มองโลกในแง่ดีอย่างไม่สมเหตุผลเกี่ยวกับความเสถียรของรูปแบบการคำนวณที่กำหนด

31
ออกแบบเพื่อให้เป็น 'หลักฐานในอนาคต' มากกว่า 40 ปีฟังดูเหมือนเป็นการออกกำลังกายที่ไร้ประโยชน์
whatsisname

10
เพื่อเติมเต็มความต้องการของฐานข้อมูลที่มีประโยชน์สำหรับ 40 ปีข้างหน้าฉันจะใส่ทั้งหมดลงในกระดาษ Paper ได้พิสูจน์ตัวเองแล้วในขณะที่ที่จัดเก็บข้อมูลดิจิทัลส่วนใหญ่ได้พิสูจน์แล้วว่าวิธีการสูญเสียข้อมูลจำนวนมากอย่างรวดเร็ว (แต่แน่นอนจะเก็บข้อมูลทั้งหมดที่ควรจะถูกทำลาย)
Pieter B

34
พวกเขาให้นักพัฒนาสัญญาสองราย 6 เดือนเพื่อสร้างระบบนี้หรือไม่? การรวบรวมข้อมูลที่สืบทอดมานานหลายปีและคาดการณ์ความต้องการใหม่ ๆ หากคุณยังไม่ได้เดินจากโครงการให้เริ่มต้นทำงาน นี่เป็นวิธีที่ใหญ่กว่าคนสองคนที่สามารถจัดการกับสิ่งใดก็ตามที่อยู่ใกล้กับกรอบเวลาที่กำหนด ลูกค้ามีความคาดหวังที่ไม่สมเหตุสมผลอย่างสมบูรณ์และไม่เต็มใจที่จะมอบทรัพยากรที่เหมาะสมให้กับโครงการ
Sean McSomething

12
6 เดือนสำหรับ 2 คนในการสร้างและใช้แอปพลิเคชันที่ต้องการมากกว่า 40 ปีขึ้นไป ไม่สำคัญว่าคุณเก่งแค่ไหนมันฟังดูคล้ายกับการตั้งค่าสำหรับความล้มเหลว หากคุณไม่สามารถโน้มน้าวใจองค์กรของคุณว่าไม่มีเหตุผลอย่างนั้นฉันขอแนะนำให้คุณเริ่มมองหางานอื่นโดยเร็ว
dsw88

คำตอบ:


132

ข้อมูลคือราชา

ฉันคิดว่ามันไม่มีเหตุผลที่จะคาดหวังว่าเว็บแอปพลิเคชั่นในปี 2013 จะยังคงเปิดตัวและใช้งานได้ในปี 2053 เทคโนโลยีกำลังเปลี่ยนแปลง แพลตฟอร์มกำลังจะมาและไป HTML อาจเป็นความทรงจำที่แปลกตา แต่ข้อมูลของคุณจะยังคงอยู่

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

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

แต่ความจริงคือกว่า 40 ปีที่ บริษัท จะ (หวังว่า) จะให้บริการ front-end และ back end ค่อนข้างน้อยเพื่อปรับให้เข้ากับแพลตฟอร์มที่กำลังพัฒนา ด้วยเหตุนี้ฉันจึงกำหนดเป้าหมายอายุการใช้งาน 5-10 ปีสำหรับแอปพลิเคชันที่ผู้ใช้แต่ละคนพบเจอ


13
"เราอาจจะไม่ใช้รหัสนี้ใน 40 ปี!" คือเหตุผลที่มีข้อบกพร่อง Y2K ที่จะเริ่มต้นด้วย การคาดหวังให้โค้ดของคุณถูกแทนที่นั้นเป็นเพียงการปฏิบัติที่ไม่ดี
DougM

71
'ข้อผิดพลาด' Y2K เป็นปัญหาข้อมูล - เก็บข้อมูล 2 หลักแทน 4 นี่คือเหตุผลที่ฉันแนะนำให้เน้นข้อมูล
GrandmasterB

24
จุดดี. เก็บนี้ในใจถ้ามีคนจริงๆคาดว่าข้อมูลของพวกเขา (และอาจฐานข้อมูลเช่นกัน) ที่จะอยู่ในการใช้งาน 40 + ปีนับจากนี้ก็อาจจะดีที่สุดในการออกแบบฐานข้อมูลที่มีคุณสมบัติเฉพาะผู้ขายน้อยที่สุด ใครก็ตามที่ต้องแก้ให้หายยุ่ง / เขียนรหัสของคุณทั้งหมดที่อาศัย Oracle / MS-SQL / ฟังก์ชันพิเศษ 20 ปีนับจากนี้จะไม่พอใจกับคุณ ;)
FrustratedWithFormsDesigner

4
นี่คือคำแนะนำที่มั่นคง มีโปรแกรม Cobol มากมายที่ยังคงทำงานอยู่ซึ่งเขียนเมื่อ 20-30 ปีก่อน แม้ว่าเทคโนโลยีจะเคลื่อนไหวต่อไปถ้าข้อมูลและโมเดลวัตถุของคุณนั้นมั่นคงและข้อมูลยังคงเป็นที่สนใจรหัสของคุณจะยังคงใช้งานในบางรูปแบบหรืออื่น ๆ
Bobble

7
เนื่องจากมีคนนำ Y2K ขึ้นมา: ระลึกถึง UNIX Y2K ( en.wikipedia.org/wiki/Year_2038_problem )
MrFox

40

เราผลิตซอฟต์แวร์ที่ใช้งานโดยจ่ายเงินให้ลูกค้ามากกว่า 20 ปี codebase นั้นมีอายุการใช้งานยาวนานกว่าเครื่องมือควบคุมแหล่งที่มาหลายรุ่น ซอฟต์แวร์ของเราสามารถใช้งานได้ทุกจุดยกเว้นสำหรับแท็บเล็ต

บางส่วนของความกังวล ได้แก่ESIGNและUETA ทนายความของเราเชื่อว่าเราจำเป็นต้องเก็บบันทึกข้อมูลอิเล็กทรอนิกส์ไว้เป็นเวลาอย่างน้อย 10 ปี สำหรับเอกสารที่จะถูกเก็บไว้ทั้งหมดคุณควรมีลักษณะเป็นPDF / A

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

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

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


ขอบคุณสำหรับการแบ่งปันประสบการณ์ของคุณ ฉันต้องการบางสิ่งที่แน่นอนเนื่องจากสถาปนิกปัจจุบันไม่ได้ให้ความเห็นรหัสใด ๆ ของเขาหรือให้เอกสารใด ๆ แก่เรา มันเป็นฝันร้ายด้านลอจิสติกส์ แต่ฉันหวังว่าจะเปลี่ยนมัน PDF / A เป็นสิ่งที่ฉันจะตรวจสอบอย่างแน่นอนเนื่องจากเป็นสิ่งที่ลูกค้าของเราต้องการ - โดยเฉพาะอย่างยิ่งสำหรับการตรวจสอบ ขอบคุณอีกครั้งสำหรับคำแนะนำของคุณ!
Pete

4
นี่เป็นคำตอบที่ครอบคลุมและคิดอย่างดี คุณทำให้จุดที่ดีบางอย่างเกี่ยวกับความสำคัญของการตรวจสอบทั้งเพื่อให้การเปลี่ยนแปลงข้อมูลและข้อมูลที่มีคุณภาพ แต่ยังสำหรับเหตุผลทางกฎหมายที่อยู่เบื้องหลังการติดตามใครดูสิ่งที่ข้อมูลดู HIPAA หากซอฟต์แวร์ของคุณจะถูกใช้ในสหรัฐอเมริกาคุณจะมีข้อ จำกัด ด้านความปลอดภัยและข้อกำหนดที่จำเป็นตามกฎหมายนี้
maple_shaft

3
... อย่างน้อยSVN เพื่อ gitเป็นไปได้ด้วยประวัติการกระทำเต็ม
feeela

ไม่ใช่แค่ SVN ถึง Git แต่ระบบที่ไม่ใช่ยุคหินส่วนใหญ่แม้ว่าระบบเก่าอย่าง CVS มักจะต้องปรับเปลี่ยนด้วยตนเองด้วย reposurgeon ผู้ส่งออกส่วนใหญ่ส่งกระแสข้อมูลการส่งออก git-fast-export ด้วยซึ่งง่ายพอที่จะนำเข้าโดย VCS ที่ไม่ใช่ Git ได้เช่นกัน
grawity

2
ฉันขอแนะนำให้คุณอย่าตั้งชื่อการทดสอบเฉพาะหลังจากหมายเลขการติดตามบั๊ก & สเปคเป็น: ก) หมายเลขบั๊กมักจะเริ่มต้นใหม่จาก 0 (เนื่องจากดูเหมือนว่าไม่มีใครชอบ> ตัวเลข 5 หลักและซอฟต์แวร์การติดตามบั๊กได้รับการแลกเปลี่ยน; เพื่อหลงทาง (น่าเกลียด แต่มันเกิดขึ้นบ่อยครั้งพอ); c) ชื่อเซ็กซี่มักทำให้ชัดเจนพอ แม้ว่าการอ้างถึง spec / bug id นั้นเป็นความคิดที่ดีอยู่เสมอ
bernstein

29

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

การทำให้ปกติฐานข้อมูลบางส่วนไม่จำเป็นต้องมีการคาดหวังทั้งหมดในการตั้งค่าทางการแพทย์ บางส่วนของฐานข้อมูลทางการแพทย์ที่มีลักษณะที่ทำให้พวกเขาเป็นแบบที่ดีสำหรับEAV (Entity / แอตทริบิวต์ / Value)รุ่น


2
@ user2708395 ระวังด้วยการออกแบบ EAV เนื่องจากอาจไม่ใช่วิธีที่ง่ายที่สุดหรือง่ายต่อการค้นหา นอกจากนี้ยังอาจไม่ใช่ตัวเลือกที่ดีสำหรับการรายงาน
maple_shaft

@maple_shaft นั่นคือสิ่งที่ฉันได้อ่านเช่นกัน ฉันจะต้องระมัดระวังอย่างมากเมื่อได้ยินเรื่องราวสยองขวัญที่ผู้คนใช้มากเกินไป ดูที่การใช้ฐานข้อมูลการรายงานบางอย่างเพื่อให้ง่ายต่อการสืบค้นเนื่องจากลูกค้าสร้างรายงานเพียงเดือนละครั้ง
Pete

4
@maple_shaft: โดยปกติข้อมูลจะถูกแยกจากสคีมา / ฐานข้อมูล EAV ไปยังสคีมา / ฐานข้อมูลการรายงานที่แยกต่างหาก
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner นั่นเป็นจุดที่ยอดเยี่ยม ความยืดหยุ่นในสคีมาของคุณที่ EAV ให้บริการนั้นไม่มีที่เปรียบ แต่แน่นอนว่ามันไม่ใช่ bullet เงินสำหรับการคงอยู่ทั้งหมด
maple_shaft

ในขณะที่ฉันจะให้ EAVs สามารถใช้ได้คุณจะประหลาดใจกับความสัมพันธ์ที่คุณพบ ที่กล่าวว่าคุณลักษณะพิเศษที่มักปรากฏสำหรับอุตสาหกรรมประเภทนี้ (การดูแลสุขภาพลูกค้าสัมพันธ์ ฯลฯ ) จะต้องไปที่ไหนสักแห่ง ... เพียงแค่ให้แน่ใจว่าได้สำรองไว้ด้วยตารางแอตทริบิวต์ที่สำคัญเพื่อรับรายการมาตรฐานของ คุณลักษณะ.
Clockwork-Muse

13

คำตอบจากมุมมองส่วนหน้า:

อย่าฟังทุกคนว่าไม่สามารถทำได้เพราะบริการเว็บของมหาวิทยาลัยซานฟรานซิสโกที่ฉันได้เขียนในปี 1996 ในที่สุดก็ไปสวรรค์บนอินเทอร์เน็ตเมื่อสองสามปีที่แล้วและไม่จำเป็นต้องแก้ไขความเข้ากันได้ของเบราว์เซอร์เดียวในเวลานั้น ; นั่นเกือบครึ่งหนึ่งของเป้าหมาย 40 ปีของคุณ และส่วนหน้าแบบอิง JavaScript นี้ฉันสร้างขึ้นในปี 1998 สำหรับโครงการ Stanford Research Institute ถูกแทนที่ด้วยบางสิ่งที่กระพริบตาในอีกไม่กี่ปีต่อมา แต่ไม่มีเหตุผลที่ UI ดั้งเดิมจะไม่สามารถทำงานได้ในปัจจุบันด้วยการแก้ไขความเข้ากันได้เล็กน้อย

เคล็ดลับคือเพื่อให้แน่ใจว่าแอปของคุณใช้มาตรฐาน W3C / ECMA ที่รองรับเท่านั้นและมีการออกแบบที่สะอาดภายใต้การควบคุมของคุณ ในขณะที่แอพพลิเคชั่นบนเว็บจำนวนมากที่เขียนถึงเทคโนโลยียุค 90 ที่ทันสมัยไม่สามารถทำงานได้ดีหรือในทุกวันนี้แอพพลิเคชั่นบนเว็บยุค 90 ที่เขียนตามมาตรฐานที่สำคัญยังคงทำอยู่ พวกเขาอาจดูPassé แต่พวกเขาทำงาน

เป้าหมายที่นี่ไม่ได้เขียนแอปพลิเคชันเว็บที่จะขึ้นไปบนเซิร์ฟเวอร์ของพวกเขาและอยู่ที่นั่นเป็นเวลา 40 ปีโดยที่ไม่มีใครแตะต้องอีกเลย มันคือการสร้างรากฐานที่ยังคงสามารถใช้งานได้นับทศวรรษซึ่งสามารถเติบโตเพื่อรองรับคุณสมบัติใหม่โดยไม่ต้องสร้างใหม่ตั้งแต่ต้น

ก่อนอื่นคุณต้องใช้รหัสมาตรฐานอย่างเป็นทางการและมาตรฐานอย่างเป็นทางการเท่านั้น ไม่มีคุณสมบัติของ JavaScript ที่ไม่ได้เป็นส่วนหนึ่งของมาตรฐาน ECMAScript ที่ได้รับการยอมรับ ES5.1 เป็นรุ่นปัจจุบันและได้รับการสนับสนุนโดยทั่วไปดังนั้นจึงปลอดภัยที่จะกำหนดเป้าหมาย HTML5, CSS และ Unicode เวอร์ชันปัจจุบันก็ดีเช่นกัน ไม่มีคุณลักษณะ JavaScript, CSS3 หรือ HTML ทดลอง (คุณสมบัติที่มีคำนำหน้าผู้ขายหรือไม่มีข้อตกลง 100% ระหว่างเบราว์เซอร์) และไม่มีความเข้ากันได้เฉพาะเบราว์เซอร์ คุณสามารถเริ่มใช้คุณสมบัติใหม่ได้เมื่ออยู่ในมาตรฐานและทุกคนรองรับได้โดยไม่ต้องขึ้นหน้า

การสนับสนุน ES5 จะหมายถึงการลดลงของ IE8 หรือเก่ากว่าซึ่งฉันแนะนำต่อไปเนื่องจากต้องการแฮ็กเฉพาะเบราว์เซอร์ซึ่งจะไร้ประโยชน์ในอีกไม่กี่ปีข้างหน้า ผมขอแนะนำอย่างเคร่งครัดโหมด ES5 สำหรับโอกาสที่ดีที่สุดที่ยืนยาวซึ่งอันที่จริงชุดพื้นฐานความเข้ากันได้เบราว์เซอร์ของคุณในIE10 และรุ่นล่าสุดของคนอื่น เบราว์เซอร์เหล่านั้นยังมีการสนับสนุนดั้งเดิมสำหรับคุณลักษณะการตรวจสอบความถูกต้องของฟอร์มและตัวยึดตำแหน่ง HTML5 จำนวนมากซึ่งจะมีประโยชน์เป็นเวลานาน

รุ่นใหม่ของ ECMAScript รักษาความเข้ากันได้กับรุ่นเก่าดังนั้นมันจะง่ายกว่ามากที่จะนำคุณสมบัติที่จะเกิดขึ้นถ้ารหัสของคุณถูกเขียนตามมาตรฐานปัจจุบัน ตัวอย่างเช่นคลาสที่กำหนดโดยใช้classไวยากรณ์ที่จะเกิดขึ้นจะสามารถใช้แทนกันได้อย่างเต็มที่กับคลาสที่กำหนดด้วยconstructor.prototypeไวยากรณ์ปัจจุบัน ดังนั้นในห้าปีนักพัฒนาสามารถเขียนคลาสลงในรูปแบบ ES6 บนพื้นฐานแบบไฟล์ต่อไฟล์โดยไม่ทำลายอะไรเลย - แน่นอนว่าคุณมีการทดสอบหน่วยที่ดี

ประการที่สองหลีกเลี่ยงเฟรมเวิร์กแอป JavaScript ที่ทันสมัยโดยเฉพาะหากพวกเขาเปลี่ยนวิธีที่คุณใช้รหัสแอปของคุณ แบ็คโบนเป็นสิ่งที่โกรธแค้นจากนั้น SproutCore และ Ember เป็นและตอนนี้ Angular เป็นกรอบที่ทุกคนชื่นชอบในการโปรโมต อาจมีประโยชน์ แต่ก็มีบางอย่างที่เหมือนกัน: พวกเขามักจะทำลายแอพและต้องการเปลี่ยนรหัสเมื่อมีเวอร์ชันใหม่ออกมา ฉันเพิ่งอัปเดตแอป Angular 1.1 เป็น 1.2 และต้องมีการเขียนใหม่ ในทำนองเดียวกันการเปลี่ยนจาก Backbone 2 เป็น 3 ต้องมีการเปลี่ยนแปลง HTML มากมาย มาตรฐานมีการเคลื่อนไหวช้าด้วยเหตุผล แต่กรอบการทำงานเหล่านี้เคลื่อนไหวอย่างรวดเร็วและสิ่งที่ทำลายเป็นระยะมีค่าใช้จ่าย

ยิ่งกว่านั้นมาตรฐานทางการใหม่มักจะทิ้งกรอบเก่าไว้แล้วและเมื่อสิ่งนั้นเกิดขึ้นกรอบเหล่านั้นจะกลายพันธุ์ (โดยมีการเปลี่ยนแปลงที่แตกหัก) หรือถูกทิ้งไว้เบื้องหลัง คุณรู้ไหมว่าจะเกิดอะไรขึ้นกับห้องสมุดสัญญาการแข่งขันทั่วโลกเมื่อ ECMAScript 6 ได้รับการยอมรับและเบราว์เซอร์ทั้งหมดสนับสนุนคลาส Promise ที่เป็นมาตรฐาน พวกเขาจะล้าสมัยและนักพัฒนาจะหยุดอัปเดต หากคุณเลือกเฟรมเวิร์กที่ถูกต้องรหัสของคุณอาจปรับตัวได้ดีพอและถ้าคุณเดาได้ไม่ดีคุณจะต้องดูการปรับโครงสร้างที่สำคัญ

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

สามให้โครงสร้างแอปที่ดีและสะอาด แม้ว่าคุณจะไม่ได้ใช้เฟรมเวิร์กแอพคุณก็ยังสามารถใช้ประโยชน์จากเครื่องมือของนักพัฒนาสร้างสคริปต์และการออกแบบที่ดี ฉันเป็นแฟนตัวยงของการจัดการการปิดของชุดเครื่องมือเนื่องจากมีน้ำหนักเบาและค่าใช้จ่ายจะถูกลบออกอย่างสมบูรณ์เมื่อสร้างแอปของคุณ LessCSS และ SCSS ยังเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการจัดระเบียบสไตล์ชีทของคุณและสร้างสไตล์ชีท CSS ตามมาตรฐานสำหรับการเปิดตัว

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

คุณควรปฏิบัติตามคำแนะนำของ W3C และป้องกันไม่ให้ข้อมูลนำเสนอตกอยู่ในความสมบูรณ์ของ HTML (นั่นรวมถึงกลโกงเช่นการให้องค์ประกอบชื่อคลาสในปัจจุบันเช่น "ข้อความสีเขียวขนาดใหญ่" และ "สองคอลัมน์กว้าง") หาก HTML ของคุณมีความหมายและ CSS เป็นการนำเสนอจะง่ายกว่ามากในการบำรุงรักษาและปรับใช้ สู่แพลตฟอร์มใหม่ในอนาคต นอกจากนี้ยังจะเพิ่มการสนับสนุนสำหรับเบราว์เซอร์พิเศษสำหรับคนตาบอดหรือคนพิการอีกด้วย

ประการที่สี่ทำการทดสอบอัตโนมัติและตรวจสอบให้แน่ใจว่าคุณมีความครอบคลุมที่เกือบเต็ม เขียนหน่วยทดสอบสำหรับทุกคลาสไม่ว่าจะเป็นฝั่งเซิร์ฟเวอร์หรือใน JavaScript ที่ส่วนหน้าตรวจสอบให้แน่ใจว่าแต่ละคลาสมีประสิทธิภาพตามสเป็คในทุกเบราว์เซอร์ที่รองรับ ทำการทดสอบเหล่านี้โดยอัตโนมัติจาก build ของคุณสำหรับทุกการกระทำ สิ่งนี้สำคัญสำหรับทั้งอายุการใช้งานและความน่าเชื่อถือเนื่องจากคุณสามารถตรวจจับข้อบกพร่องได้ตั้งแต่เนิ่น ๆ แม้ว่าเบราว์เซอร์ปัจจุบันจะบดบัง ทั้งกรอบการทดสอบ JSUnit ของจัสมินและ Google Closure นั้นดี

คุณจะต้องทำการทดสอบการใช้งาน UI แบบเต็มซึ่ง Selenium / WebDriver นั้นเก่ง โดยพื้นฐานแล้วคุณเขียนโปรแกรมที่ผ่าน UI ของคุณและใช้งานราวกับว่าบุคคลกำลังทดสอบ ต่อสายเหล่านั้นขึ้นไปยังบ็อตสร้าง

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


1
คำแนะนำที่ดีเกี่ยวกับ 'เฟรมเวิร์ก JS' นำไปใช้กับเฟรมเวิร์กแบ็คเอนด์เช่นกัน ดูคำแนะนำลุงบ๊อบมาร์ติน
Brian Low

ตรงไปตรงมาฉันจะต้องระมัดระวัง JS ให้บริบททั้งหมด ฉันนึกได้ว่า HTML กำลังอยู่ในรอบ 40 ปี ฉันจะไม่ใช้เครื่องมือแปลงใด ๆ ที่จะใช้เพื่อสนับสนุน JS ในแบบที่คุณต้องการ (และพิจารณาว่า JS ของคุณอาจทำสิ่งผิดปกติเนื่องจากอุปกรณ์เอาต์พุตที่ต้องการอาจแตกต่างกันอย่างไม่น่าเชื่อ)
Eamon Nerbonne

10

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

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

อย่างไรก็ตามฉันคิดว่าคนส่วนใหญ่ทำผิดพลาดว่ามันควรจะง่ายในการออกแบบสิ่งที่ง่าย ในความเป็นจริงความพยายามในการออกแบบบางอย่างนั้นแปรผกผันกับความเรียบง่ายของผลลัพธ์ ตามสไตล์ของสถาปัตยกรรม REST นั้นเรียบง่ายมาก

ส่วนที่เหลือคือการออกแบบซอฟต์แวร์ในขนาดของทศวรรษ : ทุกรายละเอียดมีวัตถุประสงค์เพื่อส่งเสริมซอฟต์แวร์ที่ยืนยาวและวิวัฒนาการที่เป็นอิสระ

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-724

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

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


สิ่งนี้มีประโยชน์มาก! ขอขอบคุณ. ฉันได้ทำการวิจัยเพิ่มเติมเกี่ยวกับ REST และฉันสามารถเห็นประโยชน์มากมายของมันและวิธีที่จะขยายออกไปนอกเหนือจากวิธีการ HTTP มันเป็นสิ่งที่ทรงพลังมากและฉันค่อนข้างตื่นเต้นที่ได้ร่วมงานกับมัน ขอบคุณสำหรับลิงค์เช่นกัน! ฉันแค่หวังว่าฉันจะมีเวลามากขึ้น!
Pete

9

หลังจากที่ฉันได้อ่านคำถามและคำตอบอื่น ๆ (คิดออกดีมาก) ฉันคิดว่าฉันจะทิ้งสองเซ็นต์ของฉันเช่นกัน หมายเหตุ: ฉันไม่จำเป็นต้องดูแลแอพพลิเคชั่น / ซอฟต์แวร์เก่า ๆ เลย สิ่งที่ฉันใช้เป็นข้อมูลอ้างอิงคือแอปงานอดิเรกในเว็บที่กำลังดำเนินการอยู่ของฉันเองซึ่งจับข้อมูลรัฐบาลแบบเปิดบางส่วนแยกวิเคราะห์และแสดงในรูปแบบที่แตกต่างกัน แอปเริ่มต้นเป็นโครงการที่ฉันไม่ได้อยู่คนเดียวและที่รัฐบาลเพิ่งประกาศว่าจะให้ข้อมูลนี้กับผู้ใดก็ตาม ดังนั้นจึงเป็นที่ชัดเจนว่าสิ่งต่างๆมากมายจะเปลี่ยนแปลงไปตามกาลเวลา และพวกเขาก็ทำ สิ่งที่ฉันเรียนรู้จากมัน

  • แยกสิ่งต่าง ๆ ในแอปพลิเคชันขนาดเล็ก แต่ละคนสามารถทำงานของตนเองได้อย่างเต็มที่ ทำให้การสลับชิ้นส่วนออกมาเร็วมากปลอดภัยและง่ายมาก และเมื่อคุณต้องย้อนกลับไปมันไม่ยากเลยที่จะหลีกเลี่ยงสิ่งต่าง ๆ ที่เกิดขึ้นและคุณเกิดขึ้นได้อย่างไร หากคุณหรือคนอื่นจะต้องเปลี่ยนบางสิ่งบางอย่างในภายหลังมันง่ายกว่าที่จะแทนที่ส่วนเดียวมากกว่าสิ่งทั้งชุด
  • รับมิดเดิลแวร์คงที่ที่มั่นคง / - เลเยอร์ที่ใช้สำหรับการสื่อสารระหว่างส่วนต่าง ๆ ในกรณีนี้ฉันใช้ JSON แต่ XML, ini หรือมาตรฐานที่คล้ายคลึงกันก็ใช้ได้เช่นกัน ง่ายต่อการทำซ้ำและสามารถแปลงเป็นเกือบทุกอย่าง ทั้งหมดเป็นมาตรฐานที่ได้รับการพิสูจน์แล้วว่าจะอยู่รอดได้ในระยะเวลาหนึ่ง แม้ว่ารูปแบบข้อมูลและ / หรือที่เก็บข้อมูลจะเปลี่ยนแปลง แต่ละแอพสามารถใช้ที่เก็บข้อมูลของตนเองสำหรับงานเฉพาะ สิ่งนี้ทำให้ปริมาณข้อมูลสแกนสำหรับงานที่เล็กลงดังนั้นจึงง่ายต่อการจัดการและบำรุงรักษาและแลกเปลี่ยนได้ง่ายขึ้น
  • ไม่ต้องกังวลกับการตัดสินใจเขียนโปรแกรมภาษา สิ่งเหล่านั้นจะเปลี่ยนแปลงไปตามกาลเวลา เพียงให้แน่ใจว่าคุณใช้ภาษาที่คุณพอใจหรือเหมาะกับงานที่สุด
  • ตรวจสอบให้แน่ใจว่าที่เก็บข้อมูลของคุณ"ปรับขนาดได้ในแนวนอน"และง่ายต่อการเสียบโมดูลเก็บข้อมูลเพิ่มเติม
  • รับจุดร่วม (ในกรณีของฉันคือ URIs) ซึ่งเป็นแอพขนาดเล็กที่เรียกและ / หรือแลกเปลี่ยนข้อมูล

สรุป: สิ่งที่ฉันสนใจมากที่สุดคือการแยกความกังวลและความสามารถในการแลกเปลี่ยนของชิ้นส่วนที่ได้รับมอบหมายสำหรับงาน คุณก็รู้ว่าใน 40 ปี (แม้ใน 5 หรือ 10) ฮาร์ดแวร์อินเตอร์เฟสการจัดเก็บและอื่น ๆ จะเปลี่ยนไปมาก และภายหลังนักพัฒนาจะต้องตอบสนองต่อการเปลี่ยนแปลงเหล่านั้นและแลกเปลี่ยนบางส่วนของแอปพลิเคชันของคุณไม่ว่าจะเป็นที่เก็บข้อมูลหรือส่วนต่าง ๆ ของส่วนต่อประสานผู้ใช้


1
คำแนะนำที่ดีมาก! ขอบคุณ ฉันเห็นด้วยกับการแยกงานและสร้าง mini-apps อย่างแน่นอน การสร้างทุกอย่างในปัจจุบันนั้นเชื่อมโยงกันทำให้ยากที่จะรวมคุณสมบัติและข้อกำหนดใหม่ ๆ เข้าด้วยกัน ฉันหวังว่าจะได้ใช้อินเทอร์เฟซ RESTful และใช้ JSON ไม่ต้องบ่น แต่เมื่อฉันเข้าร่วมครั้งแรกสถาปนิกต่างประเทศจะไม่ให้ฉันใช้ JSON ดังนั้นฉันเพิ่งบอกเขาว่าฉันผ่าน "สตริง" และออกจากส่วนที่สตริงเหล่านี้อยู่ในรูปแบบ JSON :)
Pete

7

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

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

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

  • Decouple ระบบอย่างหนักโดยใช้มาตรฐานที่ยอมรับกันอย่างกว้างขวาง การเลิกการเข้าถึงข้อมูลและการกลายพันธุ์ในเว็บเซอร์วิสนั้นเป็นขั้นตอนเดียวสำหรับสิ่งนี้ การรวมเข้ากับคิวข้อความสำหรับการส่งการเปลี่ยนแปลงและจะช่วยให้แต่ละส่วนของระบบเปลี่ยนภาษาหรือเทคโนโลยีเมื่อเวลาผ่านไป


น่าเสียดายที่การใช้ฐานข้อมูล schemaless ไม่ได้หมายความว่าการปรับโครงสร้างและการจัดระเบียบข้อมูลใหม่มีค่าใช้จ่ายเป็นศูนย์
Alex D

4

ตกลงดังนั้นฉันจะพูดบางสิ่งที่นี่ซึ่งอาจจะไม่เป็นที่นิยมสวย แต่ติดกับฉันที่นี่

เนื่องจากนี่เป็นโครงการแรกของคุณที่ข้อมูลและ / หรือแอปพลิเคชันควรมีอายุการใช้งานนานกว่า 20 ปีและคุณเป็นหนึ่งในผู้นำโครงการคุณจำเป็นต้องย้อนกลับไปและคิดเกี่ยวกับโอกาสของโครงการนี้ที่ประสบความสำเร็จ . เพราะพวกมันอยู่ติดกับศูนย์

คุณต้องใช้เวลาเป็นจำนวนมากในการออกแบบฐานข้อมูลและทำให้ถูกต้อง เพื่อให้โครงการนี้ประสบความสำเร็จคุณจะต้องนำสถาปนิกด้านข้อมูลมาไว้ในโครงการและจะเร็วกว่านั้นในภายหลัง หากไม่มีใครที่มีประสบการณ์ในการออกแบบฐานข้อมูลและผู้ที่มีประสบการณ์ในการใช้ข้อมูลในอนาคตอัตราต่อรองของข้อมูลจะยังคงมีประโยชน์หลังจาก 5 ปีที่ผ่านมาน้อยกว่า 40 ปีที่น้อยมาก

คาดว่าคนสองคน (หนึ่งในนั้นมีชื่อของ jr. dev) เพื่อสร้างบางสิ่งบางอย่างตั้งแต่เริ่มต้นซึ่งคาดว่าจะมีอายุ 40 ปีอาจไม่ประสบความสำเร็จ ควรมีทีมงานหลายคนที่มีประสบการณ์ในการทำงานกับโครงการขนาดใหญ่เช่นนี้ที่ทำงานด้านการออกแบบข้อมูลการออกแบบ API และการออกแบบแอปพลิเคชัน อย่างนี้ไม่ใช่โครงการ 2 คน

ต้องการผูกโครงการกับบางสิ่งบางอย่างเช่น Drupal แสดงให้เห็นว่าเหตุใดโครงการจึงต้องการคนที่คุ้นเคยกับการทำงานในโครงการประเภทนี้ คุณไม่ต้องการผูกแอปพลิเคชันกับสิ่งที่อาจมีสไตล์ในเวลาเพียงไม่กี่ปี หากคุณทำเช่นนั้นการหาคนทำงานในระบบใน 5-10 ปีอาจเป็นเรื่องยากมากอย่างรวดเร็ว

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


3

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

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

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


ฉันคิดว่านั่นเป็นความล้มเหลวของโครงการนี้ตั้งแต่แรกก็คือมันเริ่มต้นโดยไม่มีสถาปนิกข้อมูลที่เหมาะสม นี่เป็นคำแนะนำที่ดีมาก
Pete

ใช้เวลาในการโทรหาและจ้างฉัน :) ทำเรื่อง Data Governance & Taxonomy ให้กับ บริษัท บางแห่งในขณะที่เราพูด :)
Alex S

3

กุญแจสำคัญที่นี่คือการมุ่งเน้นไปที่ฐานข้อมูล (ดังที่กล่าวไว้ข้างต้น) สิ่งนี้จะต้องสอดคล้องกันและอธิบายการดำเนินการอย่างสมบูรณ์ มันต้องการที่จะเติบโตไปพร้อมกับการดำเนินการที่เปลี่ยนแปลงไป ถ้ามันไม่ง่ายที่จะเปลี่ยนมันจะล้าสมัยและนั่นคือจูบแห่งความตาย ที่เหลือค่อนข้างมีความสำคัญน้อยกว่า

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

บริษัท ที่ฉันเคยทำงานมาก่อนเกษียณคือระบบที่เขียนขึ้นมาใหม่และเติบโตอย่างต่อเนื่องเกือบ 25 ปีและครอบคลุมทุกด้านของผู้ค้าปลีกขนาดกลาง แง่มุมของระบบนี้ที่ฉันรู้สึกว่าสำคัญคือ:

  • การรวมเป็นสิ่งสำคัญ
  • ฐานข้อมูลจะต้องถูกต้องและเข้าใจได้ง่ายสำหรับทั้งฝ่ายไอทีและพนักงานคนอื่น ๆ ดังนั้นจึงจำเป็นต้องมีการเน้นเรื่องการตั้งชื่อแบบหวาดระแวงเกือบ เรามีตารางของตัวช่วยจำที่กำหนดไว้ซึ่งจะถูกรวมเข้าด้วยกันเพื่อสร้างชื่อตารางและฟิลด์และ "รหัส" ทั้งหมดก็มีชื่อเหมือนกันว่าเป็นค่าคงที่และเก็บไว้ในโครงสร้างตาราง EAV
  • เราสรุปตรรกะทางธุรกิจลงในทริกเกอร์ฐานข้อมูล นี่เป็นเรื่องเจ็บปวดในตอนแรกและต้องการงานเพิ่มเติมเพื่อส่งข้อความแสดงข้อผิดพลาดไปยังไคลเอนต์และอนุญาตให้ทริกเกอร์สามารถเปลี่ยนแปลงได้อย่างยืดหยุ่นโดยไม่ต้องล็อกทั้งตารางในบางระบบ กว่าอย่างอื่น
  • สมมติว่าคุณจะเก็บตารางอ้างอิงอย่างน้อยที่สุด (โดยเฉพาะอย่างยิ่งการทำธุรกรรมทั้งหมด แต่เป็นธุรกรรมที่สำคัญและเร็วที่สุด) สำหรับชีวิตของระบบแม้ว่าจะ“ ลบ” เพื่อให้การอ้างอิงของคุณถูกต้อง
  • เนื่องจากข้างต้นให้แน่ใจว่าตัวระบุที่ไม่ซ้ำกันและหมายเลขธุรกรรมมีขนาดในระยะยาว (ตอนแรกฉันพูดเล่นขำ ๆ ว่าพวกเขาต้องการที่จะอยู่ได้นานจนกว่าฉันจะเกษียณ)

2

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

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

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