E-Dobavki - یک وب سرویس برای جستجوی افزودنی های غذایی در جاوا و Spring Boot، نوشته شده توسط دانش آموزان من

معرفی

این اتفاق افتاد که تقریباً دو سال گذشته در یکی از مدارس IT در کیف برنامه نویسی تدریس می کردم. من شروع به انجام این کار فقط برای سرگرمی کردم. یک بار یک وبلاگ برنامه نویسی نوشتم، سپس آن را رها کردم. اما میل به گفتن چیزهای مفید به افراد علاقه مند از بین نرفته است.

زبان اصلی من جاوا است. روی آن بازی‌های تلفن همراه، نرم‌افزار ارتباطات رادیویی و سرویس‌های مختلف وب نوشتم. و جاوا تدریس می کنم.

در اینجا می خواهم داستان تمرین آخرین گروهم را بگویم. چگونه آنها از شروع آموزش به نوشتن یک وب سرویس کارآمد رسیدند. یک وب سرویس مفید برای یافتن مکمل های غذایی. رایگان، بدون تبلیغات، ثبت نام و پیامک.

خود سرویس اینجاست - E-Dobavki.com.

E-Dobavki - یک وب سرویس برای جستجوی افزودنی های غذایی در جاوا و Spring Boot، نوشته شده توسط دانش آموزان من

این پروژه آموزشی بوده و فاقد هرگونه تبلیغات می باشد. همانطور که من از این انتشارات، می توانید لینک چنین پروژه هایی را ارائه دهید.

قبل از توصیف خود پروژه، کمی در مورد روند یادگیری گروه به شما می گویم؛ بدون این، تصویر ناقص خواهد بود.

9 ماه آموزش

در مدرسه ای که من تدریس می کنم، دوره جاوا به 2 قسمت تقسیم می شود. در مجموع، دوره تقریباً 9 ماه طول می کشد، با تمام استراحت ها (تعطیلات سال نو، زمان نوشتن پروژه های میانی).

بخش اول دانش آموزان را با مفاهیم اولیه زبان آشنا می کند. متغیرها، متدها، اصول اولیه OOP و همه چیزهای دیگر.

بخش دوم این دوره ارائه می‌کند که دانش‌آموز کم و بیش نحوه نوشتن در جاوا را می‌داند و می‌توان به او یک پشته فناوری «بزرگسالان» داد. همه چیز با SQL شروع می شود، سپس JDBC، Hibernate. سپس HTTP، servlets. بعد بهار است، کمی در مورد git و maven. و دانش آموزان پروژه های نهایی را می نویسند.

تمام آموزش ها به ماژول ها تقسیم می شوند. هفته ای دوبار کلاس برگزار می کردم. مدت یک درس دو ساعت می باشد.

رویکرد من به یادگیری

من 5 گروه را آزاد کردم. به نظر می رسد برای دو سال زیاد است، اما تقریباً همیشه 2 گروه را به صورت موازی رهبری می کردم.

من روش های مختلفی را امتحان کرده ام.

گزینه اول این است که یک جفت برای ارائه با یک نظریه اختصاص داده شود. جفت دوم تمرین محض است. این رویکرد به نوعی جواب داد، اما به نظر من خیلی مؤثر نبود.

گزینه دومی که به آن رسیدم و اکنون روی آن کار می کنم این است که یک زوج کامل را به تئوری اختصاص ندهم. در عوض، بخش های کوتاه تئوری را به مدت 5-10 دقیقه با هم مخلوط می کنم و بلافاصله آنها را با مثال های عملی تقویت می کنم. این رویکرد بهتر عمل می کند.

اگر وقت کافی باشد، دانش‌آموزان را به محل خود فرا می‌خوانم، آنها را پشت لپ‌تاپم می‌نشینم و خودشان مثال‌های عملی انجام می‌دهند. عالی کار می کند، اما متاسفانه زمان زیادی می برد.

همه نمی توانند آن را به آخر برسانند

یک کشف برای من این واقعیت بود که کل گروه به پایان دوره نمی رسند.

طبق مشاهدات من فقط نیمی از دانش آموزان پروژه نهایی را می نویسند. اکثر آنها در قسمت اول دوره حذف می شوند. و کسانی که به قسمت دوم رسیده اند معمولاً نمی افتند.

