参考
https://my.oschina.net/u/2603356/blog/743966
http://www.tuicool.com/articles/vieU7nY
https://my.oschina.net/u/2325281/blog/659606
http://www.hello-code.com/blog/architecture/201406/3598.html