問候,同事們。今天我們將討論在開始瘋狂編碼之前需要做的準備工作。更具體地說,是關於規劃和創建應用程式架構。 但要從哪裡開始呢?如何建構這個架構?與所有事情一樣,您需要從頭開始。即 - 使用 IDEA。我們專案的想法是創建一個具有基本功能的有用的電報機器人。讓我們準確地重複一遍: “作為用戶,我希望能夠在我感興趣的 JavaRush 群組中發布新文章時收到通知。” 遵循 YAGNI 原則,我們將建立我們的應用程式。這意味著我們只會拿走我們需要的東西。我們不會因為我們想要並且有一天它可能真的派上用場而提前創建和保留功能。是的,我們將創建一個可讀且可擴展的應用程序,但這並不意味著我們將創建一個「用於成長」的資料庫模式。為了不支持這種“增長”,我決定乾脆放棄它。這將幫助我們避免開發過程中不必要的支援和不必要的測試。稍後,當我們的專案投入生產時(又是英國主義,來自縮寫 prod - 生產),我們將能夠做更多的事情。一旦你決定了一個想法,你就需要頑皮地畫畫。畫什麼?我們需要能夠保存不同用戶群組的訂閱資料。我知道您可以在 Telegram 中以聊天 ID 的形式使用使用者 ID。新文章的搜尋實際上將如何進行有一個想法:我們將搜尋所有訂閱新文章的群組並將其發送到聊天室。基於此,我們得到以下作為第一個近似值(這是沒有修飾的發展):我不希望你能理解我的筆跡:我想準確地展示發展如何以及從哪裡開始。第一階段已經完成:我們已經以某種方式決定了將要發生的事情。資料庫中的模型/表如上所述。但這只是一個草稿:它可以而且應該被完善並變成更具可讀性的形式。當我打磨的時候,我想起我還想獲得機器人工作的統計數據。添加了這個。在這張圖中,它的排列內容和方式非常清楚。也就是說,其中包含哪些表和字段,表的實體名稱是什麼。決定有以下幾個:
- 用戶 - 有關將使用我們的機器人的電報用戶的資訊。正如您所看到的,我們只保存聊天 ID 和標記,無論用戶是否處於活動狀態。為什麼?因為我們的目標不是收集用戶的訊息,而是讓用戶受益;
- GroupSub - 這裡將顯示有關您訂閱的群組的資訊以及發送給訂閱者的最新文章;
- 統計 - 我還沒有為其創建模式 - 我們稍後會這樣做。這不是該專案 MVP 中的主要目標。
建立工作儲存庫
最後,您可以建立一個用於使用電報機器人的儲存庫。- 我們填寫我們已經熟悉的項目 - 儲存庫的名稱、其簡要描述。
- 新增許可證 - Apache 2.0(您可以自行選擇許可證)。
- 我們的專案現已可用 - 這是它的連結:JavaRush Telegrambot。
在儲存庫中建立項目
要處理該項目,最好使用 GitHub 工具,例如 project. 這是什麼?您可以在此處建立任務、追蹤其完成情況並保存任務狀態。確定由誰來執行這些任務等等。為此,在建立的專案中,我們將找到「專案」按鈕,然後我們將建立一個新專案:如您所見,這裡我指出了專案的名稱,對其進行了描述並選擇了我們將使用的模板 -自動化看板。對現在的我們來說,這意味著什麼並不那麼重要。最主要的是,我們將有一個任務板,任務分成幾列,每列都是任務的狀態:- 待辦事項-計畫完成的所有任務;
- 進行中 - 目前正在處理的任務;
- 已完成 - 該專案中已完成的任務。
為專案編寫問題(issue)
為了了解要編寫哪些任務,讓我們決定專案中的內容。我們需要一個可以輕鬆快速啟動的應用程序,以便我們可以存取資料庫,以便我們可以管理和更改資料庫模式,以便我們可以在JavaRush中發出REST請求來獲取文章資料。基於此,您可以選擇以下技術:- SpringBoot - 作為我們應用程式的框架,
- Spring Data - 用於處理資料庫,
- Flyway - 用於處理資料庫遷移,
- MySQL - 作為該專案的資料庫,
- Telegrambot StringBoot starter - 一個用於電報機器人的函式庫,
- Unirest 是一個用於處理 REST 請求的函式庫。
任務創建模板
我們將使用以下範本建立任務:- 任務名稱將如下所示:JRTB-{IssueNumber}:{IssueDescription},其中:
- {IssueNumber} 是問題的序號。讓我們再看一下上一個問題;
- {IssueDescription} - 問題的簡要描述。
- 在任務正文中我們會對它做更詳細的描述(有時可能與任務名稱中的描述一致)。
- 驗收標準是一系列要求,滿足該要求後即可認為任務已完成。可以說,接受任務的標準。使用它們,審閱者(來自英語審閱者 - 審閱者 - 負責查看任務完成情況的人)可以了解任務是否完全完成。
- [功能] JRTB-0:建立 Skeleton Spring boot 專案- 這裡一切都很清楚:您需要執行我們在上一篇文章中所做的第一部分。
- [功能] JRTB-2:將電報機器人添加到專案中- 添加一個空機器人,該機器人將簡單地響應並表示它還活著並且運作良好。
- [功能] JRTB-3:為 telegrambot 實作指令模式- 讓我們設定在 telegram bot 中使用指令的正確方法。到目前為止,有幾支球隊。
- [功能] JRTB-1:新增儲存庫層- 這是最大的任務之一 - 它結合了使用資料庫所需完成的所有操作。
- [功能] JRTB-5:作為用戶,我想將群組添加到訂閱中- 這已經是敏捷理解中的第一個用戶故事。這對我們的用戶來說將是一個真正的好處:可以為機器人添加群組訂閱。
- [功能] JRTB-12:實現發送有關新文章的通知的調度- 如果新文章為每個組發布並發送給訂閱該組的所有用戶,這裡將實現搜索新文章。
- [功能] JRTB-6:作為用戶,我想查看我的群組訂閱清單- 這裡一切都很簡單:我們添加一個命令來顯示用戶訂閱的所有群組的清單。
- [功能] JRTB-7:作為用戶,我想從我的訂閱中刪除群組訂閱- 此處您需要刪除用戶對群組中更新的訂閱。
- [功能] JRTB-8:作為用戶,我想使用機器人將其設定為非活動狀態- 實施停止機器人。也就是說,我們的系統中需要完成的所有操作才能停止工作。將 /stop 指令加入處理中。
- [功能] JRTB-9:作為用戶,我想開始使用機器人,或者如果我之前使用過機器人,則將其設定為活動狀態- 新增 /start 命令的處理。正是我們想要的方式。
- [功能] JRTB-10:作為管理員,我想查看機器人統計數據- 創建機器人統計數據集合。新增管理員功能。
- [功能] JRTB-11:作為用戶,我想查看此電報機器人的文檔- 編寫文檔。是的,是的,朋友們,沒有它你就活不下去,你越早學會這樣做,對你來說就越好))
填寫儲存庫
在開始編碼之前還需要做什麼? - 作者,你能加上多少這樣的段落,你把它們從深淵中拉出來了嗎?——不,工作的好壞是從細節中體現出來的。它們是有意義的。 讓我們再增加一個細節。為了使該專案變得流行並被其他開發人員理解,需要填寫它。我應該添加什麼?我在文章優化 GitHub 上的專案工作:了解 Github 範本儲存庫 中描述了可以執行的操作的完整清單。我強烈推薦閱讀它。對我們來說,擁有清晰的版本控制、清楚地了解我們正在做的事情非常重要。因此,我新增了一個 RELEASE_NOTES 文件,其中將記錄對專案的變更。作為一個例子,您可以查看我的專案中的 RELEASE_NOTES(是的,為什麼不展示我投入的精力和創造力)。其中描述了每個新版本的變更。我還添加了用於創建新任務的模板,其中有 4 個選項:- 錯誤報告是由在工作中發現錯誤的使用者/測試人員所建立的任務。這是一件非常重要的事情:它有助於管理錯誤修復;
- 功能請求是新增功能的任務。專案中的所有首要任務都是功能請求任務;
- 改進請求- 改進應用程式操作的任務。例如,在使用機器人時更改測試答案。我不是技術作家,我不能給出完全正確的答案。所以如果你有這個願望和能力,就提供吧:)
- Question是向開發者詢問有關應用程式操作的問題。非常有用的東西。假設對作品不了解或對某個問題有疑問——你可以透過這種方式提出問題並得到第一手答案。
GO TO FULL VERSION