ยังไม่มีใครพูดถึงดาบสองคมดังนั้นฉันจะเพิ่ม 2 เซนต์ของฉัน หากคุณมีหลายโครงการและพวกเขาแบ่งปันรหัสที่สามารถนำกลับมาใช้ใหม่ได้บ้างตามแนวทางปฏิบัติในการเขียนโปรแกรม / หลักการที่ดี (เช่น DRY) คุณควรวางรหัสไว้ในที่เดียวทั่วโลกและจัดโครงสร้างไว้ในลักษณะเดียวกัน โครงการของคุณโดยไม่มีการดัดแปลงใด ๆ กล่าวอีกนัยหนึ่งให้กำหนดอินเทอร์เฟซให้เป็นสามัญและทั่วไปพอที่จะเหมาะกับทุกคน
มีตัวเลือกไม่กี่อย่างสำหรับการทำสิ่งนี้: 1) สร้างโปรเจ็กต์ฐานที่ผู้อื่นพึ่งพา โครงการนี้สามารถสร้างการกระจายแบบไบนารีที่โครงการอื่นใช้ 2) ดึงโมเดลโอเพ่นซอร์สภายในองค์กรของคุณ มีรหัสทั่วไปเป็นสาขารหัสของตัวเองและให้โครงการอื่นดึงรหัสเช่นเดียวกับที่คุณจะนำซอร์สโค้ดจาก OSS ออนไลน์
ตอนนี้นี่คือที่มาของดาบ ...
การวางโค้ดในที่ ๆ ใช้ร่วมกันซึ่งโครงการ / คนอื่น ๆ นั้นขึ้นอยู่กับนั้นอาจจะค่อนข้างแพง สมมติว่าคุณมีรหัสชิ้นหนึ่งและอีก 4 โครงการขึ้นอยู่กับมัน หนึ่งในลูกค้าของคุณที่ใช้โครงการ A พบข้อบกพร่องและคุณต้องทำการแก้ไข คุณรีบแก้ไขและลูกค้ารายนั้นก็มีความสุข แต่คุณเพิ่งแก้ไขรหัสบางส่วนที่ 3 โครงการอื่นขึ้นอยู่กับ คุณได้ทดสอบซ้ำทั้งหมดเพื่อให้แน่ใจว่าไม่มีการเปิดใช้เงื่อนไขขอบ?
รหัสทั่วไปจะต้องถูกสร้างขึ้นอย่างระมัดระวังมากขึ้นและส่วนต่อประสานของโมดูลจะต้องได้รับการออกแบบให้ดียิ่งขึ้นเนื่องจากรหัสนั้นจะต้องรองรับลูกค้าหนึ่งราย แต่ไม่ใช่ 4 รายและแต่ละรหัสอาจใช้รหัสนี้ด้วยความแตกต่างเล็กน้อย
หากโครงการของคุณอยู่ในรอบการเผยแพร่ที่แตกต่างกันคุณจะต้องระมัดระวังให้มากขึ้นเกี่ยวกับการจัดการรหัสทั่วไป คุณไม่สามารถทำการเปลี่ยนแปลงในรหัสทั่วไปได้เพียงเพราะโครงการ B ต้องการฟังก์ชั่นใหม่ถ้าคุณห่างจากการตัดภาพสุดท้ายสำหรับโครงการ C 3 วัน
ฉันไม่ได้บอกว่าห้องสมุดทั่วไปไม่ใช่ทางออกที่ถูกต้อง ฉันเป็นผู้สนับสนุนที่แข็งแกร่งของ DRY และฉันได้สร้างและสนับสนุนรหัสทั่วไปก่อนและดำเนินการต่อไป แค่อยากจะใส่มันลงไปที่นั่นการสร้างรหัสทั่วไปจะมีค่าใช้จ่ายของตัวเอง
หากคุณเป็นคนเดียวที่ใช้รหัสนี้ซ้ำรหัสนี้ก็ไม่เลว หากคุณมีทีมวิศวกรและพวกเขาเริ่มใช้รหัสทั่วไปค่าใช้จ่ายจะมากขึ้น หากผู้อื่นมีส่วนเกี่ยวข้องคาดหวังว่าการวางโค้ดลงในไลบรารีทั่วไปจะใช้เวลานานถึง 3 เท่าเท่าที่จะเป็นไปได้จนถึงจุดที่คุณคิดว่ามันเป็น "สมบูรณ์" คุณจะต้อง a) ทำให้ไลบรารีมีประสิทธิภาพมากขึ้นเพื่อป้องกันเงื่อนไขขอบทุกประเภทและการใช้งานที่ไม่ถูกต้อง b) จัดเตรียมเอกสารเพื่อให้ผู้อื่นสามารถใช้ห้องสมุดและ c) ช่วยให้คนอื่นดีบั๊กเมื่อพวกเขาใช้ห้องสมุดในแบบที่คุณ ยังไม่ได้คาดหวังและเอกสารของคุณไม่ครอบคลุมกรณีการใช้งานเฉพาะ
ข้อเสนอแนะน้อยฉันสามารถนำเสนอ:
- การมีรหัสทั่วไปที่ครอบคลุมโดยการทดสอบหน่วยอัตโนมัติสามารถไปได้ไกลและทำให้คุณรู้สึกว่าเมื่อคุณทำการเปลี่ยนแปลงคุณไม่เพียงแค่ทำลายโครงการอื่น ๆ
- ฉันจะวางฟังก์ชันการทำงานที่มั่นคงมากไว้ในรหัสทั่วไปเท่านั้น หากคุณเขียนชั้นเรียนเมื่อปีที่แล้วเพื่อทำการจัดการตัวจับเวลาและคุณไม่ได้เปลี่ยนมันใน 9 เดือนและตอนนี้คุณมี 3 โครงการอื่น ๆ ที่ต้องใช้ตัวจับเวลาตรวจสอบให้แน่ใจว่านั่นเป็นตัวเลือกที่ดี แต่ถ้าคุณเพิ่งเขียนอะไรบางอย่างเมื่อสัปดาห์ที่แล้วดี ... คุณไม่มีตัวเลือกมากมาย (และฉันเกลียดการคัดลอก / วางรหัสอาจมากกว่าผู้ชายคนต่อไป) แต่ฉันคิดว่าสองครั้งที่ทำให้มันเป็นเรื่องธรรมดา
- หากชิ้นส่วนของรหัสเป็นเรื่องเล็กน้อย แต่คุณเคยใช้มันในหลาย ๆ ที่บางทีมันอาจจะดีกว่าถ้ากัดกระสุนทิ้ง DRY ไว้คนเดียวแล้วปล่อยให้สำเนาหลายเล่มมีชีวิต
- บางครั้งมันจ่ายเพื่อไม่เพียงแค่ใส่รหัสทั่วไปในที่ตั้งทั่วไปและให้ทุกคนอ้างอิง แต่ให้ถือว่ารหัสทั่วไปเป็นของตัวเอง releasable กับรุ่นวันที่ปล่อยและทุกอย่าง วิธีนี้โครงการ C สามารถพูดว่า "ฉันใช้ไลบรารีทั่วไป v1.3" และหากโครงการ D ต้องการฟังก์ชันใหม่คุณปล่อยให้ v1.3 อยู่คนเดียวปล่อย v1.4 และโครงการ C จะไม่ได้รับผลกระทบ โปรดทราบว่ามันมีราคาแพงกว่ามากในการใช้รหัสทั่วไปเป็นผลิตภัณฑ์ของตัวเองมากกว่าเพียงแค่ตรวจสอบในที่ตั้งทั่วไป