آنها به دلایل مختلف ترک می کنند.

اولین مورد پیچیدگی است. مهم نیست که آنها چه می گویند، جاوا ساده ترین زبان نیست. برای نوشتن حتی ساده ترین برنامه، باید مفهوم یک کلاس، یک متد را درک کنید. و برای درک اینکه چرا باید بنویسید اصلی خالی استاتیک عمومی (String[] arg) چند مفهوم دیگر برای درک وجود دارد.

این را با توربو پاسکال مقایسه کنید، چیزی که بسیاری از افراد از جمله من با آن شروع کردند:

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

تا جایی که من می دانم مدرسه با ارائه تست های تکمیلی این مشکل را حل خواهد کرد. اکنون همه نمی توانند جاوا را مطالعه کنند. این هنوز در مرحله مفهومی است، اما مرحله به وضوح قدم درستی است.

و دلیل دوم مانند تصویر زیر است:

E-Dobavki - یک وب سرویس برای جستجوی افزودنی های غذایی در جاوا و Spring Boot، نوشته شده توسط دانش آموزان من

مردم اغلب فکر می کنند که برنامه نویسی به معنای تایپ متن زیاد و دریافت پول زیادی برای آن است. مانند یک کپی رایتر، فقط پول بیشتر.

واقعیت کمی متفاوت است. بسیاری از کدهای روتین، اشکالات نامشخص، فرآیند یادگیری مداوم. جالب است، اما نه برای همه.

این آمار است. اول ناراحتم کرد، فکر کردم شاید کار اشتباهی انجام می دهم. اکنون متوجه شدم که آمار تقریباً برای اکثر دوره ها یکسان است. حالا من در مورد آن نگران نیستم، اما به افرادی که به آن علاقه دارند آموزش دهید.

ایده خدمات

هنگامی که دانش آموزان کل دوره را به پایان رساندند، زمان نوشتن پروژه نهایی فرا رسید. ایده های مختلفی وجود داشت. آنها برگه های ToDo، پروژه های مدیریت پروژه و چیز دیگری را ارائه کردند.

می خواستم کاری ساده اما مفید انجام دهم. معیار من ساده بود - آیا من و دوستانم می توانیم از آن استفاده کنیم یا خیر. یک سرویس وب برای جستجوی افزودنی های غذایی این الزامات را برآورده می کند.

ایده ساده است. وقتی محصولی را از فروشگاه خریداری می کنید، نوعی افزودنی الکترونیکی را در ترکیب می بینید. از کد مشخص نیست که چقدر خطرناک است یا نه (و همچنین افزودنی های خطرناکی وجود دارند که در بسیاری از کشورها ممنوع شده اند).

شما وب سایت را باز می کنید، نام مکمل (شماره، یکی از نام های جایگزین) را وارد می کنید و خلاصه ای از مکمل را دریافت می کنید:

E-Dobavki - یک وب سرویس برای جستجوی افزودنی های غذایی در جاوا و Spring Boot، نوشته شده توسط دانش آموزان من

پروژه های مشابهی وجود دارد. همچنین می توانید به سادگی افزودنی را در Google تایپ کنید، اگرچه همیشه اطلاعات را به درستی نشان نمی دهد.

اما از آنجایی که پروژه آموزشی است، مشکلات بالا ما را متوقف نکردند :)

اجرا

همه به جاوا نوشتند، کد منبع پروژه در Github.

ما 7 نفر بودیم، از جمله من. همه درخواست کشش دادند و من یا یک نفر دیگر از گروه این درخواست کشش را پذیرفتیم.

اجرای این پروژه حدود یک ماه طول کشید - از بیان ایده تا وضعیتی که اکنون می بینید.

تجزیه مواد افزودنی

اولین کاری که یکی از دانش‌آموزان انجام داد، علاوه بر ایجاد چارچوبی در اطراف پایگاه داده (موجودات، مخازن، و غیره)، تجزیه افزونه‌ها از یک سایت اطلاعاتی موجود بود.

این برای آزمایش نقاط باقی مانده ضروری بود. هیچ کد اضافی برای پر کردن پایگاه داده مورد نیاز نیست. با تجزیه سریع چندین افزودنی، می‌توانیم رابط کاربری، مرتب‌سازی و فیلتر کردن را بیشتر آزمایش کنیم.

Spring Boot به شما امکان می دهد چندین پروفایل ایجاد کنید. نمایه یک فایل با تنظیمات است.

برای محیط توسعه دهنده، از نمایه ای با DBMS محلی H2 و پورت HTTP پیش فرض (8080) استفاده کردیم. بنابراین، هر بار که برنامه راه اندازی می شد، پایگاه داده پاک می شد. تجزیه کننده در این مورد چیزی بود که ما را نجات داد.

جستجو و فیلتر کردن

نکته مهم جستجو و فیلترینگ است. شخصی در یک فروشگاه باید سریعا روی کد مکمل یا یکی از نام ها کلیک کند و نتیجه را بگیرد.

بنابراین، موجودیت Additive دارای چندین فیلد است. این کد افزودنی، نام های جایگزین، توضیحات است. جستجو با استفاده از Like در همه فیلدها به طور همزمان انجام می شود. و اگر وارد [123] یا [آمارانت] شوید همین نتیجه را خواهید گرفت.

ما همه اینها را بر اساس مشخصات انجام دادیم. این بخشی از Spring است که به شما امکان می‌دهد شرایط جستجوی اولیه را توصیف کنید (مثلاً برخی از فیلدها)، و سپس این شرایط را ترکیب کنید (OR یا AND).

با نوشتن ده ها مشخصات، می توانید سؤالات پیچیده ای مانند "همه افزودنی های رنگ آمیزی خطرناک که کلمه [قرمز] در توضیحات دارند" بپرسید.

از نظر کار با دیتابیس Spring به نظرم خیلی راحته. این امر به ویژه هنگام کار با پرس و جوهای پیچیده صادق است. من می دانم که این سربار خاص خود را دارد و یک پرس و جوی SQL که به صورت دستی نوشته شده و بهینه شده است سریعتر اجرا می شود.

اما من همچنین به این دیدگاه پایبند هستم که نیازی به بهینه سازی همه چیز از قبل نیست. نسخه اول باید شروع شود، کار کند و اجازه تعویض قطعات جداگانه را بدهد. و اگر بار وجود داشته باشد، این قسمت های جداگانه باید بازنویسی شوند.

دوربین های مداربسته

ساده است. کاربرانی با نقش ADMIN وجود دارند - آنها می توانند موارد اضافه شده را ویرایش کنند، آنها را حذف کنند و موارد جدید اضافه کنند.

و کاربران دیگری (ثبت شده یا غیر ثبت نام شده) وجود دارد. آنها فقط می توانند فهرست افزودنی ها را مرور کنند و موارد مورد نیاز خود را جستجو کنند.

Spring Security برای جداسازی حقوق استفاده شد. داده های کاربر در یک پایگاه داده ذخیره می شود.

کاربران می توانند ثبت نام کنند. الان هیچی نمیده اگر دانش آموزان به توسعه خدمات و معرفی برخی از عملکردهای شخصی سازی شده ادامه دهند، ثبت نام مفید خواهد بود.

پاسخگویی و بوت استرپ

نکته بعدی سازگاری است. در مورد سرویس ما (حداقل آن گونه که ما دیدیم)، اکثر کاربران با تلفن همراه خواهند بود. و باید به سرعت مکمل را از تلفن همراه خود مشاهده کنید.

برای اینکه از CSS رنج نبریم، Bootstrap را گرفتیم. ارزان، شاد، و ظاهر مناسبی دارد.

من نمی توانم رابط را ایده آل بنامم. صفحه اصلی حتی کمتر است، و صفحه برای توضیح دقیق افزودنی باریک است؛ در تلفن های همراه باید گسترده تر شود.

فقط می توانم بگویم که سعی کردم تا حد امکان در کار دخالت کنم. این هنوز یک پروژه دانشجویی است. و البته، بچه ها بعداً می توانند چنین لحظاتی را اصلاح کنند.

یک دقیقه بهینه سازی سئو

از آنجایی که بیش از دو سال است که از نزدیک درگیر وب سایت ها و همه چیزهای مرتبط با سئو هستم، نمی توانم پروژه ای را بدون حداقل بهینه سازی اولیه سئو منتشر کنم.

در واقع، من برای هر افزونه یک نسل از عنوان و توضیحات ایجاد کردم. 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 گیگابایت رم، 1 CPU (فرکانس آن را نمی دانم)، 20 گیگابایت SSD. برای پروژه ما این کافی است.

این پروژه با استفاده از بسته معمولی mvn clean ساخته شده است. نتیجه یک شیشه چربی است - یک فایل اجرایی با تمام وابستگی ها.

برای اینکه همه اینها کمی خودکار شود، چند اسکریپت bash نوشتم.

اسکریپت اول فایل jar قدیمی را حذف می کند و یک فایل جدید می سازد.

اسکریپت دوم شیشه مونتاژ شده را راه اندازی می کند و نام نمایه مورد نیاز را به آن ارسال می کند. این نمایه حاوی اطلاعات اتصال به پایگاه داده است.

DB - MySQL در همان VPS.

کل راه اندازی مجدد پروژه شامل:

  • از طریق SSH وارد VPS شوید
  • آخرین تغییرات git را دانلود کنید
  • local-jar.sh را اجرا کنید
  • کشتن برنامه در حال اجرا
  • launch-production.sh را اجرا کنید

این روش سه دقیقه طول می کشد. به نظر من این یک انتخاب هوشمندانه برای چنین پروژه کوچکی است.

مشکل

مشکلات اصلی در ایجاد پروژه ماهیت سازمانی داشتند.

گروهی از افراد هستند که به نظر می رسد برنامه نویسی را بلد هستند، اما نه چندان خوب. آنها چیزی می دانند، اما هنوز نمی توانند واقعاً آن را اعمال کنند. و اکنون آنها باید پروژه را در یک ماه تکمیل کنند.

من یک رهبر تیم مشروط را در این گروه شناسایی کردم. او یک Google Doc با لیستی از وظایف، توزیع وظایف، و پذیرش آنها را کنترل می کرد. او همچنین درخواست های کشش را پذیرفت.

من همچنین از دانش آموزان خواستم که هر شب گزارش کوتاهی در مورد کارهایی که روی پروژه انجام داده اند بنویسند. اگر کاری انجام ندادید، خوب، فقط بنویسید «هیچ کاری نکرد». این تمرین عالی است و شما را کمی تنش می کند. متأسفانه همه از این قانون پیروی نکردند.

هدف از همه این حرکت ساده بود. یک تیم، حتی برای مدت کوتاه، تشکیل دهید تا با هم کار کنند.

می خواستم بچه ها احساس کنند که کارشان مهم است. درک کنید که آنها کدهای کروی را در خلاء نمی نویسند. و کاری که آنها با هم انجام می دهند پروژه ای است که مردم از آن استفاده خواهند کرد.

یک یا دو هفته اول یک افزایش بود. نهادها و تعهدات کوچک به کندی انجام شدند. کم کم آنها را به هم زدم و کار سرگرم کننده تر شد. ارتباطات در چت زنده تر شد، دانش آموزان موارد اضافی خود را ارائه کردند.

من معتقدم که هدف محقق شده است. پروژه انجام شد، بچه ها تجربه کمی کار در یک تیم را به دست آوردند. یک نتیجه قابل مشاهده و ملموس وجود دارد که می تواند به دوستان نشان داده شود و بیشتر توسعه یابد.

یافته ها

یادگیری جالب است.

بعد از هر کلاس از نظر احساسی آشفته برمی گشتم. من سعی می کنم هر جفت را منحصر به فرد کنم و تا حد امکان دانش را منتقل کنم.

وقتی گروهی که من آموزش می دهم به فینال می رسد خوب است. وقتی بچه ها می نویسند "من کار پیدا کردم، همه چیز خوب است، متشکرم" بسیار جالب است. حتی اگر یک جونیور باشد، حتی اگر در ابتدا بزرگترین پول نباشد. اما مهمتر از همه این است که آنها در جهت خواسته های خود قدم برداشتند و موفق شدند.

اگرچه مقاله بسیار حجیم بود، اما مطمئناً امکان پوشش همه نکات وجود نداشت. بنابراین سوالات خود را در کامنت بنویسید.

منبع: www.habr.com

اضافه کردن نظر