“最终用户-我们与您同在”:关于CFT中的Android开发



在2018年,即使可以使用Android Pay支付沙瓦玛币,智能手机也是用户的主要财务工具。 现在人们希望在他的帮助下解决与金钱有关的所有问题。 因此,相应的移动应用程序变得尤为重要。

对于CFT为各种客户开发的金融应用程序而言,安装总数为数百万个,也就是说,很少有人能够在此领域拥有如此丰富的经验。 利用公司出席Mobius会议这一事实,我们向Android应用程序开发小组的负责人Mikhail Emelyanov询问了几个有关CFT中Android开发情况的问题。

-首先,为那些以前从未听说过此名称的人简要介绍一下“ CFT”。

-该公司在金融科技市场已经有25年以上的历史:当它出现时,甚至还没有金融科技的概念,但是即使那时,它仍然生产这种产品和服务。 实际上,在90年代初期出现的“金融技术中心”这个名称仍然很重要,并且可以说明一切。

当然,在过去的时间里发生了很多变化(谁能想到1991年的Android?),但是本质保持不变:CFT开发和开发使金融交易变得简单便捷的IT解决方案和技术服务(包括汇款)和付款)。

该公司出现在新西伯利亚Academgorodok,其主要开发中心仍位于该处。 但是现在,除了他之外,在俄罗斯许多其他城市以及基希讷乌,阿拉木图和杜尚别都设有办事处。 增长持续:新的服务和单位不断出现,研发方向也在积极发展。

-有多少人专门从事移动开发,您能举一些在​​CFT中开发的应用程序的例子吗?

—我们在新西伯利亚,托木斯克和圣彼得堡设有一支分散的移动团队。 现在有50多人,但是该公司已经制定了移动开发计划,我们必须以两倍的速度增长以与他们匹配。

我们在iOS和Android上最受欢迎的应用是汇款 (在Google Play上的下载量超过130万), 直线玉米付款办公室。

此外,我们的网上银行提供商Faktura.ru拥有 100多个针对iOS和Android的定制移动应用程序。 Faktura.ru团队总共为公司和私人客户实施了340个在线银行项目。 通常,大约有130家银行在此技术平台上运行。

-与财务部门合作有其自身的特点-CFT中的Android开发与“普通”公司有何不同?

-由于我们使用个人数据和用户财务,因此主要规则之一是对信息保护的严格要求。 我们定期处理一些主题,例如在API级别和数据传输期间保护移动银行业务,生物特征认证,钥匙串,SSL固定等。 我们积累了许多相关经验,这就是Mobius刚提交报告“移动应用程序安全基础知识”的原因。

但是,与此同时,金融科技的移动开发并没有脱离人们对生活的渴望,因此并不能持续满足安全要求。 最终用户仍然是数百万普通普通公民。 现在,每个人都可以通过智能手机控制汇款操作-他们为服务付款,汇款。 我们的最终产品专门针对此类人群。

因此,在金融科技领域,仅从事移动开发非常有意思:事实上,最终用户与我们同在。 因此,应用程序不仅应该是安全的,而且应该尽可能简单地实现技术。 我们不是凭空创造东西,而是为消费者提供产品。

-除了保护信息之外,您还需要特别稳定:如果一家初创公司可能在生产中出现错误,那么他们期望财务方面的可靠性。 但是同时,变成缓慢的“瀑布”并协调所有内容半年也是不可能的。 您如何解决这个问题?

-首先,采用架构方法。 我们将清洁架构的思想作为标准,其原理正在实际应用中开发。 我们在划分层,单一职责和弱连接实体的框架内制作新的应用程序。

收益:使用各种技术而无需重写整个代码,通过测试获得高质量,最重要的是-简单的可伸缩性,这对我们非常重要。

我们还进行最严格的代码审查,几乎整个团队都参与其中,并且我们在审查阶段会检测到大多数困难时刻,以使它们无法投入生产。

好吧,当然是测试-我们几乎在涉及单元测试的所有地方,都有一些开发人员使用TDD方法编写代码。 当然,UI不在TDD中,但是我们也不会忘记UI测试:我们与一组测试人员一起努力确保他们尽可能有效地使用Espresso。



-由于金融科技需要保守主义,因此在某些情况下可能会干扰新技术的使用。 因此,有一个有趣的问题是:过去一年中,您在Android中尝试了哪些新功能? 顺便说一下,您到底使用什么技术?

-很多尝试。 当Google发布Android Architecture Component版本时,我们决定尝试并在其中一个新项目中实施它。 但是我们遇到了麻烦:例如,我们没有在其ViewModel中看到解决项目生命周期问题的足够有效的方法。 但是LiveData在我们看来对于表示层很有用。

在AAC的结果未能达到预期的结果之后,我们将其删除,以更有效的方法代替它。 由于采用了干净的体系结构,我们无需重做整个应用程序,因此足以优化表示层。 使用新的ORM室还有另一个示例。

我们现在正在Kotlin积极发展。 在莫比乌斯(Mobius),许多人都想知道“为什么Kotlin到处都是”,但这是乞求。 它提供了比Java开箱即用的更多功能:更少的代码,更多的功能。 单行代码可以完成很多工作,例如声明类。 现在,我们还在其中一个项目中尝试协程。

总的来说,我们喜欢Kotlin的发展方式,并且对Kotlin社区的成长感到高兴。 而且由于它已经变得如此广泛,现在,为了不发展它,人们必须有非常坚定的信念和原则。

我们还使用RxJava / RxKotlin,流行的Retrofit和Dagger 2,Google的数据绑定,我们计划尝试RxBinding,很长一段时间内所有内容都可以列出。 通常,金融科技不会干扰各种技术的发挥。

-Android体系结构组件不适合您-但是您可以向其他人推荐它们吗? 迁移到它们的资源是多么密集:长期存在的项目应该考虑一下,还是让它保持新状态更好?

“尽管AAC没有达到我们的期望,但它们在某些任务上表现出色:例如,在更改屏幕方向时保存和恢复数据。 因此,如果在具有大量遗留代码的项目中未能有效实现对更改方向的支持,那么您应该考虑使用AAC。 但是要以不幸的方式实现此功能无效,您首先需要准备架构,修复关键错误并找到集成点,以免处理整个应用程序。

-前面提到的Room是一项相当新的技术,许多人还没有时间尝试。 因此,有趣的是:您对她的经历是什么?

-房间让我们高兴。 使用注释,您可以轻松描述表的创建,定义事务等。 有对Kotlin,Rx,LiveData的内置支持。 当前稳定版本(1.1.0)的缺点是缺少用于清理数据库的命令,并且需要手动配置通信。 在Kotlin中使用Room时,仍然有些不舒服的事情,但是随着新版本的发布,他们逐渐决定了。 例如,仅1.1.0-alpha2支持接口中的默认Transaction方法。

通常,使用Room来处理数据库变得更加方便和高效。

-有一种观点“您的所有ORM都很狡猾,抽象仍在流动,您必须下降到SQL级别”-您对此有何看法?

-在任何技术中,要解决不平凡的任务,您都必须编写代码,甚至SQL。 最主要的是,这不会成为开销。 在Room中,您还可以手动编写SQL查询(例如,迁移或复杂查询),但是通过注释,这样做更加方便。 例如,您可以使用Relation从多个表中提取数据。

-由于CFT比Android本身还旧,因此“遗产”问题可能与您有关。 您经常重构吗?

-当然,遗留代码将存在于任何项目中。 流行的说法是“今天编写的任何代码,明天都会成为历史”。

我们也是如此。 有些应用程序是几年前发布的。 如果有客观原因要更改整个代码(错误,可伸缩性低,缺乏有效的技术等),那么我们可以这样做。 我们进行逐步重构,同时发布功能,这些功能由组件,层或仅屏幕来处理代码。

还在使用技术。 例如,在我们的一个项目中,Volley被用作http客户端。 该技术不是新技术,我们想切换到OkHttp + Retrofit。 为此,我们分析了项目中与其余客户端的连接,为过渡准备了架构,并一次转移到该架构,而无需花费大量时间。

-CFT开设了包括Android在内的课程,您在那里教什么? 根据您的经验,Android新手开发人员最缺乏的是什么?

-是的,CFT中有几个教育项目。 对于初中学生-SHIFT学校,我们在其框架下进行了基于NSU的基础Android开发课程。 对于高中生和大三学生-Focus Start项目,这里有6个多方向课程,包括移动开发(Android和iOS)。 Android课程程序提供了有关Android,Java,Kotlin和Rx的深入知识。 已经发布了几套,一些最好的毕业生已经成为我们的员工。

通常,新手Android开发人员缺乏使用SOLID原理OOP的经验。 有些人不了解MVC-MVP-MVVM模式与“干净架构”原理之间的区别,因此,它们会误解业务逻辑。

在Android SDK,Java,对多线程及其在Android中的实现方式的理解方面也存在差距。 好吧,最基本的:了解Rx,Dagger,翻新。 许多人不尝试阅读各种技术的文档。

但是我们的实践表明,培训密集型人员可以快速有效地弥补差距,从而可以在IT中工作。

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


All Articles