E-Dobavki - một dịch vụ web tìm kiếm phụ gia thực phẩm bằng Java và Spring Boot, được viết bởi các học viên của tôi

Giới thiệu

Chuyện xảy ra là trong gần hai năm qua, tôi đã dạy lập trình tại một trong những trường CNTT ở Kiev. Tôi bắt đầu làm việc này Chỉ vì niềm vui. Tôi đã từng viết blog lập trình, sau đó tôi đã từ bỏ nó. Nhưng mong muốn kể những điều hữu ích cho những người quan tâm vẫn không mất đi.

Ngôn ngữ chính của tôi là Java. Tôi đã viết trò chơi cho điện thoại di động, phần mềm liên lạc vô tuyến và nhiều dịch vụ web khác nhau trên đó. Và tôi dạy Java.

Ở đây tôi muốn kể câu chuyện về quá trình đào tạo nhóm cuối cùng của tôi. Họ đã đi từ giai đoạn bắt đầu đào tạo đến viết một dịch vụ web hoạt động như thế nào. Một dịch vụ web hữu ích để tìm kiếm chất bổ sung dinh dưỡng. Miễn phí, không có quảng cáo, đăng ký và SMS.

Bản thân dịch vụ này ở đây - E-Dobavki.com.

E-Dobavki - một dịch vụ web tìm kiếm phụ gia thực phẩm bằng Java và Spring Boot, được viết bởi các học viên của tôi

Dự án mang tính giáo dục và không chứa bất kỳ quảng cáo nào. Theo tôi hiểu từ ấn phẩm này, bạn có thể cung cấp liên kết đến các dự án như vậy.

Trước khi mô tả dự án, tôi sẽ kể cho bạn nghe một chút về quá trình học tập của nhóm, nếu không có điều này thì bức tranh sẽ không đầy đủ.

đào tạo 9 tháng

Ở trường nơi tôi giảng dạy, khóa học Java được chia thành 2 phần. Tổng cộng, khóa học kéo dài khoảng 9 tháng, có tất cả các kỳ nghỉ (nghỉ Tết, thời gian viết các dự án trung cấp).

Phần đầu tiên giới thiệu cho học sinh những khái niệm cơ bản về ngôn ngữ. Các biến, phương thức, kiến ​​thức cơ bản về OOP và tất cả những thứ đó.

Phần thứ hai của khóa học cung cấp cho học viên ít nhiều hiểu cách viết bằng Java và anh ta có thể được cung cấp một ngăn xếp công nghệ “người lớn”. Tất cả bắt đầu bằng SQL, sau đó là JDBC, Hibernate. Sau đó là HTTP, servlet. Tiếp theo là Spring, một chút về git và maven. Và sinh viên viết dự án cuối cùng.

Tất cả đào tạo được chia thành các mô-đun. Tôi tiến hành các lớp học hai lần một tuần. Thời lượng của một bài học là hai giờ.

Cách tiếp cận học tập của tôi

Tôi đã phát hành 5 nhóm. Có vẻ như rất nhiều trong hai năm, nhưng tôi hầu như luôn dẫn dắt song song 2 nhóm.

Tôi đã thử các cách tiếp cận khác nhau.

Tùy chọn đầu tiên là một cặp được phân bổ cho phần trình bày lý thuyết. Cặp thứ hai là thực hành thuần túy. Cách tiếp cận này bằng cách nào đó đã có hiệu quả, nhưng theo tôi thì nó không hiệu quả lắm.

Lựa chọn thứ hai mà tôi đã nghĩ đến và đang thực hiện hiện nay là không dành toàn bộ thời gian cho lý thuyết. Thay vào đó, tôi kết hợp các phần lý thuyết ngắn trong 5-10 phút và ngay lập tức củng cố chúng bằng các ví dụ thực tế. Cách tiếp cận này hoạt động tốt hơn.

