多数时候人们常说,使用 MVC、MVP、MVVM 等软件架构来开发项目,但往往忽略了一点很重要的东西,代码文件和资源文件的模块化。模块化的目录结构是对【产品需求】进行【业务类型】划分,【业务类型】包含多个【功能性模块】,用户登录注册、重置密码、会员消息这些都是属于【功能性模块】。每一个【功能性模块】的代码实现遵循常见的 MVC、MVP、MVVM 等设计方法。模块化结构目录有一个突出的优点是,满足【功能性模块】进行组合配置式打包需求,相同需求的代码只存一处,有差异化的则分开实现,再基于 Groovy 的特定领域语言来声明项目设置,需要哪些功能模块按需加入编译。基于这项改进,【CP app】和【包网app】两个项目在于一体,而又不相冲突,相同功能只维护一份代码。模块化的结构目录 + UI设计开发组件工程化 + MVC/MVP/MVVM 的组合框架才是更适合商业项目的不断迭代需求。
- Jul 31, 2018...more
API接口设计建议
Jun 8, 2018...more- 涉及数目的 JSON 字段,用 int 作为数据类型会更友好,若使用 string 类型,数目为零时,应该使用“0”,不应为””(空串)。
- 凡是金额字段的,数据值不要使用 float、double 类型,因为使用 float、double 类型时,计算之后,会有精度丢失,导致计算结果有偏差,对于货币计算是不允许的。正确的做法是使用高精度类型的,如 Java 使用的 BigDecimal。
- 图片上传不应该置换 base64 再上传,图片原始数据置换成 base64 会比原文件增加 1/3,对于大图片来说,上传耗费的流量是一个大问题。
- 图形验证码字符集建议使用 base58,避免出现字符 “Il0O” 等难以辨认的字符,提升用户体验。
- 不要破坏统一的数据结构,毫不动摇的遵循
{"code": 0, "msg": "success", data: {}},会让前端同学省很多事。 - 确认好是一个还是两个以上,有两个同类型以上的数据项应当使用数组表示,一个则不允许使用数组存储。错误的表示会让前端人员产生歧义,程序也容易出错。
- Object 类型字段默认值 null,不应为 [] 或 “”,int 类型字段默认为 0。
脚本插件中枢 BitBar
May 30, 2018...moreBitBar 是一款可以将脚本程序的内容输出显示在 macOS 菜单栏中的免费开源应用。设定好脚本存放的位置,按快捷键
Command + R可立即执行脚本程序。更实用的功能是,能设置脚本自动执行的刷新频率。设置脚本程序刷新频率的方法是按格式命名脚本文件名,格式是{插件名}.{刷新频率}.{插件名},例如:GetTlbcPlugin.1h.sh会每小时刷新一次。脚本程序还能自定义菜单栏背景色、字体、颜色,大小等属性,支持 Emoji 和图片,满足对 UI 有要求的用户。BitBar 应用的可供性取决于用户诉求和实现能力,支持 Apple Script、Python、JavaScript、CoffeeScript、Go、PHP、Lisp、Perl5 等众多语言。对于重复性的工作,转化成脚本替代低效繁琐的操作,BitBar 可以定时执行你的设定。陀螺财经 是一位朋友做的区块链媒体平台,对区块链感兴趣的同学可以关注下。陀螺财经 App 中有一种陀螺块(TLBC)的数字资产,陀螺块是基于个人在陀螺星球活动产生的奖励。陀螺块必须在 48 小时内采集,否则会停止生成。采集这些陀螺块的操作又是无趣的。问题来了,想要自动化采集怎么办?不要等,马上动手。借助抓包软件 Charles 轻松取得【获取陀螺块】【采集陀螺块】HTTP(S) API 接口,再用 Python 调用这些接口,程序每8小时自动采集。懒是一种追求,能让机器干的,人就不要动手了。
Chrome插件:初始状态输入框不获得焦点
May 19, 2018...more有一部分网站加载完成后,焦点会落在搜索框,对于使用 Chrome Vimium 插件的用户就有一个困扰,每次都需要按 ESC 键让输入框失去焦点进入正常模式。为此,写了一个 Chrome 插件,网页加载结束后,让输入框失去焦点。目前适配了百度百科、淘宝网站。
插件安装方法,将项目下载到本地,点击 【Chrome 更多菜单】 -> 【设置】->【扩展程序】-> 【加载已经解压的扩展程序】-> 【插件目录】完成安装。
生活小事与算法
May 9, 2018...more- 煮饭做菜运用贪心算法,充分利用多进程并行的优势,用最少时间完成烹煮。
- 扫地使用分治算法,分而治之,逐块解决。
- 批量处理生产效率更高,设置一缓冲区,缓冲区满时,集中进行处理。
- 收纳物品与扔东西,采用缓存淘汰算法——LRU,近期使用频率低的物品收起,扔东西也是同样如此。
- 哈夫曼编码给最常用的字符最短的编码,最常用的东西放在最显眼、最方便触及的地方。
- 调度算法
UI设计开发组件工程化
Sep 21, 2017...more介绍
在移动应用开发中,业务的不断演化,交互界面也跟着变更、改版和换肤,为了面对这种变化而带来较大的开发成本,从可维护性、复用性的角度去思考 UI 设计和项目架构组件工程化。UI 设计组件工程化设计分为三层:最小元素层、样式层、布局层,通过分层隔离的方式达到解耦、复用、较小成本应对需求的升级变化。布局层依赖样式层,样式层依赖最小元素层,最小元素层是具体基础的视觉元素。下面介绍关于这三层的划分,以及在 Android 平台上的实现。

