[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7493":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":26,"discoverSource":27},7493,"coolweatherjetpack","guolindev\u002Fcoolweatherjetpack","guolindev","酷欧天气的Jetpack版本实现，采用了MVVM架构。",null,"Kotlin",2257,449,28,6,0,2,29.96,"Apache License 2.0",false,"master",true,[],"2026-06-12 02:01:40","# 酷欧天气Jetpack版\n酷欧天气的Jetpack版本实现，采用了MVVM架构。\n\n这里我先给出一张酷欧天气Jetpack版的架构设计图，这张图是模仿Google Codelabs的Sunshine项目画出来的。拥有良好架构设计的项目都是可以用简洁清晰的架构图表示出来的，而一个杂乱无章没有架构设计的项目则很难用架构图表示出来。\n\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fguolindev\u002Fcoolweatherjetpack\u002Fmaster\u002Fimages\u002Farchitecture.jpg\" width=\"750\" \u002F>\n\n上述架构图可能一开始看你会找不着重点，其实这张架构图非常清晰，我来带大家解读一下。\n\n首先我们通过这张架构图成功将程序分为了若干层。\n\n绿色部分表示的是UI控制层，这部分就是我们平时写的Activity和Fragment。\n\n蓝色部分表示的是ViewModel层，ViewModel用于持有和UI元素相关的数据，以保证这些数据在屏幕旋转时不会丢失，以及负责和仓库之间进行通讯。\n\n黄色部分表示的是仓库层，仓库层要做的工作是自主判断接口请求的数据应该是从数据库中读取还是从网络中获取，并将数据返回给调用方。如果是从网络中获取的话还要将这些数据存入到数据库当中，以避免下次重复从网络中获取。简而言之，仓库的工作就是在本地和网络数据之间做一个分配和调度的工作，调用方不管你的数据是从何而来的，我只是要从你仓库这里获取数据而已，而仓库则要自主分配如何更好更快地将数据提供给调用方。\n\n接下来灰色部分表示是的本地数据层，实现方式并不固定，我使用了\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FLitePalFramework\u002FLitePal\" target=\"_blank\">LitePal\u003C\u002Fa>来进行数据持久化处理，你也可以使用别的框架。\n\n最后红色部分表示的是网络数据层，这里使用了Retrofit从web服务接口获取数据。\n\n借助这张架构图，我想会在很大程度上便于大家理解酷欧天气Jetpack版这个开源项目，而如果你自己编写的项目也能尝试画出这样一张架构图，那么你的代码结构一定是非常不错的。\n\n另外对于这张架构图我还有必要再解释一下，图中所有的箭头都是单向的，比方说WeatherActivity指向了WeatherViewModel，表示WeatherActivity持有WeatherViewModel的引用，但是反过来WeatherViewModel不能持有WeatherActivity的引用。其他的几层也是一样的道理，一个箭头就表示持有一个引用。\n\n还有，引用不能跨层持有，就比方说UI控制层不能持有仓库层的引用，每一层的组件都只能和它的相邻层交互。\n\n大概就介绍这么多吧，剩下的就靠大家自己去阅读源码进行学习了。\n\n项目运行截图如下：\n\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fguolindev\u002Fcoolweatherjetpack\u002Fmaster\u002Fimages\u002FScreenshot_1.png\" width=\"250\" \u002F>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fguolindev\u002Fcoolweatherjetpack\u002Fmaster\u002Fimages\u002FScreenshot_2.png\" width=\"250\" \u002F>\n\n最后，希望这个项目能够帮助大家更好地学习Jetpack，更好地学习MVVM架构。\n\n学习更多的Android技术知识，请关注我的微信公众号：\n\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fguolindev\u002Fbooksource\u002Fmaster\u002Fqrcode.jpg\" width=\"250\" \u002F>\n","酷欧天气Jetpack版是一个采用MVVM架构实现的天气应用。项目使用Kotlin语言编写，核心功能包括通过Retrofit从网络获取天气数据，并利用LitePal框架进行本地数据持久化处理。其设计遵循严格的分层原则，包含UI控制层、ViewModel层、仓库层、本地数据层和网络数据层，确保了各组件间职责清晰且解耦良好。这种架构特别适合需要频繁更新UI并保持状态的应用场景，如新闻阅读器、在线购物等。同时，该项目也作为学习Jetpack库与现代Android开发模式的良好示例。","2026-06-11 03:12:45","top_language"]