Nếu có đủ thời gian, tôi gọi học sinh đến chỗ của mình, cho họ ngồi trước máy tính xách tay và họ tự làm những ví dụ thực tế. Nó hoạt động rất tốt, nhưng tiếc là nó tốn rất nhiều thời gian.

Không phải ai cũng làm được đến cuối cùng

Một điều tiết lộ đối với tôi là không phải toàn bộ nhóm đều hoàn thành khóa học.

Theo quan sát của tôi, chỉ có một nửa số sinh viên viết dự án cuối cùng. Hầu hết chúng đều bị loại bỏ trong phần đầu tiên của khóa học. Và những người đã đến phần thứ hai thường không bị bỏ rơi.

Họ rời đi vì nhiều lý do khác nhau.

Đầu tiên là sự phức tạp. Dù họ có nói gì đi chăng nữa thì Java không phải là ngôn ngữ đơn giản nhất. Để viết được ngay cả chương trình đơn giản nhất, bạn cần hiểu khái niệm về lớp, phương thức. Và để hiểu tại sao bạn cần phải viết public static void main (String [] arg) Có một vài khái niệm nữa cần hiểu.

Hãy so sánh điều này với Turbo Pascal, điều mà nhiều người đã bắt đầu, trong đó có tôi:

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

Theo tôi được biết, nhà trường sẽ giải quyết vấn đề này bằng cách đưa ra các bài kiểm tra bổ sung. Hiện nay không phải ai cũng có thể học Java. Đây vẫn đang ở giai đoạn ý tưởng, nhưng rõ ràng đây là bước đi đúng đắn.

Và lý do thứ hai giống như trong hình dưới đây:

E-Dobavki - một dịch vụ web tìm kiếm phụ gia thực phẩm bằng Java và Spring Boot, được viết bởi các học viên của tôi

Mọi người thường nghĩ rằng lập trình là phải gõ thật nhiều văn bản và kiếm được rất nhiều tiền từ việc đó. Giống như một người viết quảng cáo, chỉ có nhiều tiền hơn.

Thực tế có một chút khác biệt. Rất nhiều mã thông thường, các lỗi không rõ ràng, một quá trình học hỏi không ngừng. Nó thú vị, nhưng không phải dành cho tất cả mọi người.

Đây là những số liệu thống kê. Lúc đầu điều đó khiến tôi khó chịu, tôi nghĩ có lẽ mình đã làm sai điều gì đó. Bây giờ tôi hiểu rằng số liệu thống kê gần như giống nhau đối với hầu hết các khóa học. Bây giờ tôi không lo lắng về điều đó mà chỉ dạy cho những người quan tâm đến nó.

Ý tưởng dịch vụ

Sau khi sinh viên đã hoàn thành toàn bộ khóa học, đã đến lúc viết dự án cuối cùng. Có nhiều ý tưởng khác nhau. Họ cung cấp các bảng ToDo, các dự án quản lý dự án và những thứ khác.

Tôi muốn làm điều gì đó đơn giản nhưng hữu ích. Tiêu chí của tôi rất đơn giản - liệu tôi và bạn bè có thể sử dụng nó hay không. Một dịch vụ web tìm kiếm phụ gia thực phẩm đã đáp ứng được những yêu cầu này.

Ý tưởng rất đơn giản. Khi bạn mua một sản phẩm ở cửa hàng, bạn sẽ thấy một loại phụ gia điện tử nào đó trong thành phần. Mã không nói rõ nó nguy hiểm hay không (và cũng có những chất phụ gia nguy hiểm bị cấm ở nhiều quốc gia).

Bạn mở trang web, nhập tên thực phẩm bổ sung (số, một trong những tên thay thế) và nhận được tóm tắt về thực phẩm bổ sung:

E-Dobavki - một dịch vụ web tìm kiếm phụ gia thực phẩm bằng Java và Spring Boot, được viết bởi các học viên của tôi

Có những dự án tương tự. Bạn cũng có thể chỉ cần nhập phụ gia vào Google, mặc dù nó không phải lúc nào cũng hiển thị thông tin chính xác.

