清洁分解

在本文中,我想考虑一种使用“清理体系结构”时将任务拆分为子任务的方法。

NullGravity移动开发团队遇到了分解问题,下面是我们如何解决它以及最终发生了什么。




背景知识


那是2018年秋天,我们正在为电信运营商开发下一个应用程序。 但是这次不同了。 条款非常严格,并且与客户的营销活动相关。 Android团队从3名开发人员成长为6-7名开发人员。 在sprint中承担了几个任务,问题是如何有效地分解它们。

当我们有效讲话时,我们的意思是:

  1. 并行任务的最大数量。
    这样就可以占用所有可用资源。
  2. 减少合并请求的大小。
    它们不会被显示,您仍然可以在代码审查阶段发现潜在的问题。
  3. 减少合并冲突的数量。
    任务将更快地执行,并且无需将开发人员切换到冲突解决方案。
  4. 收集时间费用统计信息的机会。
  5. 在Jira中自动创建任务。


我们如何解决这个问题?


我们将所有子任务分为以下类型:

  • 资料
  • 空的
  • 用户界面
  • 自订
  • 整合性


数据和域对应于Clean Architecture中的层。
空,UI,项目和自定义是指表示层。
集成适用于域和表示层。


图1.任务相对于Clean Architecture层的位置

让我们分别查看每种类型。

资料


DTO,API,与数据库,数据源等配合使用的说明


存储库界面,业务模型描述,交互器。

数据层中的存储库接口也已实现。
乍看之下,这种有点不合逻辑的分离使得尽可能地隔离数据和域类型的任务成为可能。

用户界面


创建基本的屏幕布局和其他状态(如果有)。


如果屏幕是元素列表,则需要为每种类型创建一个模型-项目。 要将Item映射到布局,您需要AdapterDelegate。 我们使用委托适配器概念,但进行了一些修改
接下来,创建一个在PresentationModel中使用列表项的示例。

空的


ui或item等任务所需的基本类:PresentationModel,Framgent,布局,DI模块,AdapterDelagate工厂。 绑定接口和实现。 在屏幕上创建一个入口点。

任务的结果是应用程序屏幕。 它包含工具栏,RecyclerView,ProgressView等。 也就是说,常见的接口元素,其添加可能会被不同的开发人员复制,并导致不可避免的合并冲突。

自订


非标准UI组件的实现。

需要使用其他类型来将新组件的开发与UI类型的任务分开。

整合性


域和表示层的集成。

通常,这是最耗时的任务之一。 有必要减少两层并完善在先前阶段可能遗漏的点。

任务顺序


冲刺开始后,可以立即启动数据,空白和自定义等任务。 它们独立于其他任务。

域任务在数据任务之后执行。

空任务后的ui和item任务。

集成任务是最后要完成的任务,因为它需要完成所有先前的任务。


图2.时间线任务执行

尽管某些任务被其他任务阻止了,但它们可以同时启动或稍有延迟地启动。 这些任务包括域,用户界面和项目。 因此,加快了开发过程。


图3.用锁执行任务的时间表

对于每种特定功能,任务集可以有所不同。
可能有不同数量的任务为空,用户界面,项目和集成,并且某些类型可能根本不存在。

流程自动化和统计信息收集


要在创建任务时收集统计信息,请为其分配标签。 将来,这种机制将使您能够分析每种类型所花费的时间,并形成平均成本。 收集的信息可以在评估新项目时应用。

对于自动化,我们还设法找到了解决方案。 由于任务是典型的,因此为什么它们在Jira中的描述应该有所不同。 我们开发了用于摘要和描述的模板。 最初,它只是一个json文件,该文件的Python解析器,并且连接了Jira REST API来生成任务。

以这种形式,脚本持续了将近一年。 如今,它已变成使用PyQt和MVP架构以Python编写的功能完善的桌面应用程序。

也许MVP开销很大,但是当Tkinter上的第一个版本使MacOS版本10.14.6崩溃且并非所有团队都可以使用该应用程序时,我们很容易在半天之内就重写了PyQt的视图,并且可以正常工作。 我们再次确信,即使对于如此简单的任务,使用架构方法也有其优势。 JiraSubTaskCreator的屏幕截图如图4所示。


图4. JiraSubTaskCreator主屏幕

结论


  1. 我们已经开发出一种方法,可以将任务分解为彼此最小相关的子任务。
  2. 生成用于描述任务的模板;
  3. 我们收到了小的合并请求,这使得可以单独仔细地检查和更改代码
  4. 减少了与合并请求的冲突次数;
  5. 我们有机会更准确地评估和分析在每种任务上花费的时间;
  6. 日常工作的自动化部分。

Source: https://habr.com/ru/post/zh-CN466223/


All Articles