เคล็ดลับในการวางแผนเขียนโครงการ PHP ขนาดใหญ่ใหม่


13

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

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

ฉันรู้ว่าฉันต้องการเอกสารการออกแบบ แต่มีเลย์เอาต์บางอย่างที่ฉันควรทำตามหรือไม่? ฉันจะต้องติดตามข้อผิดพลาดตั๋วเหตุการณ์สำคัญ ฯลฯ แต่นอกเหนือจาก Trac ฉันไม่รู้ว่าอะไรดีสำหรับสิ่งนั้น ฉันแน่ใจว่าฉันต้องการมากกว่านี้ แต่ฉันไม่รู้ว่าอะไรดังนั้นความช่วยเหลือจะได้รับการชื่นชม


ทำไมคุณต้องการเขียนใหม่ ทำไมไม่ refactor มันในสถานที่ที่ต้องปรับปรุง? เมื่อคุณเขียนสิ่งใหม่ตั้งแต่ต้นโอกาสที่คุณจะกำจัดปัญหาเก่าสำหรับปัญหาใหม่

@ กอร์ดอนบางทีมันเขียนมากชะมัดว่าการเขียนใหม่มันดีกว่า refactoring
rightfold

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

คำตอบ:


7

ดูบางสิ่งที่ฉันทำเมื่อพัฒนาโครงการขนาดใหญ่ด้านล่าง:

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

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

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

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

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

ฉันหวังว่านี่จะช่วยได้. ดูเหมือนคุณจะมีโครงการที่น่าตื่นเต้นรออยู่ข้างหน้าคุณ โชคดี!


10

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


3
นอกจากนี้พิจารณากรอบที่มีอยู่อาจเหมาะสมกว่าการสร้าง Yet Framework แบบใช้ครั้งเดียวอีกครั้ง
S.Lott

1
@ S.Lott - เกิดอะไรขึ้นกับการสร้าง Framework แบบใช้ครั้งเดียวถ้ามันถูกออกแบบมาเพื่อรองรับการใช้งานครั้งเดียวนั้นดีกว่าแบบอื่น?
ไม่เปิดเผยตัว

1
@Chris Bridgett: โลกอาจไม่จำเป็นต้องมีกรอบที่มีความเชี่ยวชาญสูง มันอาจจะเป็น "ความรำคาญที่น่าสนใจ" สนุกเสียเวลา บ่อยครั้งที่เฟรมเวิร์กที่มีอยู่ทำงานได้เช่นกัน "การตัดเย็บ" ในกรอบวัตถุประสงค์พิเศษมักเกิดจากความล้มเหลวในการทำความเข้าใจกับกรอบงานที่มีอยู่แล้ว บ่อยครั้งที่เฟรมเวิร์กที่มีอยู่นั้นปลอดภัยมากขึ้นน่าเชื่อถือกว่าและเร็วกว่า บ่อยครั้งที่เฟรมเวิร์กที่มีอยู่จะดีบั๊กแล้ว บ่อยครั้งที่สมาชิกในทีมคนอื่นเข้าใจกรอบการทำงานที่มีอยู่แล้ว
S.Lott

@ S.Lott: ฉันกำลังเขียนสิ่งนี้สำหรับหลาย ๆ ไซต์ที่ฉันเป็นเจ้าของและการออกแบบของมันก็ถูกติดตั้งในแบบที่ไม่มีกรอบอื่น ๆ ฉันยังไม่ได้วางแผนที่จะปล่อยมันสักครู่ถ้าเคย เรื่อง: TheLQ: นั่นเป็นหนึ่งในความคิดแรกของฉัน แต่ไม่มีภาษาเว็บอื่น ๆ ที่เข้าถึง PHP ที่ทำนอกเหนือจาก. NET งูหลามจะเป็นที่ต้องการ แต่การติดตั้งบนเซิร์ฟเวอร์ cPanel (ซึ่งน่าเศร้าที่ทำให้เว็บโฮสติ้งบนโลกเป็นจำนวนมาก) เป็นความเจ็บปวด
Jon

