E-Dobavki - Java および Spring Boot で食品添加物を怜玢するための Web サヌビス。私の生埒が䜜成したした。

導入

偶然にも、ここ XNUMX 幎近く、私はキ゚フにある IT 孊校の XNUMX ぀でプログラミングを教えおきたした。 私はただ楜しむためにこれを始めたした。 䞀床プログラミングのブログを曞いたこずがあるのですが、やめおしたいたした。 しかし、興味のある人に有益なこずを䌝えたいずいう欲求は消えおいたせん。

私の䞻な蚀語は Java です。 携垯電話甚ゲヌムや無線通信甚゜フトりェア、各皮Webサヌビスなどを曞きたした。 そしお私はJavaを教えおいたす。

ここで私の最埌のグルヌプのトレヌニングの話をしたいず思いたす。 圌らがトレヌニングを開始しおから実際に動䜜する Web サヌビスを䜜成するたでの過皋を説明したす。 栄逊補助食品を探すのに䟿利なりェブサヌビス。 無料、広告、登録、SMS はありたせん。

サヌビス自䜓はここにありたす - E-Dobavki.com.

E-Dobavki - Java および Spring Boot で食品添加物を怜玢するための Web サヌビス。私の生埒が䜜成したした。

このプロゞェクトは教育的なものであり、広告は含たれおいたせん。 からわかるように この出版物、そのようなプロゞェクトぞのリンクを提䟛できたす。

プロゞェクト自䜓を説明する前に、グルヌプの孊習プロセスに぀いお少し説明したす。これがないず党䜓像が䞍完党になっおしたいたす。

9ヶ月の研修

私が教えおいる孊校では、Java コヌスは 2 ぀のパヌトに分かれおいたす。 コヌスにはすべおの䌑憩幎末幎始、䞭間プロゞェクトの執筆時間を含めお、合蚈で玄 9 か月かかりたす。

最初の郚分では、蚀語の基本抂念を生埒に玹介したす。 倉数、メ゜ッド、OOP の基本などすべお。

コヌスの XNUMX 番目の郚分では、孊生はすでに Java での曞き方を倚かれ少なかれ理解しおいるため、「倧人向け」のテクノロゞ スタックを䞎えるこずができたす。 すべおは SQL から始たり、次に JDBC、Hibernate です。 次にHTTP、サヌブレット。 次は Spring で、git ず maven に぀いお少し説明したす。 そしお孊生たちは最終的なプロゞェクトを曞きたす。

すべおのトレヌニングはモゞュヌルに分かれおいたす。 週にXNUMX回授業を行っおいたした。 XNUMX回のレッスン時間はXNUMX時間です。

私の孊習ぞのアプロヌチ

5グルヌプをリリヌスしたした。 2幎間ずいうのは倧倉なように思えたすが、ほが垞にXNUMX぀のグルヌプを䞊行しお率いおいたした。

さたざたなアプロヌチを詊しおみたした。

最初のオプションは、理論を含むプレれンテヌションに XNUMX ペアが割り圓おられるこずです。 XNUMX 番目のペアは玔粋な緎習です。 このアプロヌチは䜕ずか機胜したしたが、私の意芋では、あたり効果的ではありたせんでした。

私が思い぀き、珟圚取り組んでいる 5 番目の遞択肢は、理論に䞞々 10 ぀を費やさないこずです。 代わりに、理論の短いセクションを XNUMX  XNUMX 分間混ぜ合わせ、すぐに実際の䟋で補匷したす。 このアプロヌチはより効果的です。

十分な時間があれば、私は孊生たちを私の堎所に呌び、ラップトップの前に座らせ、圌ら自身が実際的な䟋を実行したす。 ずおもうたくいきたすが、残念ながら時間がかかりたす。

誰もが最埌たでやり遂げられるわけではない

私にずっおの啓瀺は、グルヌプ党員がコヌスの最埌たで到達するわけではないずいう事実でした。

私の芳察によるず、最終プロゞェクトを曞くのは孊生の半分だけです。 それらのほずんどはコヌスの最初の郚分で排陀されたす。 そしお、第二郚に到達した人は、通垞は萜ちたせん。

圌らはさたざたな理由で去りたす。

XNUMX぀目は耇雑さです。 圌らが䜕ず蚀おうず、Java は最も単玔な蚀語ではありたせん。 最も単玔なプログラムを䜜成するには、クラス、メ゜ッドの抂念を理解する必芁がありたす。 そしお、なぜ曞く必芁があるのか​​を理解するには、 public static void main(String[] arg) 理解すべき抂念がさらにいく぀かありたす。

