JavaRush /Java 博客 /Random-ZH /项目规划:测量两次 - 削减一次 - 《Java 项目从 A 到 Z》
Roman Beekeeper
第 35 级

项目规划:测量两次 - 削减一次 - 《Java 项目从 A 到 Z》

已在 Random-ZH 群组中发布
问候,同事们。今天我们将讨论在开始疯狂编码之前需要做的准备工作。更具体地说,是关于规划和创建应用程序架构。 Java项目从A到Z。项目规划:测量七次-切割一次-1但从哪里开始呢?如何构建这个架构?与所有事情一样,您需要从头开始。即 - 使用 IDEA。我们项目的想法是创建一个具有基本功能的有用的电报机器人。让我们准确地重复一遍: “作为用户,我希望能够在我感兴趣的 JavaRush 组中发布新文章时收到通知。” 遵循 YAGNI 原则,我们将构建我们的应用程序。这意味着我们只会拿走我们需要的东西。我们不会仅仅因为我们想要并且有一天它可能真的派上用场而提前创建和保留功能。是的,我们将创建一个可读且可扩展的应用程序,但这并不意味着我们将创建一个“用于增长”的数据库模式。为了不支持这种“增长”,我决定干脆放弃它。这将帮助我们避免开发过程中不必要的支持和不必要的测试。稍后,当我们的项目投入生产时(又是英国主义,来自缩写 prod - 生产),我们将能够做更多的事情。一旦你决定了一个想法,你就需要顽皮地画画。画什么?我们需要能够保存不同用户组的订阅数据。我知道您可以在 Telegram 中以聊天 ID 的形式使用用户 ID。新文章的搜索实际上将如何进行有一个想法:我们将搜索所有订阅新文章的群组并将其发送到聊天室。基于此,我们得到以下作为第一个近似值(这是没有修饰的发展):Java项目从A到Z。项目规划:测量七次-切割一次-2我不希望你能理解我的笔迹:我想准确地展示发展如何以及从哪里开始。第一阶段已经完成:我们已经以某种方式决定了将要发生的事情。数据库中的模型/表如上所述。但这只是一个草案:它可以而且应该被完善并变成更具可读性的形式。当我打磨的时候,我想起我还想获得机器人工作的统计数据。添加了这个。在这张图中,它的排列内容和方式非常清楚。也就是说,其中包含哪些表和字段,表的实体名称是什么。决定有以下几个:
  • 用户 - 有关将使用我们的机器人的电报用户的信息。正如您所看到的,我们只保存聊天 ID 和标记,无论用户是否处于活动状态。为什么?因为我们的目标不是收集用户的信息,而是让用户受益;
  • GroupSub - 这里将显示有关您订阅的群组的信息以及发送给订阅者的最新文章;
  • 统计 - 我还没有为其创建模式 - 我们稍后会这样做。这不是该项目 MVP 中的主要目标。
Java项目从A到Z。项目规划:测量七次-切割一次-3之后,我想更详细地展示如何搜索新文章。为此,我使用了 BPMN 图,将其转换为图片并得到:Java项目从A到Z。项目规划:测量七次-切割一次-4这里的所有内容都更易于阅读和理解。我们将按照这个方案进行搜索。经理们真的很喜欢这个方案,因为它不仅对程序员来说是可以理解的:D 总的来说,已经开始了。

创建工作存储库

最后,您可以创建一个用于使用电报机器人的存储库。Java项目从A到Z。项目规划:测量七次-切割一次-5
  1. 我们填写我们已经熟悉的项目 - 存储库的名称、其简要描述。
  2. 添加许可证 - Apache 2.0(您可以自行选择许可证)。
  3. 我们的项目现已可用 - 这是它的链接:JavaRush Telegrambot

在存储库中创建项目