Nhưng vì dự án mang tính giáo dục nên những khó khăn trên không ngăn cản được chúng tôi :)

Thực hiện

Mọi người đều viết bằng Java, mã nguồn của dự án trên Github.

Có 7 người chúng tôi, trong đó có tôi. Mọi người đều đưa ra yêu cầu kéo và tôi hoặc một người khác trong nhóm đã chấp nhận yêu cầu kéo này.

Quá trình thực hiện dự án mất khoảng một tháng - từ khi lên ý tưởng đến trạng thái mà bạn thấy bây giờ.

Phân tích phụ gia

Điều đầu tiên mà một trong số các sinh viên làm, ngoài việc tạo cơ bản một khung xung quanh cơ sở dữ liệu (thực thể, kho lưu trữ, v.v.), là phân tích cú pháp các tiện ích bổ sung từ một trang thông tin hiện có.

Điều này là cần thiết để kiểm tra các điểm còn lại. Không cần thêm mã để điền vào cơ sở dữ liệu. Sau khi phân tích cú pháp nhanh chóng một số phần bổ sung, chúng tôi có thể kiểm tra thêm giao diện người dùng, sắp xếp và lọc.

Spring Boot cho phép bạn tạo nhiều profile. Hồ sơ là một tập tin có cài đặt.

Đối với môi trường nhà phát triển, chúng tôi đã sử dụng cấu hình có DBMS H2 cục bộ và cổng HTTP mặc định (8080). Vì vậy, mỗi khi ứng dụng được khởi chạy, cơ sở dữ liệu sẽ bị xóa. Trình phân tích cú pháp trong trường hợp này là thứ đã cứu chúng tôi.

Tìm kiếm và lọc

Một điểm quan trọng là tìm kiếm và lọc. Người vào cửa hàng phải nhanh tay bấm vào mã của sản phẩm bổ sung hoặc một trong các tên thì sẽ nhận được kết quả.

Do đó, thực thể Phụ gia có một số trường. Đây là mã phụ gia, tên thay thế, mô tả. Việc tìm kiếm được thực hiện bằng cách sử dụng Like trong tất cả các trường cùng một lúc. Và nếu nhập [123] hoặc [amaranth] cũng sẽ nhận được kết quả tương tự.

Chúng tôi đã làm tất cả điều này dựa trên Thông số kỹ thuật. Đây là một phần của Spring cho phép bạn mô tả các điều kiện tìm kiếm cơ bản (chẳng hạn như một số trường), sau đó kết hợp các điều kiện này (OR hoặc AND).

Sau khi viết hàng tá thông số kỹ thuật, bạn có thể đặt các truy vấn phức tạp như “tất cả các chất phụ gia tạo màu nguy hiểm có từ [đỏ] trong mô tả”.

Về cách làm việc với cơ sở dữ liệu Spring thì mình thấy rất thuận tiện. Điều này đặc biệt đúng khi làm việc với các truy vấn phức tạp. Tôi hiểu rằng điều này có chi phí riêng và truy vấn SQL được viết và tối ưu hóa theo cách thủ công sẽ chạy nhanh hơn.

Nhưng tôi cũng tuân theo quan điểm không cần thiết phải tối ưu hóa mọi thứ trước. Phiên bản đầu tiên phải khởi động, hoạt động và cho phép thay thế từng bộ phận riêng lẻ. Và nếu có tải, những phần riêng lẻ này cần phải được viết lại.

Bảo mật

Nó đơn giản. Có những người dùng có vai trò QUẢN TRỊ VIÊN - họ có thể chỉnh sửa các phần bổ sung, xóa chúng và thêm các phần bổ sung mới.

Và có những người dùng khác (đã đăng ký hoặc chưa). Họ chỉ có thể duyệt qua danh sách các chất phụ gia và tìm kiếm những thứ họ cần.

Spring Security đã được sử dụng để phân tách các quyền. Dữ liệu người dùng được lưu trữ trong cơ sở dữ liệu.

Người dùng có thể đăng ký. Bây giờ nó không cho bất cứ điều gì. Nếu sinh viên tiếp tục phát triển dịch vụ và giới thiệu một số chức năng được cá nhân hóa thì việc đăng ký sẽ có ích.

Khả năng phản hồi và Bootstrap

Điểm tiếp theo là khả năng thích ứng. Trong trường hợp dịch vụ của chúng tôi (ít nhất là theo cách chúng tôi thấy), phần lớn người dùng sẽ sử dụng điện thoại di động. Và bạn cần xem nhanh phần bổ sung từ điện thoại di động của mình.

Để không gặp khó khăn với CSS, chúng tôi đã sử dụng Bootstrap. Rẻ, vui vẻ và có vẻ đàng hoàng.

Tôi không thể gọi giao diện là lý tưởng. Trang chính thậm chí còn ít hơn và trang mô tả chi tiết về chất phụ gia lại rất hẹp, trên điện thoại di động, nó cần phải được làm rộng hơn.

Tôi chỉ có thể nói rằng tôi đã cố gắng can thiệp vào công việc ít nhất có thể. Đây vẫn là một dự án sinh viên. Và tất nhiên, sau này các chàng sẽ có thể sửa chữa những khoảnh khắc như vậy.

Một phút tối ưu hóa SEO

Vì tôi đã tham gia chặt chẽ vào các trang web và mọi thứ liên quan đến SEO trong hơn hai năm nên tôi không thể phát hành một dự án mà không tối ưu hóa SEO cơ bản ít nhất.

Trên thực tế, tôi đã tạo mẫu Tiêu đề và Mô tả cho mỗi tiện ích bổ sung. URL gần như là CNC, mặc dù nó có thể được làm ngắn hơn.

Tôi cũng đã thêm quầy chấm công. Đã thêm trang web vào Yandex Webmaster và Google Search Console để theo dõi cảnh báo từ các công cụ tìm kiếm.

Nó không đủ. Bạn cũng cần thêm robots.txt và sitemap.xml để lập chỉ mục đầy đủ. Nhưng một lần nữa, đây là một dự án của sinh viên. Tôi sẽ nói với họ những gì cần phải làm, và nếu họ muốn, họ sẽ làm.

Bạn cần đính kèm chứng chỉ SSL. Let's Encrypt miễn phí cũng sẽ hoạt động. Tôi đã làm điều này cho Spring Boot. Việc này không khó thực hiện và độ tin cậy của PS ngày càng tăng.

Điều gì tiếp theo cho dự án?

Sau đó, trên thực tế, sự lựa chọn là tùy thuộc vào các chàng trai. Ý tưởng ban đầu của dự án cũng bao gồm cơ sở dữ liệu về các sản phẩm có liên kết đến các chất phụ gia.

Nhập “Snickers” và xem nó chứa những chất phụ gia dinh dưỡng nào.

Ngay cả khi bắt đầu dự án, tôi đã biết rằng chúng tôi sẽ không có bất kỳ sản phẩm nào :) Vì vậy, chúng tôi chỉ bắt đầu với các chất phụ gia.

Bây giờ bạn có thể thêm sản phẩm và giới thiệu những sản phẩm bổ sung. bánh bao. Nếu đó là một cơ sở dữ liệu rộng rãi, sẽ có người dùng.

Triển khai

Dự án được triển khai trên VPS, Aruba Cloud. Đây là VPS rẻ nhất mà chúng tôi có thể tìm thấy. Tôi đã sử dụng nhà cung cấp này hơn một năm cho các dự án của mình và tôi rất hài lòng với nó.

Đặc điểm của VPS: RAM 1 GB, 1 CPU (mình không biết về tần số), SSD 20 GB. Đối với dự án của chúng tôi điều này là đủ.

Dự án được xây dựng bằng gói mvn clean thông thường. Kết quả là một fat jar - một tệp thực thi có tất cả các phần phụ thuộc.

