公司准备重构 App,请问一下现在最流行的架构是什么?

2022-02-11 12:20:50 +08:00
 silencelixing

如题,重构 App 可选的方案太多了,不知道如何下手。 Jetpack MVVM ? Compose ? Kotlin flow ? 准备选一个当前最流行的架构,大佬们有没有模板项目推荐的?

19542 次点击
所在节点    Android
67 条回复
Bijiabo
2022-02-11 18:10:51 +08:00
@CommandZi 严重同意,Flutter 就算了吧哈哈哈
cora1n
2022-02-11 18:21:27 +08:00
可以参看下官方的 MAD 相关文章,我最近刚用 MAD 重写了一个老旧的 Android 项目,用到了以下技术栈,感觉蛮好的,有兴趣可以加 vx 讨论下,VzY2MTc5OTI=。

1. Lang: Kotlin
2. UI: JetPack Compose
3. DI: Hilt
4. Arch: MVI + Domain
5. Async: Coroutine + Flow
silencelixing
2022-02-11 18:30:37 +08:00
@Bijiabo #40 一看就是专业 RN 开发了,说的很到位。我谈到的一些问题确实也可以找到解决方案,不过寻找解决方案也需要成本。之前选择 RN 作为技术方案是历史遗留问题,这次因为要重写 App ,布局交互全部是崭新的一套,考虑到项目的 native 功能较多,扩展性和人员的专业性,可以重新选择技术方案的情况下,我们才决定用原生。
Hanggi
2022-02-11 18:41:26 +08:00
@CommandZi
闲鱼垃圾跟 Flutter 有什么关系?
你访问了一个 java 写的网站很卡你是不是要说 java 垃圾?
你街上看到一个人在你面前吐痰是不是要说天朝人垃圾?

你要说屎得说到点上,拿几个垃圾 App 举例明显没啥说服力。
mxT52CRuqR6o5
2022-02-11 20:06:48 +08:00
我看了看楼主罗列的 RN 开发遇到这些问题,all in native 这个决策没什么问题的,不过罗列的有些理由其实 RN 是有好的解决方案的
RN 手势的话有 react-native-reanimated 和 react-native-gesture-handler 可以弥补原生提供的手势&动画能力不足的问题,开发出原生性能的手势&动画,不过抽象的比较蛋疼,复杂的效果写起来相当耗费心智,建议有复杂手势&动画需求还是用 RN 以外的方案
体积的问题据说当界面多到一定程度,RN 对体积是有正收益,不过我也没什么具体概念
说 RN 元素控件没有 id 是不对的,RN 的原生控件每一个都有 testID 属性,就是专门供测试使用的
像 RN 、Flutter 这种跨端框架要么就 all in (没提供的 native 能力就封装好,不要混用),要么就不要用,native 和跨端框架共存开发起来是很痛苦的
BigDogWang
2022-02-11 20:10:13 +08:00
@Hanggi 不过 flutter 在 iOS 上的体验确实有点糟糕。我就是 flutter 开发者。UI 上很多细节跟原生差很多。不过能用就是了
CommandZi
2022-02-11 20:24:50 +08:00
@Hanggi 能举个用 Flutter 开发的优秀的 iOS App 例子吗?
MakHoCheung
2022-02-11 20:50:39 +08:00
根据原生遇到的坑肯定比跨端的少,Jectpack Compose/SwiftUI 加起来的开发效率应该跟 Flutter 差不多?
toacnme
2022-02-12 00:45:00 +08:00
@Bijiabo 说的都在点上,随便再插一句,上面说的缺陷现在已经解决了很多,很多都不是问题。
比如,第四点手势和动画这方面,现在使用 react-native-gesture-handler + react-native-reanimated 基本可以完全可以解决。第七点长列表的话,也有个 recyclerlistview 的 js 实现,https://github.com/Flipkart/recyclerlistview ,实测性能还是不错的。
涉及与原生端通信的话,在 RN Fabric 新架构之后,已经很少有和宿主平台进行 JSON 序列化的通信了,都是用 JSI 直接获取,而且如果你们团队有会 C++ 的话,那就再合适不过了,直接用 JSI 和 C++ 通信,速度真的不比原生差很多,具体可以体验一下 https://github.com/mrousavy/react-native-vision-camera 这个库,你会满意的。
toacnme
2022-02-12 00:51:59 +08:00
@CommandZi 每次用 iOS 打开 Flutter 的软件,分分钟想关掉,到现在应该不支持高刷,ScrollView 的 bounce 效果感觉每个 App 体验都不一样。
闲鱼现在正在用原生改以前 Flutter 留下的坑,吹 Flutter 的还是不少。
Hanggi
2022-02-12 01:34:39 +08:00
@CommandZi
不是举例的问题,你就算用过 100 个 Flutter 做的 App 都很屎,也无法得出 Flutter 垃圾的结论。
你可以说你用 Flutter 做的 App 遇到过哪些问题,让你的体验不太好。
而且 Flutter 生成的就是原生 App ,体验不好大概率还是开发问题。

虽然 github star 数不是绝对的,但是 13 万 star 说明他还是收到人很多人的认可。
就像很多人骂 Vue 抄袭,但是 10 几万 star 也能说明,他确实对很多人受用。
wobuhuicode
2022-02-12 02:02:11 +08:00
跨端框架无非就两个用处:KPI 和外包。
Bijiabo
2022-02-12 02:21:17 +08:00
@Hanggi Flutter 是基于 Skia 绘制,控件不是使用的原生控件。我作为一个用户的感觉,Flutter 的 ScrollView 的惯性和 bounce 效果令我感到不舒适,与系统体验不一致,非常明显。
zpf124
2022-02-12 11:10:04 +08:00
看到最后一条楼主的附言我说一句,不是楼主走偏了,而且强 native 功能依赖的如今属于小众需求了。
而互联网范围内 app 的功能大多只需要替代网页访问就好。使用不到太多的 native 功能。包括外国的 fb 、twitter 、也一样,大多数 app 都是内容展示类的,他们需要的 native 功能主要就是摄像头和定位。

比如我曾经接触的一个组,他们是给学校卖物联网教学方案的,定制开发板镶嵌一个屏,装了安卓系统,但应用实际全是 c++写的。界面都是 qt 。因为他们天天搞的熟悉的就是那些,并且还会有一些红外烟感光感之类的非手机硬件设备需要写代码调用。
zpf124
2022-02-12 11:10:45 +08:00
而且强 native -> 而是强 native
moshou
2022-02-12 13:07:06 +08:00
我觉得 Flutter 好一些,用了 1 年多,开发成本低很多,效率也不错,bug 也少。

看到楼上有反驳说 Flutter 体验不好的,这个还是看你侧重点了。

我看举的例子是闲鱼和懂车帝不行,但 App 下载量 /注册量的增加和减少,是因为用了 Flutter 吗。
matatabi
2022-02-12 14:20:12 +08:00
首先排除 rn ,跨端首选 flutter ,没有跨端需求上原生
bclerdx
2022-02-12 14:55:20 +08:00
用原生开发吧。
SmaliYu
2022-02-12 15:16:00 +08:00
回到原来的问题上,这两年 Android 框架流行的也就两三种吧,公司的项目还在用 MVP ,其他人 MVVM 带或不带 databinding 都有用,个人项目 MVC 也没啥问题。kt 和 compose 目前依然不是主流,虽然个人用起来很爽,但不建议带到公司项目里。总而言之降低项目学习和维护成本,便于调试,少给自己找事儿才是正解。
KainyGuo
2022-02-12 23:51:07 +08:00
具体还是看业务场景吧。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/833167

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX