E-Dobavki - บริการเว็บสำหรับค้นหาวัตถุเจือปนอาหารใน Java และ Spring Boot ที่เขียนโดยนักเรียนของฉัน

การแนะนำ

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

ภาษาหลักของฉันคือจาวา ฉันเขียนเกมสำหรับโทรศัพท์มือถือ ซอฟต์แวร์สำหรับการสื่อสารทางวิทยุ และบริการบนเว็บต่างๆ และฉันสอนภาษาจาวา

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

บริการอยู่ที่นี่ - E-Dobavki.com.

E-Dobavki - บริการเว็บสำหรับค้นหาวัตถุเจือปนอาหารใน Java และ Spring Boot ที่เขียนโดยนักเรียนของฉัน

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

ก่อนที่จะอธิบายโครงการ ฉันจะบอกคุณเล็กน้อยเกี่ยวกับกระบวนการเรียนรู้ของกลุ่ม หากไม่มีสิ่งนี้ รูปภาพจะไม่สมบูรณ์

อบรม 9 เดือน

ที่โรงเรียนที่ฉันสอน หลักสูตร Java แบ่งออกเป็น 2 ส่วน โดยรวมแล้วหลักสูตรนี้ใช้เวลาประมาณ 9 เดือน โดยทุกช่วงพัก (วันหยุดปีใหม่ เวลาเขียนโปรเจ็กต์ระดับกลาง)

ส่วนแรกจะแนะนำให้นักเรียนรู้จักแนวคิดพื้นฐานของภาษา ตัวแปร วิธีการ พื้นฐาน OOP และทุกสิ่งเหล่านั้น

ส่วนที่สองของหลักสูตรระบุว่านักเรียนมีความเข้าใจวิธีการเขียนในภาษา Java ไม่มากก็น้อยอยู่แล้ว และเขาสามารถรับเทคโนโลยีสแต็ก "สำหรับผู้ใหญ่" ได้ ทุกอย่างเริ่มต้นด้วย SQL จากนั้น JDBC, Hibernate จากนั้น HTTP เซิร์ฟเล็ต ต่อไปคือ Spring เล็กน้อยเกี่ยวกับ git และ maven และนักเรียนเขียนโครงงานขั้นสุดท้าย

การฝึกอบรมทั้งหมดแบ่งออกเป็นโมดูล ฉันจัดชั้นเรียนสัปดาห์ละสองครั้ง ระยะเวลาของบทเรียนหนึ่งบทเรียนคือสองชั่วโมง

แนวทางการเรียนรู้ของฉัน

ผมปล่อย 5 กลุ่ม ดูเหมือนมากในสองปี แต่ฉันเกือบจะนำ 2 กลุ่มขนานกันเสมอ

ฉันได้ลองวิธีการที่แตกต่างกัน

ตัวเลือกแรกคือจัดสรรคู่หนึ่งสำหรับการนำเสนอโดยใช้ทฤษฎี คู่ที่สองคือการฝึกฝนที่บริสุทธิ์ วิธีการนี้ได้ผล แต่ก็ไม่ได้ผลมากนักในความคิดของฉัน

ตัวเลือกที่สองที่ฉันมาและกำลังดำเนินการอยู่ตอนนี้ ไม่ใช่การอุทิศทฤษฎีทั้งหมดสองสามอย่าง แต่ฉันผสมทฤษฎีสั้นๆ ไว้ประมาณ 5-10 นาที แล้วเสริมด้วยตัวอย่างเชิงปฏิบัติทันที วิธีนี้ใช้ได้ผลดีกว่า

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

ไม่ใช่ทุกคนที่จะไปถึงจุดสิ้นสุดได้

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

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

พวกเขาออกไปด้วยเหตุผลหลายประการ

ประการแรกคือความซับซ้อน ไม่ว่าพวกเขาจะพูดอะไรก็ตาม Java ไม่ใช่ภาษาที่ง่ายที่สุด ในการเขียนโปรแกรมที่ง่ายที่สุด คุณต้องเข้าใจแนวคิดของคลาส วิธีการ และเพื่อทำความเข้าใจว่าทำไมคุณต้องเขียน โมฆะคงที่สาธารณะ main(String[] arg) มีแนวคิดเพิ่มเติมบางประการที่ต้องทำความเข้าใจ

เปรียบเทียบสิ่งนี้กับ Turbo Pascal ซึ่งเป็นสิ่งที่หลายๆ คนเริ่มต้นด้วย:

begin
    writeln("Первая программа");
end.

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

และเหตุผลที่สองก็เหมือนในภาพด้านล่าง:

E-Dobavki - บริการเว็บสำหรับค้นหาวัตถุเจือปนอาหารใน Java และ Spring Boot ที่เขียนโดยนักเรียนของฉัน

คนมักคิดว่าการเขียนโปรแกรมเป็นเรื่องเกี่ยวกับการพิมพ์ข้อความจำนวนมากและได้รับเงินเป็นจำนวนมาก เช่นเดียวกับนักเขียนคำโฆษณาเพียงมีเงินมากขึ้น

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

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

