源码地址微服务开发系列:开篇服务开发系列:服务发现,nacos的一个小补充微服务开发系列:框架中如何选择开源工具微服务开发系列:数据库orm使用微服务开发系列:如何打印好日志微服务开发系列:鉴权微服务开发系列:认识序列化的重要性微服务开发系列:设计统一的http接口内容形式微服务开发系列:使用异常特性将异常纳入框架管理开发服务文档项目中使用的语言是kotlin。开发者可以根据自己的需要使用java语言开发,但是很明显,项目中的各种工具类针对kotlin做了很多修改。如果大量使用java开发,结果可能会比纯java开发慢。至于我为什么坚持使用kotlin进行开发,之前我也发表过一些文章来描述kotlin的好用,但是在使用过程中总会时不时的被kotlin惊艳到。kotlin除了完全兼容java,在架构上也能发挥很多优势。除了下面介绍的地方,下面的介绍也会涉及到。kotlin用极少的代码,通过扩展特性大大简化了java8中stream的一系列操作。比如从list到mapusers.associate{it.nametoit}的转换就省去了很多繁琐的代码。编写代码过程中对变量类型的智能推断,可以帮助你避免反复推断类型,从而迷惑自己。对于传入的匿名函数,可以避免手动创建函数对象。为了”?”空指针的操作,可以大大简化对空变量的判断和处理。等等,如果能完全掌握这样的操作,代码量还能减少好几倍。学过概率的应该明白,达到同样目的的动作越少,自然出现问题的概率就越小。设计利器来减少代码量并不是kotlin的终结。如果一个框架完全由kotlin搭建,用它的特性来督促个体开发者写出更好的业务代码,就太浪费了。Kotlin也可以帮你弥补一些框架设计上的遗憾。异常抛出以框架设计中必不可少的业务异常抛出为例。if(user.id.isNullOrEmpty()){throwSomeException("useridcannotbeempty")}这样的代码不计其数,但是通过简单的扩展特性,可以用新的合理的方式抛出异常。funBoolean.ifSome(message:String?)=throwSomeException(message)user.id.isNullOrEmpty().ifSome("useridcannotbeempty")所以除了特殊情况外,在框架的任何地方都使用这个抛出异常的方法,节省代码,可读性更高。这样,Java目前有一个工具叫Manifold,也可以在一定程度上实现这个方法。更方便的json开发在框架中封装了jackson的使用。在之前的版本中,如果你想将一个java对象转换成jackson对象,你需要像这样:valjson=Jackson.toJavaObject(user)所以在使用扩展之后,创建了一个更有用的转换逻辑。funAny.toObject()=Jackson.convertObject(this)funAny.toArray()=Jackson.convertArray(this)funAny.jsonString()=Jackson.objectToString(this)内联fun
