สวัสดีเพื่อนร่วมงาน วันนี้เราจะมาพูดถึงงานเตรียมการที่คุณต้องทำก่อนที่จะเริ่มเขียนโค้ดอย่างจริงจัง โดยเฉพาะอย่างยิ่งเกี่ยวกับการวางแผนและการสร้างสถาปัตยกรรมแอปพลิเคชัน
แต่จะเริ่มต้นที่ไหน? จะสร้างสถาปัตยกรรมนี้ได้อย่างไร? เช่นเดียวกับทุกสิ่ง คุณต้องเริ่มต้นจากจุดเริ่มต้น กล่าวคือ - ด้วย IDEA แนวคิดของโครงการของเราคือการสร้างบอตโทรเลขที่มีประโยชน์พร้อมฟังก์ชันพื้นฐาน ให้เราทำซ้ำอย่างชัดเจนว่า “ในฐานะผู้ใช้ ฉันต้องการที่จะรับการแจ้งเตือนเมื่อมีการเผยแพร่บทความใหม่ในกลุ่มเหล่านั้นบน JavaRush ที่ฉันสนใจ” ตามหลักการ YAGNI เราจะสร้างแอปพลิเคชันของเรา ซึ่งหมายความว่าเราจะเอาเฉพาะสิ่งที่เราต้องการเท่านั้น เราจะไม่สร้างฟังก์ชันการทำงานไว้ล่วงหน้าและสำรองไว้เพียงเพราะเราต้องการ และสักวันหนึ่งมันอาจจะมีประโยชน์จริง ๆ ใช่ เราจะสร้างแอปพลิเคชันที่สามารถอ่านและขยายได้ แต่ไม่ได้หมายความว่าเราจะสร้างสคีมาฐานข้อมูล "เพื่อการเติบโต" เพื่อไม่ให้สนับสนุน "การเติบโต" นี้ ฉันจึงตัดสินใจว่าควรละทิ้งมันไปเลยจะดีกว่า ซึ่งจะช่วยให้เราหลีกเลี่ยงการสนับสนุนที่ไม่จำเป็นในระหว่างการพัฒนาและการทดสอบที่ไม่จำเป็น ต่อมาเมื่อโครงการของเราเข้าสู่การผลิต (อีกครั้งหนึ่ง Anglicism จากตัวย่อ prod - การผลิต) เราก็จะสามารถทำอะไรบางอย่างได้มากขึ้น เมื่อคุณตัดสินใจเลือกไอเดียได้แล้ว คุณจะต้องทำตัว ซุกซน และวาดรูป เล็กน้อย จะวาดอะไร? เราจะต้องมีความสามารถในการบันทึกข้อมูลการสมัครสมาชิกไปยังกลุ่มผู้ใช้ที่แตกต่างกัน ฉันรู้ว่าคุณสามารถใช้ ID ผู้ใช้ในรูปแบบของ ID แชทใน Telegram และมีแนวคิดว่าการค้นหาบทความใหม่จะดำเนินการอย่างไร: เราจะค้นหาในทุกกลุ่มที่สมัครรับบทความใหม่และส่งไปที่แชท จากนี้ เราได้สิ่งต่อไปนี้เป็นการประมาณครั้งแรก (นี่คือการพัฒนาที่ไม่มีการปรุงแต่ง):
ฉันไม่หวังว่าคุณจะเข้าใจลายมือของฉัน: ฉันต้องการแสดงให้เห็นว่าการพัฒนาเริ่มต้นอย่างไรและที่ไหน ขั้นตอนแรกเสร็จสิ้นแล้ว: เราได้ตัดสินใจแล้วว่าอะไรจะเกิดขึ้น โมเดล/ตารางในฐานข้อมูลอธิบายไว้ข้างต้น แต่นี่คือฉบับร่าง มันสามารถและควรได้รับการขัดเกลาและทำให้เป็นรูปแบบที่อ่านง่ายขึ้น ขณะที่ฉันกำลังขัดเกลา ฉันจำได้ว่าฉันต้องการดูสถิติการทำงานของบอทด้วย เพิ่มสิ่งนี้ ในภาพวาดนี้มีความชัดเจนว่าจะจัดเรียงอะไรและอย่างไร นั่นคือตารางและฟิลด์ใดที่จะอยู่ในตารางเหล่านั้น ชื่อเอนทิตีใดสำหรับตาราง มีตัดสินใจว่าจะมีหลายอย่าง:
หลังจากนั้นฉันต้องการแสดงรายละเอียดเพิ่มเติมเกี่ยวกับวิธีค้นหาบทความใหม่ ในการทำเช่นนี้ ฉันใช้แผนภาพ BPMN ซึ่งฉันแปลงเป็นรูปภาพและได้รับสิ่งนี้:
ทุกสิ่งที่นี่สามารถอ่านและเข้าใจได้มากขึ้น เราจะทำงานตามรูปแบบนี้ในการค้นหา ผู้จัดการชอบโครงร่างนี้มาก เพราะไม่เพียงแต่โปรแกรมเมอร์จะเข้าใจได้เท่านั้น :D โดยทั่วไปแล้ว ได้มีการเริ่มต้นแล้ว
อย่างที่คุณเห็นฉันระบุชื่อโครงการที่นี่อธิบายและเลือกเทมเพลตที่เราจะใช้ทำงาน - คัมบังอัตโนมัติ สำหรับเราตอนนี้มันไม่สำคัญนักว่าสิ่งนี้หมายถึงอะไร สิ่งสำคัญคือเราจะมีกระดานที่มีงานแบ่งออกเป็นคอลัมน์โดยแต่ละคอลัมน์จะเป็นสถานะของงาน:
นอกจากนี้ยังเป็นที่น่าสังเกตว่าเมื่อสร้างมันขึ้นมาฉันจะระบุทันทีว่าโครงการใดงานนี้เหมาะสำหรับใครจะเป็นผู้ดำเนินการ (ผู้รับมอบหมาย) และป้ายกำกับ (ป้ายกำกับ) ใดที่เป็นของงานนี้ ต่อไป ฉันจะแสดงชื่องานพร้อมคำอธิบายเล็กๆ น้อยๆ และลิงก์ไปยังงานเหล่านั้น พวกเขาทั้งหมดอยู่ที่นี่ เราจะดำเนินงานตามลำดับโดยประมาณตามที่ระบุไว้ที่นี่:
ขณะนี้เรายังมีเอกสารเกี่ยวกับการทำงานกับ JavaRush API สำหรับการทำงานกับกลุ่ม

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


สร้างพื้นที่เก็บข้อมูลสำหรับการทำงาน
สุดท้ายนี้ คุณสามารถสร้างพื้นที่เก็บข้อมูลสำหรับการทำงานกับบอตโทรเลขได้
- เรากรอกรายการที่เราคุ้นเคยอยู่แล้ว - ชื่อของที่เก็บคำอธิบายสั้น ๆ
- เพิ่มใบอนุญาต - Apache 2.0 (คุณสามารถเลือกใบอนุญาตได้ตามดุลยพินิจของคุณ)
- โครงการ ของเราพร้อมใช้งานแล้ว - นี่คือลิงค์ไป: JavaRush Telegrambot
สร้างโปรเจ็กต์ในพื้นที่เก็บข้อมูล
หากต้องการทำงานกับโปรเจ็กต์ จะเป็นการดีหากใช้เครื่องมือ GitHub เช่น โปรเจ็กต์ มันคืออะไร? นี่คือที่ที่คุณสามารถสร้างงาน ติดตามความสำเร็จ และบันทึกสถานะของงานได้ กำหนดว่าใครจะเป็นผู้ดำเนินการและอื่น ๆ อีกมากมาย ในการทำเช่นนี้ในโครงการที่สร้างขึ้นเราจะพบ ปุ่ม โครงการและเราจะสร้างโครงการใหม่ที่นั่น
- สิ่งที่ต้องทำ - งานทั้งหมดที่วางแผนไว้ว่าจะทำ;
- อยู่ระหว่างดำเนินการ - งานที่กำลังดำเนินการอยู่
- เสร็จสิ้น - งานที่เสร็จสิ้นภายในโครงการนี้แล้ว
การเขียนประเด็น (ประเด็น) สำหรับโครงการ
เพื่อให้เข้าใจถึงงานที่ต้องเขียน เรามาตัดสินใจว่าเราจะมีอะไรบ้างในโครงการ เราต้องการแอปพลิเคชันที่สามารถเปิดใช้งานได้ง่ายและรวดเร็ว เพื่อให้เราสามารถเข้าถึงฐานข้อมูล เพื่อที่เราจะสามารถจัดการและเปลี่ยนแปลงสคีมาฐานข้อมูล เพื่อให้เราสามารถส่งคำขอ REST ใน JavaRush เพื่อรับข้อมูลเกี่ยวกับบทความได้ จากข้อมูลนี้ คุณสามารถเลือกเทคโนโลยีต่อไปนี้:- SpringBoot - เป็นเฟรมเวิร์กสำหรับแอปพลิเคชันของเรา
- Spring Data - สำหรับการทำงานกับฐานข้อมูล
- Flyway - สำหรับการทำงานกับการย้ายฐานข้อมูล
- MySQL - เป็นฐานข้อมูลสำหรับโครงการ
- Telegrambot StringBoot Starter - ไลบรารีสำหรับการทำงานกับบอตโทรเลข
- Unirest เป็นไลบรารีสำหรับการทำงานกับคำขอ REST
เทมเพลตการสร้างงาน
เราจะสร้างงานโดยใช้เทมเพลตต่อไปนี้:- ชื่องานจะมีลักษณะดังนี้: JRTB-{IssueNumber}:{IssueDescription}โดยที่:
- {IssueNumber} คือหมายเลขซีเรียลของปัญหา ลองมาอีกครั้งหนึ่งจากปัญหาที่แล้ว
- {IssueDescription} - คำอธิบายโดยย่อของปัญหา
- ในเนื้อหาของงาน เราจะอธิบายรายละเอียดเพิ่มเติม (บางครั้งอาจตรงกับคำอธิบายในชื่องาน)
- เกณฑ์การยอมรับคือรายการข้อกำหนดหลังจากนั้นจึงถือว่างานเสร็จสมบูรณ์ได้ เอาเป็นว่าหลักเกณฑ์ในการรับงาน การใช้สิ่งเหล่านี้ ผู้ตรวจสอบ (จากผู้ตรวจสอบภาษาอังกฤษ - ผู้ตรวจสอบ - บุคคลที่ดูว่างานเสร็จสมบูรณ์อย่างไร) สามารถเข้าใจได้ว่างานเสร็จสมบูรณ์หรือไม่

- [ฟีเจอร์] JRTB-0: สร้างโปรเจ็กต์บูท Skeleton Spring - ทุกอย่างชัดเจนที่นี่: คุณต้องทำส่วนแรกของสิ่งที่เราทำในบทความที่แล้ว
- [คุณสมบัติ] JRTB-2: เพิ่มบอทโทรเลขให้กับโปรเจ็กต์ - เพิ่มบอทเปล่าที่จะตอบสนองและบอกว่ามันยังมีชีวิตอยู่และสบายดี
- [คุณสมบัติ] JRTB-3: ใช้รูปแบบคำสั่งสำหรับเทเลแกรมบอต - มาตั้งค่าแนวทางที่ถูกต้องในการทำงานกับคำสั่งในบอตโทรเลขกันดีกว่า จนถึงขณะนี้หลายทีม
- [คุณสมบัติ] JRTB-1: เพิ่มเลเยอร์พื้นที่เก็บข้อมูล - นี่คือหนึ่งในงานที่ใหญ่ที่สุด - เป็นการรวมทุกสิ่งที่ต้องทำเพื่อทำงานกับฐานข้อมูล
- [ฟีเจอร์] JRTB-5: ในฐานะผู้ใช้ ฉันต้องการเพิ่มกลุ่มในการสมัครสมาชิก - นี่เป็นเรื่องราวของผู้ใช้เรื่องแรกในการทำความเข้าใจแบบ Agile นี่จะเป็นประโยชน์อย่างแท้จริงสำหรับผู้ใช้ของเรา: คุณสามารถเพิ่มการสมัครสมาชิกกลุ่มให้กับบอทได้
- [ฟีเจอร์] JRTB-12: ดำเนินการกำหนดเวลาในการส่งการแจ้งเตือนเกี่ยวกับบทความใหม่ - ที่นี่จะเป็นการดำเนินการค้นหาบทความใหม่หากมีการเผยแพร่สำหรับแต่ละกลุ่ม และส่งไปยังผู้ใช้ทุกคนที่สมัครรับข้อมูลจากกลุ่ม
- [คุณสมบัติ] JRTB-6: ในฐานะผู้ใช้ ฉันต้องการดูรายการการสมัครสมาชิกกลุ่มของฉัน - ทุกอย่างง่ายดายที่นี่: เราเพิ่มคำสั่งที่แสดงรายการของกลุ่มทั้งหมดที่ผู้ใช้สมัครเป็นสมาชิก
- [คุณสมบัติ] JRTB-7: ในฐานะผู้ใช้ ฉันต้องการลบการสมัครสมาชิกกลุ่มออกจากการสมัครสมาชิกของฉัน - ที่นี่คุณต้องลบการสมัครสมาชิกของผู้ใช้เพื่อรับการอัปเดตในกลุ่ม
- [ฟีเจอร์] JRTB-8: ในฐานะผู้ใช้ ฉันต้องการตั้งค่าให้ไม่ใช้งานโดยใช้บอท - ดำเนินการหยุดบอท นั่นคือทุกสิ่งที่ต้องทำในระบบของเราเพื่อให้งานหยุดลง เพิ่มคำสั่ง /stop เพื่อประมวลผล
- [คุณสมบัติ] JRTB-9: ในฐานะผู้ใช้ ฉันต้องการเริ่มทำงานกับบอทหรือตั้งค่าให้ใช้งานได้หากฉันเคยใช้มาก่อน - เพิ่มการประมวลผลของคำสั่ง /start ตรงตามที่เราต้องการเลย
- [ฟีเจอร์] JRTB-10: ในฐานะผู้ดูแลระบบ ฉันต้องการดูสถิติบอท - สร้างชุดสถิติบอท การเพิ่มความสามารถของผู้ดูแลระบบ
- [ฟีเจอร์] JRTB-11: ในฐานะผู้ใช้ ฉันต้องการดูเอกสารประกอบสำหรับบอตโทรเลขนี้ - เอกสารการเขียน ใช่แล้วเพื่อน ๆ คุณไม่สามารถอยู่ได้โดยปราศจากมันและยิ่งคุณเรียนรู้ที่จะทำสิ่งนี้ได้เร็วเท่าไรก็ยิ่งดีสำหรับคุณเท่านั้น))
กำลังกรอกที่เก็บข้อมูล
จะต้องทำอะไรอีกก่อนที่เราจะเริ่มเขียนโค้ด? - ผู้เขียนคุณสามารถเพิ่มย่อหน้าเหล่านี้ได้กี่ย่อหน้าคุณกำลังดึงมันออกจากเหวหรือไม่? — ไม่มี คุณภาพของงานแสดงอยู่ในรายละเอียด และพวกเขาคือคนที่สมเหตุสมผล เรามาเพิ่มรายละเอียดอีกหนึ่งอย่างกัน เพื่อให้โครงการได้รับความนิยมและเข้าใจได้สำหรับนักพัฒนารายอื่น จำเป็นต้องกรอกรายละเอียด ฉันควรเพิ่มอะไร? ฉันได้อธิบายรายการสิ่งที่สามารถทำได้ทั้งหมดในบทความการเพิ่มประสิทธิภาพการทำงานกับโปรเจ็กต์ของคุณบน GitHub: ทำความรู้จักกับ Github Template Repository ฉันขอแนะนำให้อ่านมันมาก เป็นสิ่งสำคัญสำหรับเราที่จะต้องมีเวอร์ชันที่ชัดเจน มีความเข้าใจที่ชัดเจนในสิ่งที่เรากำลังทำอยู่ ดังนั้นฉันจึงเพิ่มไฟล์ RELEASE_NOTES ซึ่งการเปลี่ยนแปลงในโครงการของเราจะถูกบันทึก ตามตัวอย่าง คุณสามารถดูRELEASE_NOTES จากโครงการของฉันได้ (ใช่ ทำไมไม่แสดงสิ่งที่ฉันทุ่มเทพลังและความคิดสร้างสรรค์ลงไป) มีการอธิบายการเปลี่ยนแปลงสำหรับเวอร์ชันใหม่แต่ละเวอร์ชันอยู่ที่นั่น ฉันยังเพิ่มเทมเพลตสำหรับสร้างงานใหม่ซึ่งมี 4 ตัวเลือก:- รายงานจุดบกพร่องเป็นงานที่สร้างขึ้นโดยผู้ใช้/ผู้ทดสอบที่พบจุดบกพร่องในงานของตน นี่เป็นสิ่งที่สำคัญมาก: ช่วยจัดการการแก้ไขข้อบกพร่อง
- คำขอคุณลักษณะคืองานที่จะเพิ่มฟังก์ชันการทำงานใหม่ งานแรกทั้งหมดในโครงการคืองานคำขอคุณลักษณะ
- คำขอปรับปรุง - งานเพื่อปรับปรุงการทำงานของแอปพลิเคชัน ตัวอย่างเช่น เมื่อต้องการเปลี่ยนคำตอบการทดสอบเมื่อทำงานกับบอท ฉันไม่ใช่นักเขียนด้านเทคนิคและอาจคิดคำตอบที่ไม่ถูกต้องทั้งหมดได้ ดังนั้นถ้าคุณมีความปรารถนาและความสามารถก็เสนอมา :)
- คำถามคือคำถามสำหรับนักพัฒนาเกี่ยวกับการทำงานของแอปพลิเคชัน สิ่งที่มีประโยชน์มาก สมมติว่าไม่มีความเข้าใจในงานหรือมีข้อสงสัยเกี่ยวกับคำถาม คุณสามารถถามคำถามด้วยวิธีนี้และรับคำตอบได้โดยตรง

GO TO FULL VERSION