แนวคิดการบริการ

เมื่อนักเรียนเรียนจบหลักสูตรทั้งหมดแล้ว ก็ถึงเวลาเขียนโครงงานขั้นสุดท้าย มีความคิดที่แตกต่างกัน พวกเขาเสนอเอกสาร ToDo โครงการการจัดการโครงการ และอื่นๆ

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

ความคิดนั้นง่าย เมื่อคุณซื้อผลิตภัณฑ์ในร้านค้า คุณจะเห็นสารเติมแต่ง E บางชนิดอยู่ในองค์ประกอบ จากรหัสยังไม่ชัดเจนว่าเป็นอันตรายหรือไม่ (และยังมีสารเติมแต่งอันตรายที่ถูกห้ามในหลายประเทศด้วย)

คุณเปิดเว็บไซต์ ป้อนชื่อของส่วนเสริม (หมายเลข หนึ่งในชื่อทางเลือก) และรับข้อมูลสรุปของส่วนเสริม:

E-Dobavki - บริการเว็บสำหรับค้นหาวัตถุเจือปนอาหารใน Java และ Spring Boot ที่เขียนโดยนักเรียนของฉัน

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

แต่เนื่องจากโครงการนี้เป็นโครงการด้านการศึกษา ปัญหาข้างต้นไม่ได้หยุดเรา :)

การดำเนินงาน

ทุกคนเขียนด้วยภาษา Java ซอร์สโค้ดของโครงการบน Github.

พวกเรามีกัน 7 คน รวมทั้งฉันด้วย ทุกคนส่งคำขอดึงข้อมูล และฉันหรือบุคคลอื่นจากกลุ่มก็ยอมรับคำขอดึงข้อมูลนี้

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

การแยกสารเติมแต่ง

สิ่งแรกที่นักเรียนคนหนึ่งทำ นอกเหนือจากการสร้างเฟรมเวิร์กขั้นพื้นฐานรอบๆ ฐานข้อมูล (เอนทิตี ที่เก็บข้อมูล ฯลฯ) ก็คือการแยกวิเคราะห์ส่วนเสริมจากไซต์ข้อมูลที่มีอยู่

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

Spring Boot ช่วยให้คุณสร้างหลายโปรไฟล์ได้ โปรไฟล์คือไฟล์ที่มีการตั้งค่า

สำหรับสภาพแวดล้อมการพัฒนา เราใช้โปรไฟล์ที่มี H2 DBMS ในเครื่องและพอร์ต HTTP เริ่มต้น (8080) ดังนั้นทุกครั้งที่เปิดแอปพลิเคชัน ฐานข้อมูลจะถูกล้าง ผู้แยกวิเคราะห์ในกรณีนี้คือสิ่งที่ช่วยเราไว้

ค้นหาและการกรอง

จุดสำคัญคือการค้นหาและการกรอง บุคคลในร้านค้าจะต้องคลิกรหัสอาหารเสริมหรือชื่อใดชื่อหนึ่งอย่างรวดเร็วและรับผลลัพธ์

ดังนั้นเอนทิตีแบบบวกจึงมีหลายฟิลด์ นี่คือโค้ดเพิ่มเติม ชื่อทางเลือก คำอธิบาย การค้นหาดำเนินการโดยใช้ Like ในทุกช่องในเวลาเดียวกัน และถ้าคุณป้อน [123] หรือ [ผักโขม] คุณจะได้ผลลัพธ์เดียวกัน

เราทำทั้งหมดนี้ตามข้อกำหนด นี่เป็นส่วนหนึ่งของ Spring ที่ให้คุณอธิบายเงื่อนไขการค้นหาพื้นฐาน (เช่น บางฟิลด์ เป็นต้น) แล้วรวมเงื่อนไขเหล่านี้ (OR หรือ AND)

เมื่อเขียนข้อกำหนดมากมายแล้ว คุณสามารถถามคำถามที่ซับซ้อน เช่น “สารเติมแต่งสีที่เป็นอันตรายทั้งหมดซึ่งมีคำว่า [สีแดง] อยู่ในคำอธิบาย”

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

แต่ฉันก็ยึดมั่นในมุมมองที่ว่าไม่จำเป็นต้องปรับทุกอย่างให้เหมาะสมล่วงหน้า เวอร์ชันแรกจะต้องเริ่มต้น ทำงาน และอนุญาตให้มีการเปลี่ยนชิ้นส่วนแต่ละชิ้น และหากมีภาระงาน จะต้องเขียนแต่ละส่วนเหล่านี้ใหม่

Security

มันง่ายมาก มีผู้ใช้ที่มีบทบาทผู้ดูแลระบบ - พวกเขาสามารถแก้ไขเพิ่มเติม ลบออก และเพิ่มใหม่ได้

และมีผู้ใช้รายอื่น (ลงทะเบียนหรือไม่) พวกเขาสามารถเรียกดูรายการสารเติมแต่งและค้นหาสิ่งที่ต้องการเท่านั้น

Spring Security ถูกใช้เพื่อแยกสิทธิ์ ข้อมูลผู้ใช้จะถูกเก็บไว้ในฐานข้อมูล

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

การตอบสนองและ Bootstrap

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

เพื่อไม่ให้ประสบปัญหากับ CSS เราจึงใช้ Bootstrap ราคาถูก ร่าเริง และดูดี

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

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

นาทีแห่งการเพิ่มประสิทธิภาพ SEO

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

อันที่จริง ฉันได้สร้างเทมเพลตชื่อและคำอธิบายสำหรับส่วนเสริมแต่ละรายการ URL เกือบจะเป็น CNC แม้ว่าจะสามารถทำให้สั้นลงได้ก็ตาม

ฉันยังเพิ่มเคาน์เตอร์เข้างานด้วย เพิ่มไซต์ลงใน Yandex Webmaster และ Google Search Console เพื่อตรวจสอบคำเตือนจากเครื่องมือค้นหา

มันไม่เพียงพอ คุณต้องเพิ่ม robots.txt และ sitemap.xml เพื่อการจัดทำดัชนีแบบเต็ม แต่ขอย้ำอีกครั้งว่า นี่เป็นโครงการของนักเรียน ฉันจะบอกพวกเขาว่าต้องทำอะไร และถ้าพวกเขาต้องการ พวกเขาก็จะทำ

คุณต้องแนบใบรับรอง SSL Let's Encrypt ฟรีก็ใช้งานได้เช่นกัน ฉันทำสิ่งนี้กับ Spring Boot ทำได้ไม่ยาก และความไว้วางใจของ PS ก็เพิ่มขึ้น

อะไรต่อไปสำหรับโครงการ?

ที่จริงแล้วทางเลือกก็ขึ้นอยู่กับพวกเขา แนวคิดดั้งเดิมของโครงการยังรวมถึงฐานข้อมูลผลิตภัณฑ์พร้อมลิงก์ไปยังสารเติมแต่ง

ป้อน “Snickers” และดูว่ามีสารอาหารอะไรบ้าง

แม้ในช่วงเริ่มต้นโครงการก็รู้ดีว่าเราคงไม่มีสินค้า :) ดังนั้นเราจึงเริ่มด้วยเพียงสารเติมแต่งเท่านั้น

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

การปรับใช้

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

คุณสมบัติ VPS: 1 GB RAM, 1 CPU (ฉันไม่รู้เกี่ยวกับความถี่), 20 GB SSD สำหรับโครงการของเราแค่นี้ก็เพียงพอแล้ว

โปรเจ็กต์นี้สร้างขึ้นโดยใช้แพ็คเกจ mvn clean ปกติ ผลลัพธ์ที่ได้คือ fat jar ซึ่งเป็นไฟล์ปฏิบัติการที่มีการขึ้นต่อกันทั้งหมด

เพื่อให้ทั้งหมดนี้เป็นแบบอัตโนมัติ ฉันจึงเขียนสคริปต์ทุบตีสองสามตัว

สคริปต์แรกจะลบไฟล์ jar เก่าและสร้างไฟล์ใหม่

สคริปต์ที่สองจะเปิดขวดที่ประกอบขึ้น โดยส่งผ่านชื่อของโปรไฟล์ที่ต้องการ ส่วนกำหนดค่านี้มีข้อมูลการเชื่อมต่อฐานข้อมูล

DB - MySQL บน VPS เดียวกัน

การรีสตาร์ทโครงการทั้งหมดประกอบด้วย:

  • เข้าสู่ระบบ VPS ผ่าน SSH
  • ดาวน์โหลดการเปลี่ยนแปลง git ล่าสุด
  • รัน local-jar.sh
  • ฆ่าแอปพลิเคชันที่ทำงานอยู่
  • เรียกใช้ launch-production.sh

ขั้นตอนนี้ใช้เวลาสามนาที นี่ดูเหมือนเป็นทางเลือกที่ชาญฉลาดสำหรับฉันสำหรับโปรเจ็กต์เล็กๆ เช่นนี้

ความซับซ้อน

ปัญหาหลักในการสร้างโครงการคือลักษณะขององค์กร

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

ฉันระบุหัวหน้าทีมที่มีเงื่อนไขในกลุ่มนี้ เขาเก็บ Google เอกสารพร้อมรายการงาน แจกจ่ายงาน และควบคุมการยอมรับ เขายังยอมรับคำขอดึงด้วย

ฉันยังขอให้นักเรียนเขียนรายงานสั้นๆ ทุกเย็นเกี่ยวกับงานที่พวกเขาทำในโครงการนี้ หากคุณไม่ได้ทำอะไรเลย ก็แค่เขียนว่า “ไม่ได้ทำอะไรเลย” นี่เป็นการฝึกฝนที่ดีและทำให้คุณเครียดเล็กน้อย น่าเสียดายที่ไม่ใช่ทุกคนที่ปฏิบัติตามกฎนี้

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

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

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

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

ผลการวิจัย

การเรียนรู้เป็นเรื่องที่น่าสนใจ

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

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

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

ที่มา: will.com

เพิ่มความคิดเห็น