2019独角兽企业重金招聘Python工程师标准>>>

App架构设计经验谈:展示层的设计

三层架构中,数据层和业务层都已经做过了简单的分享,最后,就剩下展示层了。本篇就给各位分享下我在展示层设计方面的一些经验心得。

展示层是三层架构中最复杂的一层了,需要考虑的包括但不限于界面布局、屏幕适配、文字大小、颜色、图片资源、提示信息、动画等等。展示层也是变化最频繁的一个层面,每天改得最多的就是界面了。因此,展示层也是最容易变得混乱不堪的一个层面。一个良好的展示层,应该有较好的可读性、健壮性、维护性、扩展性。

三原则

我在Android项目重构之路:界面篇中提到过三个原则,要设计好展示层,至少需要遵循好这三条基本的原则:

  1. 保持规范性:定义好开发规范,包括书写规范、命名规范、注释规范等,并按照规范严格执行;

  2. 保持单一性:布局就只做布局,内容就只做内容,各自分离好,每个方法、每个类,也只做一件事情;

  3. 保持简洁性:保持代码和结构的简洁,每个方法,每个类,每个包,每个文件,都不要塞太多代码或资源,感觉多了就应该拆分。

关于这三个原则详细的解说,界面篇已经讲过的,我这里就不再重复。在此,我只做些补充。

关于规范,Android方面,我已经分享过一套Android技术积累:开发规范,主要分为书写规范、命名规范、注释规范三部分。iOS方面,苹果已经有一套Coding Guidelines,主要属于命名方面的规范。当我们制定自己的开发规范时,首先就要遵守苹果的这份规范,在此基础上再加上自己的规范。

最重要的不是开发规范的制定,而是开发规范的执行。如果没有按照开发规范去执行,那开发规范就等于形同虚设,那代码混乱的问题依然得不到解决。

另外,Android系统本身已经对资源进行了很好的分离,字符串、颜色值、尺寸大小、图片、动画等等都用不同的xml文件定义。而iOS系统在这方面就逊色很多,只能自己实现,其中一种实现方案就是通过plist文件的方式实现和Android一样的机制。

工程结构

工程结构其实就是模块的划分,无非分为两类:按业务划分或按组件划分。

比如一个电商App,可能会有首页、附近、分类、我的四大模块,工程结构也根据这四大模块进行划分,Android可能就分为了四个模块包:

  • com.domain.home 首页

  • com.domain.nearby 附近

  • com.domain.category 分类

  • com.domain.user 我的

同样的,iOS则分为四个分组:home、nearby、category、user。

之后,每个模块下相应的页面就放入相应的模块。那么,问题来了,商品详情页应该属于哪个模块呢?首页会跳转到商品详情页,附近也会跳转到商品详情页,分类也会跳转到商品详情页,用户查看订单时也能跳转到商品详情页。有些页面,并不能很明显的区分出属于哪个模块的。我接手过的,按业务划分的二手项目中(即不是由我搭建的项目),我要找一个页面时,我认为应该属于A模块的,但在A模块却找不到,问了同事才知道在B模块。类似的情况出现过很多次,而且不止出现在我身上,对业务不熟悉的开发人员都会出现这个问题。而且,对业务不熟悉的开发人员开发新的页面或功能时,如果对业务理解不深,划分出错,那也将成为问题,其他人员要找该页面时更难找到了。

因此,我更喜欢按组件划分的工程结构,因为组件每个人都懂,不管对业务熟不熟悉,查找起来都明显方便很多。Android按组件划分大致如下:

  • com.domain.activities 存放所有的Activity

  • com.domain.fragments 存放所有的Fragment

  • com.domain.adapters 存放所有的Adapter

  • com.domain.services 存放所有的Service

  • com.domain.views 存放所有的自定义View

  • com.domain.utils 存放所有的工具类

iOS的分组则大致如下:

  • controllers 存放所有ViewController

  • cells 存放所有Cell,包括TableViewCell和CollectionViewCell

  • views 存放所有自定义控件或对系统控件的扩展

  • utils 存放所有的工具类

基类的定义

Android的Activity、Fragment、Adapter,iOS的ViewController,分别定义一个基类,将大部分通用的变量和方法定义和封装好,将减少很多工作量,而且有了统一的设置,也会减少代码的混乱。比如我在Android项目重构之路:实现篇中提到的KBaseActivity和KBaseAdapter的实现就是例子,当然还可以抽离出更多变量和方法。

每个Activity的onCreate()方法,一般分为三步:

  1. 变量的初始化;

  2. View的初始化;

  3. 加载数据。