1
@ S.Lott ฉันได้อ่าน Symfony, CakePHP และ CodeIgniter มาแล้วตั้งแต่โพสต์และสิ่งอันดับหนึ่งที่ทำให้ฉันไม่สามารถใช้สิ่งเหล่านี้ได้ - ดูเหมือนว่าทุกคนจะติดอยู่กับ MVC และไม่สนใจการใช้งานอีกครั้ง การออกแบบปัจจุบันของฉัน (และอนาคตถ้าฉันเขียนใหม่) คือ MVC ในโฟลเดอร์เดียว (โฟลเดอร์ 'โมดูล') พร้อมด้วยมุมมองที่นั่นอย่างไรก็ตามผู้ใช้ต้องการ (Named example.module.view.php) รวมถึงธีม โฟลเดอร์ซึ่งผู้ออกแบบสามารถสร้างธีมของตนเองที่แทนที่มุมมองที่มีอยู่ นี่เป็นสิ่งสำคัญสำหรับฉันและไม่มีกรอบการทำงานหลักใด ๆ ที่ดูเหมือนจะทำเช่นนี้หากไม่มีการแฮ็กข้อมูลจำนวนมากซึ่งทำให้ฉันรำคาญใจ
Jon

10

ฉันขอแนะนำให้ปรับโครงสร้างหนักแทน

ปัญหาที่คุณคาดหวังที่นี่:

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

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

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

ตัวอย่างเช่นคุณพูดถึงคุณไม่มี MVC แต่คุณต้องการ ในขั้นตอนแรกคุณสามารถใช้ไฟล์ PHP ไฟล์เดียวและสมมติว่ามีการรวมกันตามปกติเรียงลำดับดังนั้นในส่วนบนสุดคุณมีการเข้าถึงฐานข้อมูลทั้งหมดการคำนวณ ฯลฯ ที่ด้านล่างคุณจะมี "templating" ( บัตรแรกสำหรับแต่ละไฟล์) ในขั้นตอนที่สองคุณสามารถสรุปแคปเทมเปิลเทมเปิลทั้งหมดเหล่านี้ลงในฟังก์ชั่นเพื่อให้พารามิเตอร์ส่งผ่านได้ (ตั๋วเพิ่มอีกมาก) ทำ? ยินดีด้วยคุณเสร็จสิ้น V ใน MVC แล้ว


ฉันจะคำนึงถึงเรื่องนั้นด้วยขอบคุณ นอกจากนี้เพื่อล้างสิ่งต่าง ๆ ฉันกำลังใช้ MVC ตอนนี้
Jon

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

3

พิจารณาใช้กรอบงานที่มีอยู่ CakePHP, Zend Framework, CodeIgniter และ Symfony เป็นที่รู้จักกันดีสำหรับ PHP หากพวกเขาตอบสนองความต้องการของผู้ใช้หลายร้อยหรือหลายพันคนฉันมั่นใจว่าพวกเขาสามารถตอบสนองคุณได้

หากคุณยินดีที่จะเรียนรู้ / ใช้งานอย่างอื่นนอกเหนือจาก PHP - Django (Python) และ Rails (Ruby) เป็นกรอบการทำงานชั้นนำสำหรับเว็บแอปพลิเคชันทั่วไป

แน่นอนว่าถ้าคุณไม่ต้องการประสบการณ์ในการสร้างเฟรมเวิร์กซึ่งฉันอาจเพิ่มมีค่าน้อยกว่าในตลาด (แทนที่จะรู้วิธีใช้เฟรมเวิร์กที่มีอยู่และสนับสนุนแล้ว)


1

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

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

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


1

ในฐานะซอฟต์แวร์ติดตามปัญหา JIRA นั้นยอดเยี่ยม แต่มีราคาแพงมาก อีกหนึ่งเครื่องมือที่ดีที่ฉันใช้คือEventum แจกฟรี.

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

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

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

หวังว่ามันจะช่วย


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