E-Dobavki - perkhidmatan web untuk mencari bahan tambahan makanan dalam Java dan Spring Boot, yang ditulis oleh pelajar saya

Pengenalan

Kebetulan selama hampir dua tahun saya mengajar pengaturcaraan di salah sebuah sekolah IT di Kyiv. Saya mula melakukan ini Just For Fun. Saya pernah menulis blog pengaturcaraan, kemudian saya menyerah. Tetapi keinginan untuk memberitahu perkara yang berguna kepada orang yang berminat tidak hilang.

Bahasa utama saya ialah Java. Saya menulis permainan untuk telefon mudah alih, perisian untuk komunikasi radio, dan pelbagai perkhidmatan web padanya. Dan saya mengajar Java.

Di sini saya ingin menceritakan kisah latihan kumpulan terakhir saya. Bagaimana mereka memulakan latihan kepada menulis perkhidmatan web yang berfungsi. Perkhidmatan web yang berguna untuk mencari suplemen pemakanan. Percuma, tiada pengiklanan, pendaftaran dan SMS.

Perkhidmatan itu sendiri ada di sini - E-Dobavki.com.

E-Dobavki - perkhidmatan web untuk mencari bahan tambahan makanan dalam Java dan Spring Boot, yang ditulis oleh pelajar saya

Projek ini adalah pendidikan dan tidak mengandungi sebarang pengiklanan. Seperti yang saya faham dari penerbitan ini, anda boleh memberikan pautan kepada projek tersebut.

Sebelum menerangkan projek itu sendiri, saya akan memberitahu anda sedikit tentang proses pembelajaran kumpulan; tanpa ini, gambar tidak akan lengkap.

9 bulan latihan

Di sekolah tempat saya mengajar, kursus Jawa dibahagikan kepada 2 bahagian. Secara keseluruhan, kursus mengambil masa kira-kira 9 bulan, dengan semua rehat (cuti Tahun Baru, masa untuk menulis projek perantaraan).

Bahagian pertama memperkenalkan pelajar kepada konsep asas bahasa. Pembolehubah, kaedah, asas OOP dan semua perkara itu.

Bahagian kedua kursus menyediakan bahawa pelajar sudah lebih atau kurang memahami cara menulis dalam Java, dan dia boleh diberi timbunan teknologi "dewasa". Semuanya bermula dengan SQL, kemudian JDBC, Hibernate. Kemudian HTTP, servlets. Seterusnya ialah Spring, sedikit tentang git dan maven. Dan pelajar menulis projek akhir.

Semua latihan dibahagikan kepada modul. Saya mengendalikan kelas dua kali seminggu. Tempoh satu pelajaran ialah dua jam.

Pendekatan saya untuk belajar

Saya mengeluarkan 5 kumpulan. Ia kelihatan seperti banyak untuk dua tahun, tetapi saya hampir selalu mengetuai 2 kumpulan secara selari.

Saya telah mencuba pendekatan yang berbeza.

Pilihan pertama ialah satu pasangan diperuntukkan untuk pembentangan dengan teori. Pasangan kedua adalah amalan murni. Pendekatan ini entah bagaimana berjaya, tetapi ia tidak begitu berkesan, pada pendapat saya.

Pilihan kedua yang saya datangi dan yang sedang saya usahakan sekarang adalah untuk tidak menumpukan seluruh pasangan kepada teori. Sebaliknya, saya mencampurkan bahagian pendek teori selama 5-10 minit, dan segera mengukuhkannya dengan contoh praktikal. Pendekatan ini berfungsi dengan lebih baik.

Jika ada masa yang mencukupi, saya memanggil pelajar ke tempat saya, duduk di hadapan komputer riba saya, dan mereka membuat contoh praktikal sendiri. Ia berfungsi hebat, tetapi malangnya ia memerlukan banyak masa.

Tidak semua orang berjaya sehingga akhir

Satu pendedahan bagi saya ialah hakikat bahawa tidak seluruh kumpulan mencapai penghujung kursus.

Mengikut pemerhatian saya, hanya separuh daripada pelajar yang menulis projek akhir. Kebanyakan daripada mereka dihapuskan semasa bahagian pertama kursus. Dan mereka yang telah mencapai bahagian kedua biasanya tidak jatuh.

Mereka pergi atas pelbagai sebab.

Yang pertama ialah kerumitan. Tidak kira apa yang mereka katakan, Java bukanlah bahasa yang paling mudah. Untuk menulis program yang paling mudah sekalipun, anda perlu memahami konsep kelas, kaedah. Dan untuk memahami mengapa anda perlu menulis utama kekosongan statik awam (String[] arg) Terdapat beberapa konsep lagi untuk difahami.

Bandingkan ini dengan Turbo Pascal, yang dimulakan oleh ramai orang, termasuk saya:

begin
    writeln("ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°");
end.

Setahu saya, pihak sekolah akan menyelesaikan masalah ini dengan memperkenalkan ujian tambahan. Sekarang tidak semua orang boleh belajar Java. Ini masih di peringkat konsep, tetapi langkahnya jelas betul.

Dan sebab kedua adalah seperti dalam gambar di bawah:

E-Dobavki - perkhidmatan web untuk mencari bahan tambahan makanan dalam Java dan Spring Boot, yang ditulis oleh pelajar saya

Orang sering berfikir bahawa pengaturcaraan adalah mengenai menaip banyak teks dan mendapatkan banyak wang untuknya. Seperti penulis salinan, hanya lebih banyak wang.

Realitinya sedikit berbeza. Banyak kod rutin, pepijat yang tidak jelas, proses pembelajaran yang berterusan. Ia menarik, tetapi bukan untuk semua orang.

Ini adalah statistik. Pada mulanya saya kecewa, saya fikir mungkin saya melakukan sesuatu yang salah. Sekarang saya faham bahawa statistik adalah lebih kurang sama untuk kebanyakan kursus. Sekarang saya tidak bimbang tentangnya, tetapi ajar orang yang berminat dengannya.

Idea perkhidmatan

Apabila pelajar telah menyelesaikan keseluruhan kursus, tiba masanya untuk menulis projek akhir. Terdapat idea yang berbeza. Mereka menawarkan helaian Tugasan, projek pengurusan projek dan sesuatu yang lain.

Saya mahu melakukan sesuatu yang mudah tetapi berguna. Kriteria saya adalah mudah - sama ada saya dan rakan saya boleh menggunakannya. Perkhidmatan web untuk mencari bahan tambahan makanan memenuhi keperluan ini.

Ideanya mudah sahaja. Apabila anda membeli produk di kedai, anda melihat beberapa jenis E-aditif dalam komposisi. Tidak jelas dari kod itu betapa berbahayanya atau tidak (dan terdapat juga bahan tambahan berbahaya yang diharamkan di banyak negara).

Anda membuka laman web, masukkan nama suplemen (nombor, salah satu nama alternatif), dan dapatkan ringkasan suplemen:

E-Dobavki - perkhidmatan web untuk mencari bahan tambahan makanan dalam Java dan Spring Boot, yang ditulis oleh pelajar saya

Terdapat projek yang serupa. Anda juga boleh menaip bahan tambahan ke dalam Google, walaupun ia tidak selalu menunjukkan maklumat dengan betul.

Tetapi kerana projek itu adalah pendidikan, kesukaran di atas tidak menghalang kami :)

РСализация

Semua orang menulis di Jawa, kod sumber projek di Github.

Kami ada 7 orang termasuk saya. Semua orang membuat permintaan tarik dan saya, atau orang lain daripada kumpulan itu, menerima permintaan tarik ini.

Pelaksanaan projek mengambil masa kira-kira sebulan - daripada menyuarakan idea kepada keadaan yang anda lihat sekarang.

Bahan tambahan penguraian

Perkara pertama yang dilakukan oleh salah seorang pelajar, selain penciptaan asas rangka kerja di sekeliling pangkalan data (entiti, repositori, dll.), ialah menghuraikan alat tambah daripada tapak maklumat sedia ada.

Ini adalah perlu untuk menguji mata yang tinggal. Tiada kod tambahan diperlukan untuk mengisi pangkalan data. Setelah menghuraikan beberapa aditif dengan cepat, kami boleh menguji UI, pengisihan dan penapisan lagi.

Spring Boot membolehkan anda membuat berbilang profil. Profil ialah fail dengan tetapan.

Untuk persekitaran pembangun, kami menggunakan profil dengan DBMS H2 tempatan dan port HTTP lalai (8080). Oleh itu, setiap kali aplikasi dilancarkan, pangkalan data telah dibersihkan. Penghurai dalam kes ini adalah perkara yang menyelamatkan kami.

Cari dan penapisan

Perkara penting ialah carian dan penapisan. Seseorang di kedai mesti mengklik dengan cepat pada kod suplemen, atau salah satu nama, dan mendapatkan hasilnya.

