Xin chào các đồng nghiệp. Hôm nay chúng ta sẽ nói về loại công việc chuẩn bị bạn cần làm trước khi bắt đầu viết mã điên cuồng. Cụ thể hơn là về việc lập kế hoạch và tạo ra kiến trúc ứng dụng. Nhưng bắt đầu từ đâu? Làm thế nào để xây dựng kiến trúc này? Như với mọi thứ, bạn cần phải bắt đầu lại từ đầu. Cụ thể - với IDEA. Ý tưởng của dự án của chúng tôi là tạo ra một bot telegram hữu ích với chức năng cơ bản. Hãy để chúng tôi nhắc lại chính xác điều gì: “Tôi, với tư cách là người dùng, muốn có thể nhận được thông báo khi các bài viết mới được xuất bản trong các nhóm đó trên JavaRush mà tôi quan tâm”. Theo nguyên tắc YAGNI, chúng tôi sẽ xây dựng ứng dụng của mình. Điều này có nghĩa là chúng tôi sẽ chỉ lấy những gì chúng tôi cần. Chúng tôi sẽ không tạo trước và dự trữ chức năng chỉ vì chúng tôi muốn và một ngày nào đó nó có thể thực sự hữu ích. Có, chúng tôi sẽ tạo một ứng dụng có thể đọc và mở rộng được, nhưng điều này không có nghĩa là chúng tôi sẽ tạo một lược đồ cơ sở dữ liệu “để phát triển”. Để không hỗ trợ cho sự “tăng trưởng” này, tôi quyết định rằng tốt hơn hết là nên từ bỏ nó hoàn toàn. Điều này sẽ giúp chúng ta tránh được những hỗ trợ không cần thiết trong quá trình phát triển và thử nghiệm không cần thiết. Sau này, khi dự án của chúng tôi đi vào sản xuất (lại là Anh giáo, từ viết tắt prod - production), chúng tôi sẽ có thể làm được nhiều điều hơn thế. Khi đã quyết định được ý tưởng, bạn cần nghịch ngợm một chút và vẽ. Vẽ gì? Chúng tôi sẽ cần khả năng lưu dữ liệu về đăng ký cho các nhóm người dùng khác nhau. Tôi biết rằng bạn có thể sử dụng ID người dùng dưới dạng ID trò chuyện trong Telegram. Và có một ý tưởng về cách thực sự tiến hành tìm kiếm các bài viết mới: chúng tôi sẽ tìm kiếm trong tất cả các nhóm có đăng ký các bài báo mới và gửi chúng đến các cuộc trò chuyện. Dựa trên điều này, chúng ta có được kết quả gần đúng đầu tiên sau đây (đây là quá trình phát triển không thêm phần tô điểm): Tôi không hy vọng rằng bạn sẽ hiểu chữ viết tay của tôi: Tôi muốn chỉ ra chính xác quá trình phát triển bắt đầu như thế nào và ở đâu. Giai đoạn đầu tiên đã hoàn thành: bằng cách nào đó chúng tôi đã quyết định được điều gì sẽ xảy ra. Các mô hình/bảng trong cơ sở dữ liệu được mô tả ở trên. Nhưng đây chỉ là bản nháp: nó có thể và cần được trau chuốt và chuyển sang dạng dễ đọc hơn. Trong khi đánh bóng, tôi nhớ rằng tôi cũng muốn lấy số liệu thống kê về công việc của bot. Đã thêm cái này. Trong bản vẽ này, rõ ràng nó sẽ được sắp xếp những gì và như thế nào. Tức là, chúng sẽ có những bảng và trường nào, tên thực thể nào cho các bảng. Người ta đã quyết định rằng sẽ có một vài trong số họ:
- Người dùng - thông tin về người dùng điện tín sẽ sử dụng bot của chúng tôi. Như bạn có thể thấy, chúng tôi chỉ lưu ID trò chuyện và cờ cho dù người dùng có hoạt động hay không. Tại sao? Bởi vì mục tiêu của chúng tôi không phải là thu thập thông tin về người dùng mà là mang lại lợi ích cho họ;
- GroupSub - đây sẽ là thông tin về nhóm mà bạn đăng ký và bài viết mới nhất được gửi tới người đăng ký;
- Thống kê - Tôi chưa tạo lược đồ cho nó - chúng ta sẽ làm việc đó sau. Đây không phải là mục tiêu chính trong MVP của dự án.
Tạo kho lưu trữ cho công việc
Cuối cùng, bạn có thể tạo một kho lưu trữ để làm việc với bot telegram.- Chúng tôi điền vào các mục đã quen thuộc với chúng tôi - tên của kho lưu trữ, mô tả ngắn gọn về nó.
- Thêm giấy phép - Apache 2.0 (bạn có thể chọn giấy phép theo ý mình).
- Dự án của chúng tôi hiện đã có sẵn - đây là liên kết đến nó: JavaRush Telegrambot .
Tạo một dự án trong kho lưu trữ
Để làm việc với dự án, bạn nên sử dụng các công cụ GitHub, chẳng hạn như project. Nó là gì? Đây là nơi bạn có thể tạo nhiệm vụ, theo dõi quá trình hoàn thành và lưu trạng thái nhiệm vụ. Xác định ai sẽ thực hiện chúng và hơn thế nữa. Để thực hiện điều này, trong dự án đã tạo, chúng ta sẽ tìm thấy nút Dự án và ở đó chúng ta sẽ tạo một dự án mới: Như bạn có thể thấy, ở đây tôi đã chỉ ra tên của dự án, mô tả nó và chọn mẫu mà chúng ta sẽ làm việc - Kanban tự động. Đối với chúng tôi bây giờ nó không quá quan trọng điều này có nghĩa là gì. Điều chính là chúng ta sẽ có một bảng nhiệm vụ, được chia thành các cột, trong đó mỗi cột sẽ là trạng thái của nhiệm vụ:- Việc cần làm - tất cả các nhiệm vụ dự định thực hiện;
- Đang thực hiện - các nhiệm vụ hiện đang được thực hiện;
- Đã hoàn thành - các nhiệm vụ đã được hoàn thành trong dự án này.
Viết các vấn đề (issues) cho dự án
Để hiểu những nhiệm vụ cần viết, hãy quyết định những gì chúng ta sẽ có trong dự án. Chúng ta cần một ứng dụng có thể khởi chạy dễ dàng và nhanh chóng để có thể truy cập cơ sở dữ liệu, để có thể quản lý và thay đổi lược đồ cơ sở dữ liệu, để có thể thực hiện các yêu cầu REST trong JavaRush nhằm lấy dữ liệu trên các bài viết. Dựa trên điều này, bạn có thể chọn các công nghệ sau:- SpringBoot - làm khung cho ứng dụng của chúng tôi,
- Dữ liệu mùa xuân - để làm việc với cơ sở dữ liệu,
- Flyway - để làm việc với việc di chuyển cơ sở dữ liệu,
- MySQL - làm cơ sở dữ liệu cho dự án,
- Telegrambot StringBoot khởi động - một thư viện để làm việc với bot telegram,
- Unirest là một thư viện để làm việc với các yêu cầu REST.
Mẫu tạo nhiệm vụ
Chúng tôi sẽ tạo các nhiệm vụ bằng cách sử dụng mẫu sau:- Tên tác vụ sẽ có dạng như sau: JRTB-{IssueNumber}:{IssueDescription} , trong đó:
- {IssueNumber} là số sê-ri của vấn đề. Hãy lấy nó thêm một lần nữa từ vấn đề cuối cùng;
- {IssueDescription} - mô tả ngắn gọn về sự cố.
- Trong phần nội dung của nhiệm vụ, chúng ta sẽ mô tả chi tiết hơn về nó (đôi khi nó có thể trùng với mô tả trong tên nhiệm vụ).
- Tiêu chí chấp nhận là danh sách các yêu cầu, sau đó nhiệm vụ có thể được coi là hoàn thành. Có thể nói, tiêu chí để nhận nhiệm vụ. Sử dụng chúng, người đánh giá (từ tiếng Anh reviewer - reviewer - người xem xét cách hoàn thành một nhiệm vụ) có thể hiểu được nhiệm vụ đó đã hoàn thành hoàn thành hay chưa.
- [TÍNH NĂNG] JRTB-0: tạo dự án khởi động Skeleton Spring - mọi thứ đều rõ ràng ở đây: bạn cần thực hiện phần đầu tiên của những gì chúng tôi đã làm trong bài viết trước.
- [TÍNH NĂNG] JRTB-2: thêm bot telegram vào dự án - thêm một bot trống sẽ chỉ phản hồi và nói rằng nó vẫn hoạt động tốt.
- [TÍNH NĂNG] JRTB-3: Triển khai mẫu lệnh cho telegrambot - hãy thiết lập cách tiếp cận chính xác để làm việc với các lệnh trong bot telegram. Cho đến nay đối với một số đội.
- [TÍNH NĂNG] JRTB-1: Thêm lớp kho lưu trữ - đây là một trong những nhiệm vụ lớn nhất - nó kết hợp mọi thứ cần phải làm để làm việc với cơ sở dữ liệu.
- [TÍNH NĂNG] JRTB-5: Với tư cách là người dùng, tôi muốn thêm nhóm vào đăng ký - đây đã là Câu chuyện người dùng đầu tiên theo cách hiểu Agile. Đây sẽ là một lợi ích thực sự cho người dùng của chúng tôi: có thể thêm đăng ký nhóm vào bot.
- [TÍNH NĂNG] JRTB-12: Thực hiện lập lịch gửi thông báo về các bài viết mới - đây sẽ là thực hiện tìm kiếm các bài viết mới nếu chúng được xuất bản cho từng nhóm và gửi đến tất cả người dùng đã đăng ký vào nhóm.
- [TÍNH NĂNG] JRTB-6: Với tư cách là người dùng, tôi muốn xem danh sách đăng ký nhóm của mình - mọi thứ ở đây đều đơn giản: chúng tôi thêm lệnh hiển thị danh sách tất cả các nhóm mà người dùng đã đăng ký.
- [TÍNH NĂNG] JRTB-7: Với tư cách là Người dùng, tôi muốn xóa đăng ký nhóm khỏi đăng ký của mình - tại đây bạn cần xóa đăng ký của người dùng để nhận các bản cập nhật trong nhóm.
- [TÍNH NĂNG] JRTB-8: Với tư cách là Người dùng, tôi muốn đặt bot không hoạt động - thực hiện dừng bot. Tức là mọi thứ cần phải được thực hiện trong hệ thống của chúng tôi để công việc dừng lại. Thêm lệnh /stop để xử lý.
- [TÍNH NĂNG] JRTB-9: Với tư cách là Người dùng, tôi muốn bắt đầu làm việc với bot HOẶC đặt kích hoạt nếu tôi đã sử dụng nó trước đây - thêm xử lý lệnh /start. Chính xác theo cách chúng tôi muốn nó.
- [TÍNH NĂNG] JRTB-10: Với tư cách là quản trị viên, tôi muốn xem số liệu thống kê về bot - tạo bộ sưu tập số liệu thống kê về bot. Thêm khả năng của quản trị viên.
- [TÍNH NĂNG] JRTB-11: Với tư cách là người dùng, tôi muốn xem tài liệu về bot telegram này - tài liệu viết. Vâng, vâng, các bạn ơi, bạn không thể sống thiếu nó, và bạn học cách làm điều này càng sớm thì càng tốt cho bạn))
Điền vào kho lưu trữ
Những gì khác cần phải được thực hiện TRƯỚC KHI chúng ta bắt đầu viết mã? - Tác giả, bạn thêm được bao nhiêu đoạn văn này, bạn có kéo chúng ra khỏi vực thẳm không?? — Không, chất lượng công việc được thể hiện qua từng chi tiết. Và họ là những người có ý nghĩa. Vì vậy, hãy thêm một chi tiết nữa. Để dự án trở nên phổ biến và dễ hiểu đối với các nhà phát triển khác, nó cần phải được điền đầy đủ. Tôi nên thêm gì? Tôi đã mô tả danh sách đầy đủ những gì có thể thực hiện trong bài viết Tối ưu hóa công việc với các dự án của bạn trên GitHub: tìm hiểu Kho lưu trữ mẫu Github . Tôi rất khuyên bạn nên đọc nó. Điều quan trọng là chúng tôi phải có phiên bản rõ ràng, hiểu rõ về những gì chúng tôi đang làm. Do đó, tôi đã thêm tệp RELEASE_NOTES trong đó các thay đổi đối với dự án của chúng tôi sẽ được ghi lại. Ví dụ: bạn có thể xem RELEASE_NOTES từ dự án của tôi (vâng, tại sao không hiển thị những gì tôi đã dồn sức lực và sự sáng tạo của mình vào). Những thay đổi cho mỗi phiên bản mới được mô tả ở đó. Tôi cũng đã thêm các mẫu để tạo tác vụ mới, có 4 tùy chọn:- Báo cáo lỗi là một nhiệm vụ được tạo bởi người dùng/người kiểm tra để tìm ra lỗi trong công việc của họ. Đây là một điều rất quan trọng: nó giúp quản lý việc sửa lỗi;
- Yêu cầu tính năng là một nhiệm vụ để thêm chức năng mới. Tất cả các nhiệm vụ đầu tiên trong dự án đều là nhiệm vụ yêu cầu tính năng;
- Yêu cầu cải tiến - một nhiệm vụ để cải thiện hoạt động của ứng dụng. Ví dụ: để thay đổi câu trả lời của bài kiểm tra khi làm việc với bot. Tôi không phải là người viết kỹ thuật và tôi có thể đưa ra những câu trả lời không hoàn toàn chính xác. Vì vậy nếu bạn có mong muốn và khả năng thì hãy cống hiến nhé :)
- Câu hỏi là một câu hỏi dành cho các nhà phát triển về hoạt động của ứng dụng. Một điều rất hữu ích. Giả sử bạn không hiểu công việc hoặc có nghi ngờ về một số câu hỏi - bạn có thể đặt câu hỏi theo cách này và nhận được câu trả lời trực tiếp.
GO TO FULL VERSION