广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java如何构造DSL方法重构
  • 250
分享到

Java如何构造DSL方法重构

2024-04-02 19:04:59 250人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录DSL特点小结DSL Domain-specific language: 一种专注于某一领域,仅针对部分表达方式的计算机编程语言。 特点 方法链 Method Chaining功

DSL

Domain-specific language: 一种专注于某一领域,仅针对部分表达方式的计算机编程语言

特点

  • 方法链 Method Chaining
  • 功能序列 Functional Sequence
  • 嵌套函数 Nested Functions 嵌套函数
  • Lambda表达式/闭包 Lambda Expressions/Closures

概念有点抽象,先看代码吧

假设你想发一些邮件,你需要一个类能够方便的设置收信人、发信人、标题、内容。

一个传统的java api(具体业务代码都省略了):

public class Mailer {
    public void from(String fromAddress) {
    }
    public void to(String toAddress) {
    }
    public void subject(String theSubject) {
    }
    public void message(String body) {
    }
    public void send() {
    }
}

测试要这样写:

public static void main(String[] args) {
    Mailer mailer = new Mailer();
    mailer.from("build@example.com");
    mailer.to("example@example.com");
    mailer.subject("build notification");
    mailer.message("some details about build status");
    mailer.send();
}

我们可以做些重构,使这个api更流畅,更像DSL。

package dsl.example;
public class Mailer {
    public Mailer from(String fromAddress) {
        return this;
    }
    public Mailer to(String toAddress) {
        return this;
    }
    public Mailer subject(String theSubject) {
        return this;
    }
    public Mailer message(String body) {
        return this;
    }
    public void send() {
    }
}

这样看起来好多了,但是如果能消除new就更好了。因为用户的兴趣在于发送邮件,而不是在创建对象。

public static void main(String[] args) {
    new Mailer()
        .from("build@example.com")
        .to("example@example.com")
        .subject("build notification")
        .message("some details about build status")
        .send();
}

测试:

public static void main(String[] args) {
    Mailer.mail()
        .from("build@example.com")
        .to("example@example.com")
        .subject("build notification")
        .message("some details about build status")
        .send();
}

可以做一下静态导入

public static void main(String[] args) {
    import static dsl.example.Mailer.mail;mail()  
        .from("build@example.com")  
        .to("example@example.com")  
        .subject("build notification")  
        .message("some details about build status")  
        .send();
}

这样,一个DSL的语句就完成了。一般来说,使用Java编写的DSL不会造就一门业务用户可以上手的语言,而会是一种业务用户也会觉得易读的语言,同时,从程序员的角度,它也会是一种阅读和编写都很直接的语言。

小结

创建DSL最好的方法是,首先将所需的API原型化,然后在基础语言的约束下将它实现。DSL的实现将会牵涉到连续不断的测试来肯定我们的开发确实瞄准了正确的方向。该“原型-测试”方法正是测试驱动开发模式(TDD-Test-Driven Development)所提倡的。

其实jdk8提供的很多api已经有很多内部DSL的语义,比如Stream流的find、count等操作都是一种DSL的语义表达,本文只是简单的说明了如何构造DSL,有机会计划找一个实际的业务代码用DSL的方式重构,敬请期待。

--结束END--

本文标题: Java如何构造DSL方法重构