Oleh itu, entiti Additive mempunyai beberapa medan. Ini ialah kod tambahan, nama alternatif, penerangan. Carian dijalankan menggunakan Suka dalam semua medan pada masa yang sama. Dan jika anda memasukkan [123] atau [amaranth], anda akan mendapat hasil yang sama.

Kami melakukan semua ini berdasarkan Spesifikasi. Ini ialah sebahagian daripada Spring yang membolehkan anda menerangkan keadaan carian asas (seperti sesetengah medan, contohnya), dan kemudian menggabungkan syarat ini (ATAU atau DAN).

Setelah menulis sedozen spesifikasi, anda boleh bertanya pertanyaan rumit seperti "semua bahan tambahan pewarna berbahaya yang mempunyai perkataan [merah] dalam keterangan."

Dari segi bekerja dengan pangkalan data Spring, saya mendapati ia sangat mudah. Ini benar terutamanya apabila bekerja dengan pertanyaan yang kompleks. Saya faham bahawa ini mempunyai overhed sendiri, dan pertanyaan SQL yang ditulis secara manual dan dioptimumkan akan berjalan lebih cepat.

Tetapi saya juga berpegang pada sudut pandangan bahawa tidak perlu mengoptimumkan segala-galanya terlebih dahulu. Versi pertama mesti bermula, berfungsi dan membenarkan penggantian bahagian individu. Dan jika terdapat beban, bahagian individu ini perlu ditulis semula.

Keselamatan

Mudah sahaja. Terdapat pengguna dengan peranan ADMIN - mereka boleh mengedit tambahan, memadamkannya dan menambah yang baharu.

Dan ada pengguna lain (berdaftar atau tidak). Mereka hanya boleh menyemak imbas senarai aditif dan mencari yang mereka perlukan.

Spring Security digunakan untuk memisahkan hak. Data pengguna disimpan dalam pangkalan data.

Pengguna boleh mendaftar. Sekarang ia tidak memberi apa-apa. Jika pelajar terus membangunkan perkhidmatan dan memperkenalkan beberapa fungsi yang diperibadikan, maka pendaftaran akan berguna.

Responsif dan Bootstrap

Perkara seterusnya ialah kebolehsuaian. Dalam kes perkhidmatan kami (sekurang-kurangnya seperti yang kami lihat), majoriti pengguna akan menggunakan telefon bimbit. Dan anda perlu melihat suplemen dengan cepat dari telefon bimbit anda.

Untuk tidak menderita dengan CSS, kami mengambil Bootstrap. Murah, ceria, dan nampak sopan.

Saya tidak boleh memanggil antara muka yang ideal. Halaman utama lebih kurang, dan halaman untuk penerangan terperinci tentang bahan tambahan adalah sempit; pada telefon mudah alih ia perlu dibuat lebih luas.

Saya hanya boleh mengatakan bahawa saya cuba mengganggu kerja sesedikit mungkin. Ini masih projek pelajar. Dan sudah tentu, lelaki itu akan dapat membetulkan detik-detik sedemikian kemudian.

Minit Pengoptimuman SEO

Memandangkan saya telah terlibat rapat dalam laman web dan segala-galanya yang berkaitan dengan SEO selama lebih daripada dua tahun, saya tidak dapat mengeluarkan projek tanpa sekurang-kurangnya pengoptimuman SEO asas.

Malah, saya membuat penjanaan templat Tajuk dan Penerangan untuk setiap alat tambah. URL hampir CNC, walaupun ia boleh dibuat lebih pendek.

Saya juga menambah kaunter kehadiran. Menambahkan tapak pada Yandex Webmaster dan Google Search Console untuk memantau amaran daripada enjin carian.

Ianya tidak mencukupi. Anda juga perlu menambah robots.txt dan sitemap.xml untuk pengindeksan penuh. Tetapi sekali lagi, ini adalah projek pelajar. Saya akan memberitahu mereka apa yang perlu dilakukan, dan jika mereka mahu, mereka akan melakukannya.

Anda perlu melampirkan sijil SSL. Let's Encrypt percuma juga akan berfungsi. Saya melakukan ini untuk Spring Boot. Ia tidak sukar untuk dilakukan, dan kepercayaan PS meningkat.

Apakah projek seterusnya?

Kemudian, sebenarnya, pilihan terpulang kepada lelaki. Idea asal projek itu juga termasuk pangkalan data produk dengan pautan kepada bahan tambahan.

Masukkan "Snickers" dan lihat bahan tambahan pemakanan yang terkandung di dalamnya.

