问候,同事们。今天我们将讨论在开始疯狂编码之前需要做的准备工作。更具体地说,是关于规划和创建应用程序架构。 但从哪里开始呢?如何构建这个架构?与所有事情一样,您需要从头开始。即 - 使用 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