本文链接: https://www.lsjlt.com/news/153771.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java如何构造DSL方法重构
    目录DSL特点小结DSL Domain-specific language: 一种专注于某一领域,仅针对部分表达方式的计算机编程语言。 特点 方法链 Method Chaining功...
    99+
    2022-11-13
  • java构造器 默认构造方法及参数化构造方法
    目录1、构造器1.1 权限修饰符是public 1.2 显示定义构造器1、构造器 构造器也叫构造方法、构造函数,是一种特殊类型的方法,负责类中成员变量(域)的初始化。构造器的用处是在...
    99+
    2022-11-12
  • Java构造方法和方法重载详解
    目录第一 构造方法的作用第二 构造方法的特点方法重载总结类的结构包括 : 1. 成员变量 2. 成员方法 3. 构造方法 4. 代码块 5. 内部类 第一 构造方法的作用 主要有以下...
    99+
    2022-11-13
  • java构造方法可不可以重写
    在Java中,构造方法(Constructor)与其他方法一样,也可以被重载(Overload),但它不能被重写(Override)...
    99+
    2023-10-26
    java
  • Java构造方法的定义和重载
    本篇内容介绍了“Java构造方法的定义和重载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、构造方法的定义(一)什么构造方法实...
    99+
    2023-06-15
  • java如何调用构造方法
    在Java中,可以使用`new`关键字来调用构造方法。构造方法用于创建对象,并且在创建对象时会自动调用构造方法。调用构造方法的语法如...
    99+
    2023-08-09
    java
  • php构造方法和java构造方法有哪些区别
    这篇文章主要介绍“php构造方法和java构造方法有哪些区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php构造方法和java构造方法有哪些区别”文章能帮助大家解决问题。区别:1、重写子类构造函...
    99+
    2023-06-29
  • php构造方法和java构造方法有什么区别
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php构造方法和java构造方法有什么区别早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象。PHP的面向对象语法是从JAVA演化...
    99+
    2021-01-17
    php
  • JAVA继承、构造方法、重写和重载方法怎么用
    本文小编为大家详细介绍“JAVA继承、构造方法、重写和重载方法怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“JAVA继承、构造方法、重写和重载方法怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。构造方...
    99+
    2023-06-30
  • java的构造方法如何调用
    在Java中,构造方法是用来创建对象并初始化对象的特殊方法。构造方法没有返回类型,并且与类名相同。构造方法可以通过以下方式进行调用:...
    99+
    2023-09-23
    java
  • java静态构造方法如何写
    在Java中,静态构造方法通常被称为静态代码块。它们用于在类被加载时执行一次性的初始化操作。静态构造方法不能通过实例化类来调用,而是...
    99+
    2023-10-27
    java
  • Java构造方法和方法重载有什么特点
    这篇文章主要介绍了Java构造方法和方法重载有什么特点的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java构造方法和方法重载有什么特点文章都会有所收获,下面我们一起来看看吧。类的结构包括 : 成员变量 成员方...
    99+
    2023-06-26
  • java构造方法重载的概念是什么
    在Java中,构造方法重载是指在同一个类中可以定义多个具有相同名称但参数列表不同的构造方法。 构造方法是一种特殊的方法,用于创建和初...
    99+
    2023-10-24
    java
  • java构造方法重载问题怎么解决
    在Java中,构造方法重载问题可以通过为每个构造方法提供不同的参数列表来解决。构造方法重载是指在同一个类中定义多个构造方法,每个构造...
    99+
    2023-09-23
    java
  • Java有参构造方法与无参构造方法(完全理解)
    文章目录 前言有参构造方法无参构造方法定义四个类说明情况(如果还不清晰请看)Lombok的基本使用 前言 遇到了就简单写一下吧,如果能够对你有帮助,点个赞吧。首先清晰明了的了解到有参构造方法与无参构造方法、以及应用,然后实战...
    99+
    2023-08-16
    java intellij-idea 开发语言
  • python重写方法和重写特殊构造方法
    目录继承多继承的优缺点子类的方法__init__()重写父类的方法将实例用作属性继承 编写类时,并非总是要从空白开始,如果编写的类是另一个现成类的特殊版本,可使用继承,继承分为单继承...
    99+
    2022-11-11
  • 如何在java中使用构造方法
    本篇文章给大家分享的是有关如何在java中使用构造方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Andro...
    99+
    2023-06-14
  • Java面向对象之继承、构造方法、重写、重载
    目录构造方法无参构造有参构造注意类的继承方法重写、重载重写重载构造方法 类的构造方法是特殊的方法,此方法名称必须和类名一致,构造不能有返回值 不使用void,不能直接调用,在类对象实...
    99+
    2023-03-24
    Java面向对象 Java继承 Java构造方法 Java重写 Java重载
  • Java基础第三篇 构造器与方法重载
    目录1、定义构造器2、初始化方法的优先级3、方法重载4、总结在方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initialization)。初始化时,对象的数据成...
    99+
    2022-11-12
  • java构造方法怎么应用
    构造方法在Java中是用于创建对象并初始化对象的特殊方法。构造方法的特点是:1. 构造方法的名称必须与类名一致。2. 构造方法没有返...
    99+
    2023-10-08
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作