因此,其实可以将onCreate()方法拆分成三个方法:

  1. initVariables()

  2. initViews()

  3. loadData()

在基类中将这三个方法定义为抽象方法,由子类去实现,这样,子类就不需要实现onCreate()方法了,只要实现更细化的上述三个方法即可。

iOS的ViewController也是同样的方式,这里就不重复了。

转载于:https://my.oschina.net/u/2394328/blog/634394

App架构设计经验谈:展示层的设计相关推荐

  1. moodle架构分析---数据连接层的设计

    1.数据连接抽象类ADOConnection Moodle支持Mysql.Oracle.Sql Server等多种数据库.由于不同的数据库操作有所不同,为支持多种数据库,Moodle定义了数据库连接抽 ...

  2. 小型三维引擎设计实现-渲染层的设计总结

    1 设计目标: 1.1: 易于开发,对渲染API做抽象,向上层提供更容易使用的接口, 另外还可以扩充渲染API功能,比如增加自定义GLSL常量, GLSL结构体,GLSL公用函数,自定义GLSL un ...

  3. 响应式网页设计教程:展示响应式设计的基本原理

    响应式网页设计,毫无疑问地变得越来越重要了.如果你还没听说过响应式设计,可以先看看我之前发的文章响应式网站.对新手来说, 响应式设计听起来可能会有点复杂, 但事实上,它比你想象的简单得多.为了让你能快 ...

  4. APP架构设计经验谈:接口的设计

    APP架构设计经验谈:接口的设计 原创文章,转载请注明:转载自Keegan小钢并标明原文链接:http://keeganlee.me/post/architecture/20160107微信订阅号:k ...

  5. App架构设计经验之谈

    App架构设计经验之谈 1.接口的设计 1.1安全机制的设计 由于App的接口大部分采用RESTful架构,而RESTFul最重要的一个设计原则-客户端与服务器的交互的无状态性,所以,当涉及到用户状态 ...

  6. 出口-汇聚-接入层组网设计

    目录 出口组网设计: 汇聚层组网设计 接入层组网设计 出口组网设计: 对于中型的商超.普教场景,网络规模较大,推荐出口采用防火墙双机组网,出口的链路推荐多运营商链路备份. 出口网关设备需要部署的主要功 ...

  7. App架构经验总结(转)

    App架构经验总结(转) 原文链接: http://keeganlee.me/post/architecture/20160303 架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同 ...

  8. 漫谈软件架构:APP架构总结

    App架构经验总结      架构因人而异,不同的架构师大多会有不同的看法:架构也因项目人异,不同的项目需求不同,相 应的架构也会不同.然而,有些东西还是通用的,是所有架构师都需要考虑的,也是所有项目 ...

  9. iOS APP 架构设计

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 转自:掘金 iOS一叶 https://juejin.cn/post/69816998875491205 ...

最新文章

  1. Android GL deadlock timeout error
  2. solarized for securecrt
  3. 交叉验证(Cross Validation)方法思想简介
  4. 2.1.5 操作系统之线程概念与多线程模型
  5. flutter FadeTransition实现透明度渐变动画
  6. 解决Ubuntu系统终端运行python文件报错“ImportError/ModuleNotFoundError:No Module named xx”
  7. Android 2.3 版本中链接边框问题解决
  8. linux下文本处理
  9. JSP九大内置对象及其作用
  10. 交付管理——怎样推动项目验收
  11. 中国各省的简称及简称的由来
  12. 视频教程-零基础Python自动化办公(漫画版)-Python
  13. 基于ThinkPHP6 + Layui + MySql实现的企业OA系统
  14. 全国计算机等级证书和职业资格证书(计算机)哪个好
  15. 目标客户画像_做营销时,如何做好目标用户群体画像?
  16. PSO算法及其对函数优化问题的处理+PSO算法改进
  17. 无线网卡驱动 Wireless AC “该设备无法启动(代码10) ”问题解决方案汇总
  18. JS编写 三角形三边求面积
  19. 武汉云数时代网络科技有限公司代运营具体需要做好哪些方面?
  20. 制作系统安装(微软操作系统系统)

热门文章

  1. 使用VC++ 显示一首诗歌
  2. ARC下带CF前缀的类型与OC类型转换
  3. php随机数、时间、字符串函数,正则,数组函数
  4. Bootstrap源码分析之transition、affix
  5. UOJ 152 汉诺塔 分治
  6. .Net 4.0 (2)
  7. android不同Activity之间的数据共享
  8. 【android】错误集锦及解决办法
  9. 摘自《读者》的哲理短句——赞美篇
  10. html测试页,打印机测试页