Để tự động hóa tất cả những điều này một chút, tôi đã viết một vài tập lệnh bash.

Tập lệnh đầu tiên xóa tệp jar cũ và tạo tệp jar mới.

Tập lệnh thứ hai khởi chạy bình đã lắp ráp, chuyển cho nó tên của cấu hình được yêu cầu. Hồ sơ này chứa thông tin kết nối cơ sở dữ liệu.

DB - MySQL trên cùng một VPS.

Tổng số dự án khởi động lại bao gồm:

  • đăng nhập vào VPS qua SSH
  • tải xuống những thay đổi git mới nhất
  • chạy local-jar.sh
  • tắt ứng dụng đang chạy
  • chạy launch-production.sh

Thủ tục này mất ba phút. Đối với tôi, đây có vẻ là một lựa chọn thông minh cho một dự án nhỏ như vậy.

Khó khăn

Những khó khăn chính trong việc tạo ra dự án có tính chất tổ chức.

Có một nhóm người có vẻ biết cách lập trình nhưng không giỏi lắm. Họ biết điều gì đó, nhưng họ vẫn không thể thực sự áp dụng được nó. Và bây giờ họ cần hoàn thành dự án trong một tháng.

Tôi đã xác định được một trưởng nhóm có điều kiện trong nhóm này. Anh ấy giữ một tài liệu Google với danh sách các nhiệm vụ, các nhiệm vụ được phân bổ và kiểm soát việc chấp nhận chúng. Anh ấy cũng chấp nhận yêu cầu kéo.

Tôi cũng yêu cầu sinh viên viết một bản báo cáo ngắn vào mỗi buổi tối về công việc họ đã làm trong dự án. Nếu bạn không làm gì cả, được thôi, chỉ cần viết “không làm gì cả”. Đây là cách luyện tập tuyệt vời và khiến bạn hơi căng thẳng. Thật không may, không phải ai cũng tuân theo quy tắc này.

Mục đích của tất cả phong trào này rất đơn giản. Thành lập một nhóm, dù chỉ trong thời gian ngắn, để làm việc cùng nhau.

Tôi muốn mọi người cảm thấy rằng công việc của họ rất quan trọng. Hiểu rằng họ không viết mã hình cầu trong chân không. Và những gì họ đang làm cùng nhau là một dự án mà mọi người sẽ sử dụng.

Một hoặc hai tuần đầu tiên là quá trình xây dựng. Các thực thể và các cam kết nhỏ được thực hiện một cách chậm chạp. Dần dần tôi khuấy động họ và công việc trở nên vui vẻ hơn. Giao tiếp trong cuộc trò chuyện trở nên sôi động hơn, học sinh đưa ra những bổ sung của mình.

Tôi tin rằng mục tiêu đã đạt được. Dự án hoàn thành, các bạn đã có được một ít kinh nghiệm làm việc nhóm. Có một kết quả hữu hình, hữu hình có thể khoe với bạn bè và phát triển thêm.

Những phát hiện

Học tập thật thú vị.

Sau mỗi buổi học tôi lại trở về với cảm xúc bồi hồi. Tôi cố gắng làm cho mỗi cặp trở nên độc đáo và truyền đạt càng nhiều kiến ​​​​thức càng tốt.

Thật vui khi nhóm tôi dạy lọt vào vòng chung kết. Đặc biệt thú vị khi các chàng trai viết “Tôi đã có việc làm, mọi thứ đều ổn, cảm ơn bạn”. Dù là đàn em, dù ban đầu đó không phải là số tiền lớn nhất. Nhưng điều quan trọng nhất là họ đã tiến một bước tới mong muốn của mình và họ đã thành công.

Mặc dù bài viết khá đồ sộ nhưng chắc chắn không thể đề cập hết các điểm. Vì vậy, hãy viết câu hỏi của bạn trong phần bình luận.

Nguồn: www.habr.com

Thêm một lời nhận xét