要处理该项目,最好使用 GitHub 工具,例如 project. 这是什么?您可以在此处创建任务、跟踪其完成情况并保存任务状态。确定由谁来执行这些任务等等。为此,在创建的项目中,我们将找到“项目”按钮,然后我们将创建一个新项目:Java项目从A到Z。项目规划:测量七次-切割一次-6如您所见,这里我指出了项目的名称,对其进行了描述并选择了我们将使用的模板 -自动化看板。对于现在的我们来说,这意味着什么并不那么重要。最主要的是,我们将有一个任务板,任务分为几列,每列都是任务的状态:
  1. 待办事项——计划完成的所有任务;
  2. 进行中 - 当前正在处理的任务;
  3. 已完成 - 该项目中已完成的任务。
这样我们就可以了解任务的状态。哪些正在进行,哪些已经完成。而且,这不仅在有团队的情况下很重要而且很方便,而且在你自己工作时也是如此。为了让某些内容出现在板上,您需要创建问题。

为项目编写问题(issue)

为了了解要编写哪些任务,让我们决定项目中的内容。我们需要一个可以轻松快速启动的应用程序,以便我们可以访问数据库,以便我们可以管理和更改数据库模式,以便我们可以在JavaRush中发出REST请求来获取文章数据。基于此,您可以选择以下技术:
  • SpringBoot - 作为我们应用程序的框架,
  • Spring Data - 用于处理数据库,
  • Flyway - 用于处理数据库迁移,
  • MySQL - 作为该项目的数据库,
  • Telegrambot StringBoot starter - 一个用于电报机器人的库,
  • Unirest 是一个用于处理 REST 请求的库。
从以上所有内容开始,让我们开始创建任务。

任务创建模板

我们将使用以下模板创建任务:
  1. 任务名称将如下所示:JRTB-{IssueNumber}:{IssueDescription},其中:
    • {IssueNumber} 是问题的序列号。让我们再看一下上一个问题;
    • {IssueDescription} - 问题的简要描述。
  2. 在任务正文中我们会对它做更详细的描述(有时可能与任务名称中的描述一致)。
  3. 验收标准是一系列要求,满足该要求后即可认为任务已完成。可以说,接受任务的标准。使用它们,审阅者(来自英语审阅者-审阅者-查看任务完成情况的人)可以了解任务是否完全完成。
使用这个模板,我们将创建我们的第一个任务:Java项目从A到Z。项目规划:测量七次-切割一次-7还值得注意的是,在创建它时,我立即确定了这个任务适合哪个项目,谁来执行它(受让人)以及这个任务属于哪个标签(标签)。接下来,我将简单地显示任务名称以及简短的描述和链接。他们都在这里。我们将按照与此处所示的大致相同的顺序执行任务:
  1. [功能] JRTB-0:创建 Skeleton Spring boot 项目- 这里一切都很清楚:您需要执行我们在上一篇文章中所做的第一部分。
  2. [功能] JRTB-2:将电报机器人添加到项目中- 添加一个空机器人,该机器人将简单地响应并表示它还活着并且运行良好。
  3. [功能] JRTB-3:为 telegrambot 实现命令模式- 让我们设置在 telegram bot 中使用命令的正确方法。到目前为止,有几支球队。
  4. [功能] JRTB-1:添加存储库层- 这是最大的任务之一 - 它结合了使用数据库所需完成的所有操作。
  5. [功能] JRTB-5:作为用户,我想将组添加到订阅中- 这已经是敏捷理解中的第一个用户故事。这对我们的用户来说将是一个真正的好处:可以向机器人添加群组订阅。
  6. [功能] JRTB-12:实现发送有关新文章的通知的调度- 如果新文章为每个组发布并发送给订阅该组的所有用户,这里将实现搜索新文章。
  7. [功能] JRTB-6:作为用户,我想查看我的组订阅列表- 这里一切都很简单:我们添加一个命令来显示用户订阅的所有组的列表。
  8. [功能] JRTB-7:作为用户,我想从我的订阅中删除群组订阅- 此处您需要删除用户对群组中更新的订阅。
  9. [功能] JRTB-8:作为用户,我想使用机器人将其设置为非活动状态- 实施停止机器人。也就是说,我们的系统中需要完成的所有操作才能停止工作。将 /stop 命令添加到处理中。
  10. [功能] JRTB-9:作为用户,我想开始使用机器人,或者如果我之前使用过机器人,则将其设置为活动状态- 添加 /start 命令的处理。正是我们想要的方式。
  11. [功能] JRTB-10:作为管理员,我想查看机器人统计数据- 创建机器人统计数据集合。添加管理员功能。
  12. [功能] JRTB-11:作为用户,我想查看此电报机器人的文档- 编写文档。是的,是的,朋友们,没有它你就活不下去,你越早学会这样做,对你来说就越好))
这看起来已经像是项目的开始了。可以说,我们担任项目架构师和业务分析师。

填写存储库

在开始编码之前还需要做什么? - 作者,你能添加多少这样的段落,你把它们从深渊中拉出来了吗?——不,工作的好坏是从细节中体现出来的。它们是有意义的。 让我们再添加一个细节。为了使该项目变得流行并被其他开发人员理解,需要填写它。我应该添加什么?我在文章优化 GitHub 上的项目工作:了解 Github 模板存储库 中描述了可以执行的操作的完整列表。我强烈推荐阅读它。对我们来说,拥有清晰的版本控制、清楚地了解我们正在做的事情非常重要。因此,我添加了一个 RELEASE_NOTES 文件,其中将记录对项目的更改。作为一个例子,您可以查看我的项目中的 RELEASE_NOTES(是的,为什么不展示我投入的精力和创造力)。其中描述了每个新版本的更改。我还添加了用于创建新任务的模板,其中有 4 个选项:
  • 错误报告是由在工作中发现错误的用户/测试人员创建的任务。这是一件非常重要的事情:它有助于管理错误修复;
  • 功能请求是添加新功能的任务。项目中的所有首要任务都是功能请求任务;
  • 改进请求- 改进应用程序操作的任务。例如,在使用机器人时更改测试答案。我不是技术作家,我不能给出完全正确的答案。所以如果你有这个愿望和能力,就提供吧:)
  • Question是向开发者询问有关应用程序操作的问题。非常有用的东西。假设对作品不了解或者对某个问题有疑问——你可以通过这种方式提出问题并得到第一手答案。
如果您查看 GitHub,它看起来就像这样:Java项目从A到Z。项目规划:测量七次-切割一次-8我们目前还有一份有关使用 JavaRush API 来与组合作的文档。

下一步是什么?

好吧,我们完成了所有这些步骤,然后呢,该项目将被关闭?一点都不。这个项目将继续存在。它将由我和所有想要参加的 JavaRush 学生/毕业生共同开发。你未来的计划是什么?很多。第一个计划是为 JavaRush API 创建一个 Java 客户端。开发人员承诺开放他们的 Swagger。我们还将看看什么是招摇。很酷而且非常有用的东西。接下来,我们将 JavaRush 站点与 telegram 机器人集成。让我们将用户连接到机器人以同步订阅。让我们创建课程完成情况的统计数据。以及 JavaRush 社区您想要的一切。

结论

今天我们聊聊项目创建前的幕后工作。或者更准确地说,是关于如何制定工作计划,否则您可能会浪费大量精力。我再说一遍,该项目的开始部分已经在这里公开了。像往常一样,我建议您订阅我在 Github 上的帐户。这样您就可以在文章发布之前收到项目的更改。我已经假设所有感兴趣的各方都已在 Github 上注册。是的,该项目的进展速度没有我们希望的那么快。然而,就像工作中的真实项目一样。在下一篇文章中,我将描述添加第一个任务。感谢大家的阅读,很快再见!

该系列所有材料的列表位于本文开头。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION