在本文中,我将探讨进入具有既定体系结构的项目的门槛问题,并给出几个选项来回答一个非常常见的问题: 为什么这么难?
这个问题经常出现在参加该项目的新移民中。 或者在某些情况下项目需要新手进行支持和开发,而新开发人员也有这个问题。 而且很少有人尝试找出造成这种情况的真正原因,而不是其他原因。 这可能会给业务带来可悲的后果,例如,新开发人员可能坚持要求从头开始重写整个应用程序。
为了最大程度地减少此类风险,而不是问为什么如此困难? 提出这样的问题:
- 架构师对开发过程提出了哪些要求?
- 输出所需的开发过程是什么?
开发过程要求
首先,开发人员必须深入研究开发过程的系统,他必须提出以下问题:
通常在自定义开发中,将输入具有明确需求和固定功能集的项目。 它们的精细程度已经是另一篇文章的主题。 并且此类项目的开发过程通常是根据瀑布式系统构建的,因为它涉及产品用户的直接反馈- 在开发产品的整个功能之后 ,而使用迭代模型,则可以在第一次迭代后获得反馈。 对于此类项目,架构师通常已经具有满足该过程某些要求的既定体系结构。 架构师对这样的开发过程有什么要求?
1)开发人员的管道开发过程应尽可能复杂 。 并且拒绝进入项目存储库的代码应该自动进行,并且在可能的情况下,在没有建筑师自己参与的情况下,也应尽可能地进行拒绝。
即 在此过程中必须配置特定的管道 。 经过整个流程的代码被认为是令人满意的。 这很重要,因为 一个好的架构师需要使他的开发人员免于头痛,并且不必承担代码进入存储库后不进行汇编的责任。 如果没有这样的管道 ,开发人员将承受不断的压力。 如果代码进入存储库,并且管道接受了该代码,并且该代码破坏了程序集或损坏了已经正常工作的功能-这已经是管道本身的问题。
因此,在这样的管道中,必须使用:
- 许多静态代码分析器
- 自动化测试和金字塔一致性测试
- 通过测试自动计算代码覆盖率
- 编码质量的网关(质量门)。 对于所有类型的指标:带有测试的代码覆盖率,代码重复的百分比,代码气味,安全性,错误等。
- 交叉代码审查
- 等
所有这些观点共同导致了开发人员的问题: 为什么这么难?
例如,尝试为此代码编写测试:
class SomeService( private val restApi: SomeApi
您将必须在真实的android设备或仿真器上运行此类测试。 这将立即导致开发流程的第二个需求大幅减少:
2)自动化管道元素和开发过程应尽快执行
如果您的开发人员必须等待很长时间才能完成测试-这是您的管道问题,并且如果体系结构不允许加快此过程-这是您的体系结构的问题
让我们重写示例:
interface SomeApi { fun loadSomething(): Single<NetworkResult> } class NetworkSomeApi : SomeApi { override fun loadSomething(): Single<NetworkResult> { } } class SomeService( private val restApi: SomeApi
我们发现代码的复杂性有所增加,但是从开发过程的角度来看-我们使体系结构更加灵活,现在我们不必在模拟器或设备上为map
块运行业务逻辑测试,只需在快速测试中运行它们即可。 这将减少需要在慢速环境中运行的集成测试的数量。
架构师选择的设计模式可以减少昂贵的集成测试的次数。 不要偷懒并处理当今流行的模式: MVP , MVVM , MVI 。
让我们再谈谈应用程序中的导航。 我们还希望能够对其进行测试,并在快速测试中对其进行测试。 同样,我们得到了体系结构的“复杂性”,因为我们必须将导航系统隐藏在抽象背后的应用程序中。
我们还希望能够使用DI连接我们系统的组件,构建依赖图并在项目编译阶段而不是在运行时检查其正确性。 然后Dagger 2及其巨大的组件和带有模块的子组件出现在舞台上,这最终使可怜的初学者感到困惑。
对于初学者来说,架构“复杂”的这种显而易见的时刻积累了很多。 自然地,如果不了解开发过程和这些过程的需求,它们会有相同的问题- 为什么如此困难?
开发过程的结果
为了评估内置开发过程的成功以及间接评估项目体系结构的成功,有必要分析其结果。 通常,结果是一个产品(如果我们在谈论移动开发,则是一个应用程序)。 每个人的产品成功度量标准都不同:客户拥有相同的度量标准,开发人员拥有自己的度量标准,产品用户拥有自己的度量标准。
至少,作为为开发过程创建管道的架构师,在评估公司指标和业务指标的开发过程的有效性时应考虑。
这是一个持续的过程:开发->收集指标->结果分析->对开发过程进行必要的修改。

因此,结果影响开发过程的形成,而开发过程已经影响了项目体系结构的变化。 即 我要传达的重要思想是架构是次要的,主要的结果和开发过程 。
结论
最后,让我们再说一遍:
- 在不了解开发过程和这些过程的要求的情况下,开发人员会感到复杂的项目体系结构。
- 体系结构是次要的,主要的结果和开发过程;
在不了解这些内容的情况下,开发人员可能想要从头开始并重写所有内容。 我认为,只有在开发过程和结果不能完全满足开发客户的要求时,才有理由。
对于初学者,我建议您着手进行完善的开发。 进入此类项目的门槛很高,但如果超过此门槛,您将认真理解如何构建开发流程。