前言

由于工作原因,可能会被调到隔壁组。此架构为隔壁组leader设计,并不是我原创,已取得leader同意,此博文只分享我对此架构的理解。特此声明。

最近看了下Kotlin的一些语法,外加隔壁组采用非常规MVC/MVP/MVVM开发,所以写此Demo,一是为了练习Kotlin语法,二是为了尝试使用隔壁组架构进行开发。由于为了练习Kotlin语法,所以在代码的具体实现上,可能会有些“炫技”的语法。比如能用一种语法实现的功能,Demo用了两种及以上的语法。了解即可,不必深究。还有一部分“非常规”操作,比如直接就能实现的功能,具体实现上却“山路十八弯”,注意,这不属于“语法炫技”的范围!如果觉得“这里不用山路十八弯”,请往架构方面考虑。

Kotlin

这是一款壁纸应用,虽然功能比较简单,但是用Java代码实现起来还是有些代码。除去框架部分,用kotlin实现,能省很多代码。比如属性定义、finViewById、lambda、协程、闭包等等。代码的具体实现没撒好说的,还请自行查看源码。本文的重点是下个部分“服务架构设计”。

服务架构设计

由于公司产品比较多而小,并且有很多共通的功能点,现比较流行的MVC/MVP/MVVM开发模式,运用到实际开发效率不高,所以leader设计了一套开发模式供我们这些菜鸡使用。在开发/维护效率上,简直是贼高!有多高?去年Android组5个人,iOS有25+个。真正的一打五,恐怖如斯!

总体设计

  1. 以模块划分,这个可以简单理解成“模块化开发”中的模块。每个模块可以是一个页面也可以是几个页面,以业务/功能划分。
  2. 除主工程外,每个模块以aar包的形式向其他模块提供业务/功能
  3. 每个模块分为四个部分,这四个部分分别又是4个arr。
    1. Service: 业务接口定义
    2. ServiceImpl: 业务接口具体实现
    3. ViewService: UI接口定义
    4. ViewServiceImpl: UI接口具体实现
  4. 所有业务统一管理,针对到**每个**APP,在主工程Application中注册具体实现
  5. 脚本打包,代码管理

我的一些个人理解

  • 模块:不吹不黑,总体设计里就是我对模块的理解…
  • 主工程:一般代码很少,只放“主页”相关相关的几个类,甚至主页对应的service/serviceImpl都会提供相应的aar。
  • 模块四元素,四元素遵循“面向接口编程”的理念。每定义一种业务/功能时,先定义好接口规范,这样的话,在其他相似模块或者其他APP相似功能的时候,接口是不用修改的,只需要复用或者重写接口具体实现即可(开闭原则)。这样的话,还有一些好处,合作开发,AB模块通过接口调用,有效降耦合,而且AB模块的开发者并不需要知道对方具体实现。

    • Service:业务接口定义,我理解的这个模块大概相当于MVP中的P层。
    • ServiceImpl:业务接口具体实现,大概相当于P层的具体实现。P中会持有V的引用,但这里不会,Service/ServiceImpl只负责业务的定义/实现。至于之后做什么,我不管我不管。
    • ViewService:UI接口定义,定义当前模块有什么UI相关的功能/业务,比如扫码、登陆等等。
    • ViewServiceImpl:UI接口具体实现。在单APP中作用不是很大,多APP相似UI的时候,效率提升巨大。

    四元素是此框架很精髓的部分,开发效率高很大一部分是由于四元素的设计。对于不同APP差别不大的模块,可使用相同业务/UI接口,具体APP编写具体实现即可。

  • 业务管理:由于多个APP的很多业务/UI接口是差不多的,只是业务/UI实现上会有些差别,所以针对到不同的APP,注册进相应的业务/UI接口实现即可,甚至有些具体实现也是可复用的。
  • 代码管理:每个APP会有很多模块,每个模块下又有四元素,每个模块和四元素都是module/app的形式,AS每次都去构建的话,估计一次打包没个十来分钟搞不定,所以代码管理采用SNAPSHOT+AAR的形式,将每个AAR以SNAPSHOT的形式依赖,这样就不用频繁build每个module/app,每次更新,只更新相应的SNAPSHOT即可。

    我理解的大体架构大概就是上面所描述的,当然,为了解耦还会有一些其他的小技巧,不过这些无伤大雅,demo中也体现了一部分,感兴趣可以看下壁纸Demo。

壁纸APP的说明

壁纸APP有两个界面:“主页”和“预览页”,也可以理解为两个模块:“主页模块”和“预览模块”。为了图方便也为了方便读者看代码,这里没有将对网络框架的封装、Util类封装成通用AAR库,没有将预览模块写成单独的module/app,没有将每个service/serviceImpl写成单独的module/app。说来有些讽刺,比较精髓的部分居然被我一笔略过,这点读者明白即可。

碎碎念小心得

对我而言,架构这个东西说起来有些缥缈的感觉。之前照着现有的MVX模式照搬,鲜有考虑为什么要这么写?好处是什么?或者说只是看了别人的讲解-这么做有bulabula好处。但生搬硬套始终是有些生硬,自己理解甚至能设计出合理的架构才是王道。这也是我非常佩服leader的地方,我有些觉得这已经超出了“小聪明”的程度,堪称智慧了。我也在下意识提升自己这方面的能力,一起努力吧~

Demo下载

壁纸APPDemo: https://github.com/yikousamo/wallpaper

Kotlin 一种以服务为基础的APP架构及源码示例相关推荐

  1. 游戏交流社区BBS论坛APP客户端和网页服务端设计 毕业论文+前后端源码及数据库文件

    下载地址:https://download.csdn.net/download/m0_63680064/36065411 项目介绍: 游戏交流社区BBS论坛APP客户端和网页服务端设计 毕业论文+前后 ...

  2. 代驾APP小程序源码交付 所需功能大全

    生活水平的提高,使得车已经是现代人生活中不可或缺的代步工具了,但有时候因为疲劳或者是应酬喝了酒没办法继续驾车,招人代驾就很有必要了,代驾APP小程序就是这样应运而生的.代驾系统开发时,不要具备哪些基本 ...

  3. 实现app直播商城源码,先从简单的直播系统开始

    软硬件环境 ubuntu 16.04 Android Studio 2.1.3 OTT BOx with android 5.1.1 nginx 1.11.3 nginx-rtmp-module vi ...

  4. 微服务开源框架TARS的RPC源码解析 之 初识TARS C++服务端

    作者:Cony 导语:微服务开源框架TARS的RPC调用包含客户端与服务端,<微服务开源框架TARS的RPC源码解析>系列文章将从初识客户端.客户端的同步及异步调用.初识服务端.服务端的工 ...

  5. 网上超市app开发现成源码对接

    网上超市app开发,网上超市app开发现成源码,网上超市app开发源码对接.针对很多人而言,便捷的消费方法,能让客户寻找自已必须的产品.网上超市APP开发设计产品,客户可以网上购买酒水饮品.日用百货商 ...

  6. 云原生服务网格Istio:原理、实践、架构与源码解析

    华为云原生团队600多页的Istio实战精华总结,云原生服务网格Istio:原理.实践.架构与源码解析的电子书. 图书介绍 <云原生服务网格Istio:原理.实践.架构与源码解析>分为原理 ...

  7. RocketMQ源码(十)—Broker 消息刷盘服务GroupCommitService、FlushRealTimeService、CommitRealTimeService源码深度解析

    深入的介绍了broker的消息刷盘服务源码解析,以及高性能的刷盘机制. 学习RocketMQ的时候,我们知道RocketMQ的刷盘策略有两个,同步或者是异步: 1. 同步刷盘:如上图所示,只有消息真正 ...

  8. Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

    内容概览 1.openlayers6结合geoserver利用WFS服务实现图层编辑功能 2.源代码demo下载 效果图如下: 本篇主要是参照openlayers6结合geoserver利用WFS服务 ...

  9. arcgis xml 下载 切片_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

    内容概览 1.openlayers6结合geoserver利用WFS服务实现图层编辑功能 2.源代码demo下载 效果图如下: 本篇主要是参照openlayers6结合geoserver利用WFS服务 ...

  10. 【变色龙】app封装系统源码+完美版在售封装系统

    简介: 1.App封装 实现App封装,混合开发App,100多JS接口功能交互. 2.制作小程序 通过接口网站封装成小程序. 安装环境变色龙app封装系统源码 环境:PHP 5.6 MySQL 存储 ...

最新文章

  1. 查看ocx控件CLSID的方法
  2. 为WPF和Silverlight的Grid添加边框线
  3. 深入浅出SQL(1)
  4. matlab the installer cannot read,MATLAB安装 The installer cannot read the mwinstall.dll… | 学步园...
  5. 机器学习实战之logistic回归分类
  6. django-带签名的cookie
  7. Cocos2dx 小技巧(十五)话说ScrollView的delegate实现过程
  8. BAT54C 二极管是如何工作的?
  9. 【机器视觉】独家盘点:详解国内外34家物联网机器视觉技术企业
  10. go-cqhttp + noneBot群聊机器人 配置开发
  11. nvidia怎么查看
  12. cad图转成shp文件并把其平面坐标投影配准成大地坐标(配准针对没有底图的情况)
  13. 字节跳动半夜给员工发钱,全员沸腾了
  14. 闲鱼商品详情抓取系统开发/测试完毕,可自动采集闲鱼商品详情信息
  15. 《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感...
  16. Java 中的 T,E,K,V, 别傻傻分不清楚!
  17. 小程序.silk转MP3格式
  18. B. Combinatorics Homework(抽屉原理)
  19. 不允许声明无类型的***
  20. B. Nick and Array 简单简洁

热门文章

  1. C# Newtonsoft JArray排序
  2. 第二次作业-Steam软件分析
  3. unity3dk帧_Unity3D制作序列帧动画的方法
  4. Python学习第一弹——Python环境搭建
  5. 优化模型:钢管订购及运输优化模型
  6. 如何让firefox用上bing网页翻译
  7. 下载主题jar包并导入到idea
  8. Weblogic下载与安装
  9. creator 生成bmfont字体文件
  10. 机器人工程师入门知识框架(思维导图)