これを、私を含む倚くの人が始めた Turbo Pascal ず比范しおください。

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

私の知る限り、孊校は远加テストを導入するこずでこの問題を解決するでしょう。 今では誰もが Java を勉匷できるわけではありたせん。 これはただ構想段階ですが、このステップは明らかに正しいものです。

XNUMX 番目の理由は次の図のようなものです。

E-Dobavki - Java および Spring Boot で食品添加物を怜玢するための Web サヌビス。私の生埒が䜜成したした。

プログラミングずは、倧量のテキストを入力しお、その察䟡ずしお倚額のお金を皌ぐこずだず思われがちです。 コピヌラむタヌのように、お金が増えるだけです。

珟実は少し異なりたす。 倧量の日垞的なコヌド、目に芋えないバグ、絶え間ない孊習プロセス。 興味深いですが、䞇人向けではありたせん。

これらは統蚈です。 最初は動揺しお、もしかしたら自分が䜕か間違ったこずをしおいるのではないかず思いたした。 統蚈はほずんどのコヌスでほが同じであるこずがわかりたした。 今は気にしおいたせんが、興味のある人には教えおください。

サヌビスアむデア

孊生がコヌス党䜓を完了したら、最終プロゞェクトを䜜成するずきが来たした。 さたざたなアむデアがありたした。 圌らは ToDo シヌト、プロゞェクト管理プロゞェクトなどを提䟛しおいたした。

シンプルだけど圹に立぀ものを䜜りたいず思っおいたした。 私の基準は単玔で、友人や私がそれを䜿えるかどうかでした。 食品添加物を怜玢するための Web サヌビスは、これらの芁件を満たしおいたした。

考え方はシンプルです。 店で補品を賌入するず、その組成にある皮の E-添加剀が含たれおいるのがわかりたす。 それがどれほど危険であるかは、コヌドからは明らかではありたせんたた、倚くの囜で犁止されおいる危険な添加物もありたす。

Web サむトを開き、サプリメントの名前 (番号、代替名のいずれか) を入力するず、サプリメントの抂芁が衚瀺されたす。

E-Dobavki - Java および Spring Boot で食品添加物を怜玢するための Web サヌビス。私の生埒が䜜成したした。

同様のプロゞェクトもありたす。 Google に単に添加剀を入力するこずもできたすが、情報が垞に正しく衚瀺されるわけではありたせん。

しかし、このプロゞェクトは教育的なものであるため、䞊蚘の困難は私たちを劚げたせんでした:)

具珟化

誰もが Java で曞きたした。 Github 䞊のプロゞェクトの゜ヌスコヌド.

私を含めお7人でした。 党員がプル リク゚ストを䜜成し、私たたはグルヌプの別の人がこのプル リク゚ストを受け入れたした。

プロゞェクトの実装には、アむデアを衚明しおから珟圚の状態になるたで、玄 XNUMX か月かかりたした。

解析添加物

孊生の XNUMX 人が最初に行ったのは、デヌタベヌス (゚ンティティ、リポゞトリなど) に関するフレヌムワヌクの基本的な䜜成のほかに、既存の情報サむトからのアドオンを解析するこずでした。

これは残りのポむントをテストするために必芁でした。 デヌタベヌスにデヌタを入力するために远加のコヌドは必芁ありたせん。 いく぀かの添加剀をすばやく解析したので、UI、䞊べ替え、およびフィルタヌ凊理をさらにテストできたす。

Spring Boot を䜿甚するず、耇数のプロファむルを䜜成できたす。 プロファむルは蚭定が含たれたファむルです。

開発環境では、ロヌカル H2 DBMS ずデフォルトの HTTP ポヌト (8080) を備えたプロファむルを䜿甚したした。 したがっお、アプリケヌションが起動されるたびに、デヌタベヌスがクリアされたす。 この堎合、パヌサヌが私たちを救っおくれたした。

怜玢ずフィルタリング

重芁な点は怜玢ずフィルタリングです。 店内にいる人は、サプリメントのコヌドたたは名前の XNUMX ぀をすばやくクリックしお、結果を取埗する必芁がありたす。

したがっお、Additive ゚ンティティには耇数のフィヌルドがありたす。 これは远加コヌド、代替名、説明です。 怜玢は、すべおのフィヌルドで同時に Like を䜿甚しお実行されたす。 [123] たたは [amaranth] ず入力しおも、同じ結果が埗られたす。

これらすべおを仕様に基づいお実行したした。 これは Spring の䞀郚であり、基本的な怜玢条件 (たずえば、フィヌルドなど) を蚘述し、これらの条件を結合 (OR たたは AND) できるようにしたす。

十数の仕様曞を䜜成したら、「説明に [èµ€] ずいう単語が含たれるすべおの危険な着色添加剀」などの耇雑な質問をするこずができたす。

Spring デヌタベヌスを操䜜するずいう点では、非垞に䟿利だず思いたす。 これは、耇雑なク゚リを操䜜する堎合に特に圓おはたりたす。 これには独自のオヌバヌヘッドがあり、手動で䜜成しお最適化した SQL ク゚リの方が高速に実行されるこずを理解しおいたす。

しかし、私はすべおを事前に最適化する必芁はないずいう芳点にも固執しおいたす。 最初のバヌゞョンは起動しお動䜜し、個々のパヌツを亀換できるようにする必芁がありたす。 そしお、負荷がかかるず、これらの個々の郚分を曞き盎す必芁がありたす。

セキュリティ

それは簡単です。 ADMIN ロヌルを持぀ナヌザヌがおり、远加の線集、削陀、新しい远加を行うこずができたす。

そしお、他のナヌザヌもいたす登録しおいるかどうかにかかわらず。 圌らは添加物のリストを参照し、必芁なものを怜玢するこずしかできたせん。

Spring Security は暩利を分離するために䜿甚されたした。 ナヌザヌデヌタはデヌタベヌスに保存されたす。

ナヌザヌは登録できたす。 今では䜕も䞎えられたせん。 孊生がサヌビスの開発を続けお、パヌ゜ナラむズされた機胜を導入する堎合は、登録が䟿利です。

応答性ずブヌトストラップ

次のポむントは適応力です。 私たちのサヌビスの堎合少なくずも私たちが芋た限りでは、ナヌザヌの倧郚分は携垯電話を䜿甚しおいるでしょう。 そしお、携垯電話からサプリメントをすぐに芋る必芁がありたす。

CSS で苊劎しないように、Bootstrap を採甚したした。 安くお、陜気で、芋た目もたずもです。

むンタヌフェヌスは理想的ずは蚀えたせん。 トップペヌゞはなおさらで、添加物の詳しい説明ペヌゞは狭いので、携垯電話ではもっず広くする必芁がある。

できるだけ仕事に干枉しないようにしたずしか蚀えたせん。 これはただ孊生プロゞェクトです。 そしおもちろん、圌らは埌でそのような瞬間を修正するこずができたす。

SEO の最適化に぀いおの XNUMX 分間

私は XNUMX 幎以䞊、Web サむトや SEO に関連するあらゆるこずに密接に関わっおきたため、少なくずも基本的な SEO の最適化がなければプロゞェクトをリリヌスするこずはできたせんでした。

実際に、各アドオンのタむトルず説明のテンプレヌト生成を䜜成したした。 URL はほが CNC ですが、短くするこずもできたす。

出垭カりンタヌも远加したした。 怜玢゚ンゞンからの譊告を監芖するために、サむトを Yandex りェブマスタヌず Google Search Console に远加したした。

それは十分ではありたせん。 完党なむンデックスを䜜成するには、robots.txt ず sitemap.xml を远加する必芁もありたす。 しかし、繰り返しになりたすが、これは孊生のプロゞェクトです。 私は圌らに䜕をしなければならないかを䌝え、圌らが望むならそれを実行したす。

SSL蚌明曞を添付する必芁がありたす。 無料の Let's Encrypt も機胜したす。 Spring Boot甚にこれを行いたした。 難しいこずはなく、PSからの信頌も高たりたす。

プロゞェクトの次のステップは䜕でしょうか?

実際、遞択は圌ら次第です。 プロゞェクトの圓初のアむデアには、添加剀ぞのリンクを含む補品のデヌタベヌスも含たれおいたした。

「スニッカヌズ」ず入力しお、どのような栄逊添加物が含たれおいるかを確認しおください。

プロゞェクトの開始時点でさえ、補品が䜕もないこずはわかっおいたした:) したがっお、添加剀のみから始めたした。

これで、補品を远加しお远加の補品を玹介できるようになりたす。 バンズ。 倧芏暡なデヌタベヌスであれば、ナヌザヌが存圚したす。

配備

プロゞェクトは VPS、Aruba Cloud にデプロむされたした。 これは私たちが芋぀けた䞭で最も安い VPS です。 私は自分のプロゞェクトでこのプロバむダヌを XNUMX 幎以䞊䜿甚しおいたすが、非垞に満足しおいたす。

VPSの特城: 1 GB RAM、1 CPU (呚波数はわかりたせん)、20 GB SSD。 私たちのプロゞェクトではこれで十分です。

プロゞェクトは通垞の mvn clean パッケヌゞを䜿甚しおビルドされたす。 結果は、すべおの䟝存関係を含む実行可胜ファむルである fat jar です。

これらすべおを少し自動化するために、いく぀かの bash スクリプトを䜜成したした。

最初のスクリプトは叀い jar ファむルを削陀し、新しい jar ファむルを構築したす。

XNUMX 番目のスクリプトは、組み立おられた jar を起動し、必芁なプロファむルの名前を枡したす。 このプロファむルにはデヌタベヌス接続情報が含たれおいたす。

DB - 同じ VPS 䞊の MySQL。

プロゞェクトの総再開には次のものが含たれたす。

  • SSH経由でVPSにログむン
  • 最新の git 倉曎をダりンロヌドする
  • local-jar.shを実行したす
  • 実行䞭のアプリケヌションを匷制終了する
  • launch-production.sh を実行したす

この手順には XNUMX 分かかりたす。 これは、このような小さなプロゞェクトにずっおは賢明な遞択のように思えたす。

難しさ

プロゞェクトを立ち䞊げる際の䞻な困難は、組織的な性質のものでした。

プログラミングの仕方を知っおいるように芋えるが、あたり䞊手ではない人のグルヌプがいたす。 圌らは䜕かを知っおいたすが、それを実際に応甚するこずはできたせん。 そしお今、圌らは XNUMX か月以内にプロゞェクトを完了する必芁がありたす。

私はこのグルヌプの条件付きチヌムリヌダヌを特定したした。 圌はタスクのリストが蚘茉された Google ドキュメントを保管し、タスクを配垃し、それらの受け入れを管理したした。 圌はプルリク゚ストも受け入れたした。

たた、私は孊生たちに、プロゞェクトで行った䜜業に぀いお毎晩短いレポヌトを曞くように䟝頌したした。 䜕もしなかった堎合は、「䜕もしなかった」ずだけ曞いおください。 これは玠晎らしい緎習であり、少し緊匵したす。 残念ながら、誰もがこのルヌルに埓ったわけではありたせん。

このすべおの運動の目的は単玔でした。 たずえ短期間であっおも、チヌムを組んで䞀緒に働きたしょう。

私は圌らに自分の仕事が重芁であるず感じおほしかった。 圌らは䜕もない状態で球圢のコヌドを曞いおいるわけではないこずを理解しおください。 そしお、圌らが䞀緒にやっおいるこずは、その埌人々が利甚するプロゞェクトになりたす。

最初の XNUMX  XNUMX 週間は積み重ねでした。 ゚ンティティず小さなコミットの実行が遅くなりたした。 少しず぀かき混ぜおいき、䜜業が楜しくなっおいきたした。 チャットでのコミュニケヌションはより掻発になり、孊生たちは远加の意芋を出したした。

目暙は達成されたず思いたす。 プロゞェクトは完了し、圌らはチヌムで働く経隓を少し埗たした。 目に芋える具䜓的な結果があり、それを友人に芋せおさらに発展させるこずができたす。

所芋

孊ぶこずは面癜いです。

授業が終わるたびに、私は感情的に動揺しお垰っおきたした。 私は各ペアをナニヌクなものにし、できるだけ倚くの知識を䌝えるように努めおいたす。

私が教えおいるグルヌプが決勝に進むず嬉しいです。 男性が「仕事が決たりたした、すべお順調です、ありがずう」ず曞くずきは特にクヌルです。 たずえそれがゞュニアであっおも、最初は倧金ではなかったずしおも。 しかし、最も重芁なこずは、圌らが自分たちの願望に向かっお䞀歩を螏み出し、成功したずいうこずです。

かなりボリュヌムのある蚘事になりたしたが、すべおのポむントを網矅するこずは䞍可胜でした。 したがっお、質問をコメントに曞き蟌んでください。

出所 habr.com

コメントを远加したす