最小元素层
最小元素是设计或编码上不可再细分的度量单位。最小元素有:主题色、背景色、高亮色、文字主颜色、文字次要颜色、分割线颜色、页面边距、可点击组件边距、不可点击组件边距……
明确了最小元素后,将这些最小元素抽离出来,赋予有意义的名称,放置在资源文件中。一般性,好的设计,最小元素的数量不会有太多。因此不用担心定义过多的最小元素。在编码过程中,使用这些最小元素通过引用资源文件预定义好的常量值,不要硬编码写死。使用与定义分开,不关心最小元素具体值,只管引用元素值的资源 ID。依赖资源 ID 的好算是,一处改动全局生效,换肤无痛。
最小元素创建
colors.xml:定义最小元素的主题色、背景色、主文本颜色、次文本颜色……
1
2
3<color name="colorPrimary">#393A3F</color>
<color name="colorPrimaryDark">#393A3F</color>
<color name="colorAccent">#31C131</color>dimens.xml:定义最小元素的页面边距、标题与内容的文本大小、圆角矩形半径……
1
2
3<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="round_rect_radius">3dp</dimen>ids.xml:定义组件 id。
1
2
3<item name="recycler_view" type="id"/>
<item name="swipe_refresh_layout" type="id"/>
<item name="msg_tv" type="id"/>strings.xml:定义字符串文件。
1
<string name="app_name">UI 组件工程化的实现</string>
macOS 优秀应用推荐
Sep 14, 2017...more快速预览(Quick Look)——一指禅
快速预览功能可以在不开启外部软件的情况下按下空格键,立即呈现文件内容或文件夹基本信息。系统本身已经支持常见文件预览功能,如各种图像、PDF、MP3、MP4、文本文件等。对于程序员而言,自然还需要更丰富的插件。Markdown、JSON、高亮显示各种语言代码、预览压缩文件中包含的内容、Android apk 安装包基本信息等。当只想查看而不修改文件时,按空格键是最佳操作,选中文件按下空格就立即弹出,相比使用程序打开要快速得多。适用于开发人员的有用的快速查看插件列表点击此链接获取。

Alfred——效率神器
Alfred 小帽子,键盘命令中枢,通过热键、关键词、文字扩展等功能来提高效率。Alfred 可以搜索 macOS 和网络,通过自定义操作更加有效地操作 macOS 。Alfred Workflow 插件,可以扩展任意功能,拥有无限自动化潜力的工具台软件,实现一切有关自动化的想法。Workflow 插件支持 PHP、Bash、Perl、Ruby、Python、JavaScript 和 AppleScript 等多种脚本语言编程。
先回想一下,你现在打开了多个应用程序,正在编程中遇到了 bug,想通过搜索引擎寻找答案,你接下来的操作会是怎样?一般的流程会是这样子,用鼠标或
Command + Tab快捷键切换到浏览器,把焦点定位到输入框输入问题按回车,等待返回结果,最后切换 IDE。在这个操作流程中,程序间的窗口切换是最耗时的,不能以常量时间精准定位应用程序,以及快速进行搜索。借助 Alfred Workflow,操作可以是这样子的。按Command + 【空格】快捷键呼出输入框,输入问题按回车,按快捷键Alt + A切换回 IDE。这一过程手指不需要离开键盘,搜索引擎的指定也是可以快速选择,程序的切换时间跟你打开的应用窗口数量、顺序、位置没有关系。