距离全栈,你只差一个kotlinx

全栈不能保证一定能够解决复杂的问题, 但却能帮你打开解决复杂问题的大门.

距离全栈,你只差一个kotlinx

近些年,前端技术变得愈发复杂。这一趋势除了导致全球变暖,也让全栈开发的难度越来越大。


但是,阻碍一个后端开发去写页面的根本原因到底是什么呢
我认为是开发环境的搭建,如果环境变量准备好,可以用自己平时使用的IDE直接写代码,刷新就能看效果,这事貌似可行。


那么如何解决这个问题呢?
我觉得终极解决方案是用一门编程语言同时写前后端代码。


Kotlin配合DSL就可以。


DSL

DSL(Domain Specific Language),领域特定语言。专注于一个方面而特殊设计的语言。

比如SQL是数据库领域的DSL。


特点

  1. 只描述和解决特定领域

优势

  1. 语义更明确,直观
  2. 可以屏蔽数据结构和技术细节,由领域专家编写

缺点

  1. 额外的理解、学习成本
  2. 抽象设计难度高,需要平衡表现力和实现成本。


比如描述2天前的时间,你可以定义为
2 days ago

也可以是
new Date().before(2, DAY)


这又引出了DSL的2种分类


  • 内部(Internal)DSL,借助宿主语言(如:Scala、Kotlin)实现。和提取函数方法不同,提供了一套更接近自然语言的语法表现形式
  • 外部(External)DSL,语言无关,需要自定义语法并实现解析器。比如 XMl、YAML

kotlin DSL

Kotlin 借助 Lambda + Extensions扩展 来实现内部DSL


距离全栈,你只差一个kotlinx


expression函数的入参是一个Expression.() -> Unit类型的lambda。未简化的代码为


距离全栈,你只差一个kotlinx


简化后借助 Lambda argument should be moved out of parentheses 变为


距离全栈,你只差一个kotlinx


是不是有DSL内味了

kotlinx

距离全栈,你只差一个kotlinx

kotlinx.html 是一个通过DSL构造HTML的kotlin扩展库。

本质上是通过kotlin定义好了一套htmlTag类。

DSL定义


距离全栈,你只差一个kotlinx


生成的HTML


距离全栈,你只差一个kotlinx


在此基础上扩展并封装UI组件,达到简化开发成本的目的。比如


封装bootstrap4的header资源引用


距离全栈,你只差一个kotlinx


封装基于bootstrap4的dropdown


距离全栈,你只差一个kotlinx


封装基于bootstrap4的table


距离全栈,你只差一个kotlinx


则View层代码为


距离全栈,你只差一个kotlinx

浏览器效果


距离全栈,你只差一个kotlinx


通常table的最后一列为action列,所以table rows类型为List Unit>>,可以传入html元素


距离全栈,你只差一个kotlinx

其他

Javalin

示例项目使用了Javalin

Javalin is more of a library than a framework. Some key points:

You don't need to extend anything

There are no @Annotations

There is no reflection

There is no other magic; just code.

想必你也听得出是在影射哪个框架

结论

  1. kotlinx.html可以作为jsp、FreeMarker这类模板方案的替代,优势是无需在两种语法之间切换。
  2. 如果没想清楚如何解决问题,那DSL不是一个好的选择


分享到:


相關文章: