如何优雅的写一篇安利文-以Sugar ORM为例
前言
我最近喜欢把写的十分优美的技术文章叫做安利文。首先,文章必须是原创而非软广;其次,阅读之后不仅能快速吸纳技术要点并入门开发,还能感同身受的体会作者热情洋溢的赞美和急于分享心得体验的心情,让人感觉相见恨晚,醍醐灌顶。
安利文基于技术文章但又高于技术文章,同是经验总结,但却因为作者认真的揣摩每一个标点、断句而变得优雅。一篇满是主观感受的文章却不嚼之乏味,作者用心的指出每一个需要注意的技术亮点在文字中如蛟龙戏水,让阅读者大呼过瘾。因此,我觉得能原创分享一篇技术文章精神已经难能可贵,但若能锦上添花让技术文章变得优雅,那实乃万全之事,功德之记。
赎我能力有限,无法笔下生花,恰巧前天在做一个Android项目的时候从github无意觅得sugar这个棒极了的ORM库。难忍手痒望安利之,因此摆弄一下笔墨,一方面说说我觉得程序员该如何写一篇优雅的安利文,一方面让大家知道这个真心棒呆了的库。
何为安利文
”安利文“是网络词汇,只要非标准化协议的定义,都是一件很主观的东西,我认为安利文应该具备的条件包括:
1.开源。只有开源产品才会让人硬起来,不代表竭泽而渔的获取,而是只有爱的人才会明白的一种精神(我水平低只有个star200多的开源项目,但我觉得很开心)。
2.原创。哪怕是译文,也应加入自己的主观体验。因为只有“实践是检验真理的唯一工具”,若未亲身尝试何谈赞美一说。
3.文章干净利索。1..2..3简单明了的说明怎么用,4..5..6直接了当的说明技术亮点。不要从“今天坐地铁遇上个黑丝大波妹”开始,"这个项目做完老板加班费都不给"结尾,只谈技术。
4.有领域经验,有自己的见地,能一针见血的指出安利对象让人爱不释手的理由。阅读者不乏入门开发者,若没有起码2个以上的项目经验,拿着一个自己用过的东西就疯狂的写上我爱它,但有其他更优秀的轮子能替代,若无人评论中指出,岂不贻人之时。
5.毫不掩饰自己的喜悦之情。若你对自己推荐的轮子没有信心,那如何向其他人证明这确实就是右转就再永远错过的佳作?根本不用左的保守表达来诉说你运用过程中体会到的兴奋、快感,就是应该让阅读者感同身受。
如何优雅的写
“优雅”一词我见于技术类文章,最早是在学习laravel文档的时候看到的。看过文档的人态度非常两极:爱的不要不要的和骂的不要不要的。我非常理解为何会有人骂,读laravel文档的心态和受MSDN传统教育刻板挑错别字的阅读心态完全不同:读起来感觉很轻,措辞用起来像软广。说一个开源项目发软广,肯定是门户之争、轮子忠诚的事,但这也算安利文的乐趣和精华之一,从评论中可以了解更多的经验教训,而这些都是建立在大拿们无私分享经验基础上的。因此,“优雅”的写,引发一场争论,反而是一件值得庆幸的事。
“优雅”带有很强烈的资产阶级文艺小资派气息,要习惯装的像个文青,大胆“优雅”的去写安利文。下面,我说说我认为应该如何优雅的写:
1.读起来像机翻。“令人激动的新特性”、“可能是XXX”、“值得去深入探究”、“超乎想象的极致”...,是不是很眼熟?细思肉麻,读来上口。用这些科技公司的广告语,总是比打开搜索引擎卖弄唐诗更实在的选择,因为虽然辞藻谈不上华丽,但却最容易让开发人员感同身受,毕竟习惯了译文的句式和用词。当然如果你能写出罗贯中的笔锋来,中文科技博客就该办个作协了。
2.一个自然段不宜过长。想表达的东西很多,很好,但你可以分为多个自然段。过长的自然段可能会降低阅读者的阅读兴趣,其实这很不好,与其说是用户体验优化,不如说是让人变懒了,不应该适用于开发人员。
3.图。一图顶百字,用Visio、XMind、UML画,太懒了QQ截屏也是不错的选择。
4.善用括号加强主观态度(就像这样,你看这里就像是和我在交心,讨厌-_-!!)。把你在描述技术点时的心得体会写进括号,阅读者能够体会到更强烈的主观印象。
5.代码处理好细节。必须格式化,markdown或者博客编辑器自带的格式化工具,没人会喜欢没有缩进的代码。尽量丰富的添加备注,这会让阅读者感动。
6.标题、小标题、加粗。这是让文章写作更简单的一件事,而不是加重你的写作负担。因为你是理科生,这更符合你的思维逻辑。如果不知道如何措辞,就像我这样用小标题1..2..3分段吧,不需要css装饰,其他开发人员会看明白的。
7.善意的吹牛逼。这会提高阅读者的心理“锚点”,就是“星巴克的拿铁卖的就必须比肯德基贵”的道理,善意的吹吹牛逼是你在表明自己对轮子忠诚度的方式,比如我就从不用dagger或者butterKnife,我公司项目全都是剪切加复制,也没见上线运行出问题(看明白了?)。
8.谦虚谨慎的自信,恍恍惚惚的放屁。天外有天,人外有人,谁一夜看得完万卷书,一碗吃得下千斤饭。千万不可自骄自傲,应该虚心接受评论里的指正,心态很有必要。但是,为了提高阅读者的阅读兴趣,插科打诨、睁着眼放屁,出现“5成的把握它会是Github上最棒的项目,5成的把握它会是Github上最烂的项目”,这种完全无意义的文字,是完全鼓励的一种行为。
9.放入草稿箱,喝杯茶再打开修改一遍。最后一点请记住,你是想写一篇引起共鸣的安利文,而不是一般的技术总结,所以重构是非常有必要的。
想到些什么,就即兴写了,其实我也是在为自己练笔,勤能补拙。本来还想安利一下我微博喜欢阅读的几个科技号,但有沾人家地气的嫌疑,看我经常转发的微博就知道是哪些了。如果让你有了第二天自己写一篇安利文的冲动,也算这篇文章没有白写。下面是自己练习写的安利文例子,希望大家喜欢。
Android数据库居然可以如此轻巧
-Sugar ORM简单指南
Android下的数据库操作一直是一个比较令人头疼的事,如果用原生编写,那么除了数据库连接、版本升级、基础查询等几个基本功能可打包复用外,业务逻辑从Schema到增删改查都必须重写一遍。而更多的时候,我项目的数据库业务逻辑其实并没有那么高的性能要求和复杂度,因此,选择一款ORM库代替,是一件极为明智的选择。
恰似柳暗花明
目前Android ORM开源项目中,最知名、应用最广泛的是GreenDAO,它出自著名的greenrobot(就是写EventBus的那群大神),常年排在Github Android ORM榜单的第一位,其优缺点网上已有众多文章深入解读,这里不再深入。
结合我自身业务需求,GreenDAO仍然显得太重了--它需要用JAVA桌面程序生成Model(其实是因为JAVA我只会android啊..这不是要我命么),因此我一直采用原生的方式处理数据库业务逻辑,直到内心崩溃。到Github又趴了一遍,结果立马就深深爱上了排名第二的Sugar ORM并立即运用到项目中。
Sugar ORM特性
简单,就是对Sugar最高的评价。KISS(Keep it simple and stupid)原则最完美的展现,需要经验丰富的代码重构才能做到。我一直是ORM的忠实拥趸者,我首先考虑快速开发,从不考虑性能。从Entity FrameWork到Eloquent ORM再到Sugar ORM,虽然Sugar没有前两者强大,但是我觉得已经足够,为什么?
先来看看Sugar的介绍里面自己是怎么说的:
A simple, concise, and clean integration process with minimal configuration.
(用最少的配置实现最简单、明了、畅快的集成过程)
Automatic table and column naming through reflection.
(采用反射的方式无须干预自动生成表和字段)
Support for migrations between different schema versions.
(支持不同版本数据库集合的迁移)
那么Sugar的集成,到底简单到什么程度呢。看看Bean的编写:
不像GreenDAO,需要专门用桌面工具生成Bean。不需要你写表创建代码,不需要写增删改查的代码(当然业务代码还是要写,他懂你的心情,不懂你的心),就是简单到这个程度。如果属性中有Drawable等不想存入数据库的字段,那么加上@Ignore就好,随心所欲。
配置2步搞定
Sugar的配置只有2处.
1.修改你的AndroidManifest.xml
如图,依此为包括数据库名称、版本、是否打开日志、你的项目包名。别忘了在application标签加上2中重载的Application类参数
2.为你的Application类添加初始化和销毁。
一个启动,一个关闭。设置好后其他都不需要操心。
想早点下班,用QueryBuilder
ORM最强大的地方体现在OOP原则的查询操作上,Sugar把增删改查都给你封好了。因为足够简单,所以就以查询为例,包含:
1.Id查询,findById
2.简单Sql语句查询,find
3.复杂Raw语句查询,findWithQuery
3.数量查询,count
复杂点的业务逻辑,写好Sql语句,用executeQuery或者findWithQuery执行,选哪个函数看你心情,开心就好。倒是有一个需要注意的坑,Sugar有一个命名规范约定,如果字段以驼峰命名法命名,需要改为下划线命名法,如“testUnderscore”需要改为“test_underscore”。不过你也不必过于担心,Sugar已经提供了函数StringUtil.toSQLName("testUnderscore"),自动帮你转换命名。
我不知道你,反正我就他了
其实在刚开始做Android开发时,用到国内大神写的xUtils框架时就已经较浅的了解ORM了,但是后来放弃坚持用原生写所有代码。由于疏于了解,只知道GreenDAO,但是用起来过于麻烦。发现Sugar之后,各种数据也不打算存Preference了,我仍然坚持不打算用Annotation库,但Sugar肯定会用在之后的每一个项目。因为简单,可以把更多的精力放在业务逻辑上,这不正是开源社区的思想么。我不知道你,反正我就他了。
相关资料
项目地址:https://github.com/satyan/sugar
文档:http://satyan.github.io/sugar/getting-started.html
P.S.
P.S.
自己在做独立开发,希望广结英豪,尤其是像我一样脑子短路不用react硬拼anroid、ios原生想干点什么的朋友。App独立开发群533838427
微信公众号『懒文』-->lanwenapp<--
如何优雅的写一篇安利文-以Sugar ORM为例的更多相关文章
- 如何写一篇好的技术博客or技术文档(转链接)
如何写一篇好的技术文档http://yunli.blog.51cto.com/831344/168352 程序员怎样才能写出一篇好的博客或者技术文章?http://www.zhihu.com/ques ...
- 再写一篇ubuntu服务器的环境配置文
三年前写过一篇,但是环境和三年前比已经发生了比较大的变化,于是重新写一篇,自己以后再次配置也比较方便.我个人而言并没有觉得centos比ubuntu好用多少,所以继续选用ubuntu. 一.硬盘分区 ...
- 第一篇——第一文 SQL Server 备份基础
原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...
- ElasticSearch查询 第二篇:文档更新
<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...
- 自学Python可以吗?怎样从入门到大师?我写这篇文章告诉你
前言 很多粉丝朋友问我该如何去学习爬虫.学习Python.自学能找到工作吗?等一系列的问题.今天我就来回答一下大家. 第一点 确定好方向与目标 当决定踏入这个行业那一刻起,我想每一个人都爱已经准备投身 ...
- 如何基于WPF写一款数据库文档管理工具(二)
系列目录 基于WPF重复造轮子,写一款数据库文档管理工具(一) 本篇重点 上次发表了基于WPF重复造轮子,写一款数据库文档管理工具(一) 得到不少人支持,文章一度上到了博客园推荐表首页,看来大家对这个 ...
- 用Markdown优雅的写文章
简介 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 简单点来说,Markdown是文本标记语言,在普通文本的基础上加了一些特殊标 ...
- Docz 用 MDX 写 React UI 组件文档
Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
随机推荐
- 机器学习六--K-means聚类算法
机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...
- FAQ-Ubuntu12.04 15.04禁止移动介质自动播放
网上有有很多关于Ubuntu10.04关闭移动介质自动播放的方法,包括在文件管理器里面设置或者使用gconf-editor,但是从12.04开始这两种方法都不再好用了,关于移动介质的处理方法被移到了S ...
- C++ inline
内联函数相对于宏的区别和优点: 宏是在预处理时进行的机械替换,内联是在编译时进行的.内联函数是真正的函数,只是在调用时,没有调用开销,像宏一样进行展开.内联函数会进行参数匹配检查,相对于带参数的宏有很 ...
- dev/shm time in linux
统计文件夹大小: du -hx --max=1 : du -sk :du -hsc 重新组织行分隔符进行显示: echo "abc,dd,bach,dong,jing,shang,china ...
- Mongodb 主从复制与副本集实验
1.实验主从复制,并验证复制成功,抓图实验过程 Step1:创建相应的目录 Mkdir -p ./dbs/master Mkdir -p ./dbs/slave Step2:开启主服务 ./bin/ ...
- 译文 对无障碍网页应用(ARIA)的选择
//本文编辑格式为Markdown,译文同时发布在众成翻译 对无障碍网页应用(ARIA)的选择 让网站对每个人都能访问是一件相当艰难的工作,尤其是在我们使用自定义标记解决方案(custom marku ...
- NOIP2008 普及组T1 ISBN号码 解题报告-S.B.S.
题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一 ...
- 【Ext.Net学习笔记】01:在ASP.NET WebForm中使用Ext.Net
Ext.NET是基于跨浏览器的ExtJS库和.NET Framework的一套支持ASP.NET AJAX的开源Web控件,包含有丰富的Ajax运用,其前身是Coolite. 下载地址:http:// ...
- [Hadoop]如何安装Hadoop
Hadoop是一个分布式系统基础架构,他使得用户可以在不了解分布式底层细节的情况下,开发分布式程序. Hadoop的重要核心:HDFS和MapReduce.HDFS负责储存,MapReduce负责计算 ...
- HDU 1892 See you~
最裸的二维树状数组,但是因为内存太大(c[1010][1010]),好像不能运行,结果蒙着写,写了好久.. 代码: #include <iostream> #include <cst ...