Walaupun pada permulaan projek, saya tahu bahawa kami tidak akan mempunyai sebarang produk :) Oleh itu, kami bermula hanya dengan bahan tambahan.

Kini anda boleh menambah produk dan memperkenalkan produk tambahan. roti. Jika ia adalah pangkalan data yang luas, akan ada pengguna.

Penyebaran

Projek itu digunakan pada VPS, Aruba Cloud. Ini adalah VPS termurah yang kami dapati. Saya telah menggunakan pembekal ini selama lebih daripada setahun untuk projek saya, dan saya sangat gembira dengannya.

Ciri-ciri VPS: 1 GB RAM, 1 CPU (saya tidak tahu tentang kekerapan), 20 GB SSD. Untuk projek kami ini sudah cukup.

Projek ini dibina menggunakan pakej bersih mvn biasa. Hasilnya ialah balang lemak - fail boleh laku dengan semua kebergantungan.

Untuk mengautomasikan semua ini sedikit, saya menulis beberapa skrip bash.

Skrip pertama memadamkan fail balang lama dan membina yang baharu.

Skrip kedua melancarkan balang yang dipasang, memberikannya nama profil yang diperlukan. Profil ini mengandungi maklumat sambungan pangkalan data.

DB - MySQL pada VPS yang sama.

Jumlah permulaan semula projek termasuk:

  • log masuk ke VPS melalui SSH
  • muat turun perubahan git terkini
  • jalankan local-jar.sh
  • membunuh aplikasi yang sedang berjalan
  • jalankan launch-production.sh

Prosedur ini mengambil masa tiga minit. Ini kelihatan seperti pilihan yang bijak kepada saya untuk projek kecil itu.

Kesukaran

Kesukaran utama dalam mencipta projek adalah bersifat organisasi.

Terdapat sekumpulan orang yang nampaknya tahu cara membuat program, tetapi tidak begitu baik. Mereka tahu sesuatu, tetapi mereka masih tidak boleh benar-benar menerapkannya. Dan kini mereka perlu menyiapkan projek itu dalam masa sebulan.

Saya mengenal pasti ketua pasukan bersyarat dalam kumpulan ini. Dia menyimpan Dokumen Google dengan senarai tugasan, mengagihkan tugasan dan mengawal penerimaannya. Dia juga menerima permintaan tarik.

Saya juga meminta pelajar menulis laporan ringkas setiap petang tentang kerja yang mereka lakukan pada projek itu. Jika anda tidak melakukan apa-apa, ok, tulis sahaja "tidak melakukan apa-apa". Ini adalah amalan yang bagus dan membuatkan anda sedikit tegang. Tidak semua orang mengikuti peraturan ini, malangnya.

Tujuan semua pergerakan ini adalah mudah. Bentuk satu pasukan, walaupun hanya untuk masa yang singkat, untuk bekerjasama.

Saya mahu lelaki itu merasakan bahawa kerja mereka adalah penting. Fahami bahawa mereka tidak menulis kod sfera dalam vakum. Dan apa yang mereka lakukan bersama adalah projek yang akan digunakan oleh orang ramai.

Minggu pertama atau dua adalah peningkatan. Entiti dan komitmen kecil dibuat dengan perlahan. Sedikit demi sedikit saya kacau mereka, dan kerja menjadi lebih menyeronokkan. Komunikasi dalam sembang menjadi lebih rancak, pelajar menawarkan tambahan mereka.

Saya percaya bahawa matlamat telah dicapai. Projek selesai, mereka mendapat sedikit pengalaman bekerja dalam satu pasukan. Terdapat hasil yang boleh dilihat dan nyata yang boleh ditunjukkan kepada rakan dan dikembangkan lagi.

Penemuan

Pembelajaran adalah menarik.

Selepas setiap kelas, saya kembali dengan perasaan gelisah. Saya cuba menjadikan setiap pasangan unik dan menyampaikan sebanyak mungkin pengetahuan.

Seronoknya bila kumpulan yang saya ajar sampai ke peringkat akhir. Ia sangat menarik apabila lelaki menulis "Saya mendapat pekerjaan, semuanya baik-baik saja, terima kasih." Walaupun ia seorang junior, walaupun ia bukan wang terbesar pada mulanya. Tetapi perkara yang paling penting ialah mereka mengambil langkah ke arah keinginan mereka, dan mereka berjaya.

Walaupun artikel itu ternyata agak besar, pastinya tidak mungkin untuk merangkumi semua perkara. Oleh itu, tulis soalan anda dalam komen.

Sumber: www.habr.com

Tambah komen