一流的程序类型系统

这是本系列的第一篇文章,介绍了用于组合的耦合控制反转类型系统。 该系列文章将演示所得的类型系统如何简化组合。 这避免了很多功能/面向对象组合的复杂性。 结果类型系统及其结果组成非常简单,即使初级开发人员也可以理解。

一流的程序

本文将研究First-Class Procedures的类型系统和组成。

我们之前已经讨论过OO矩阵以及方法(以及相关的函数)如何遭受耦合。 我们还讨论了如何通过反转耦合控制来减少这种耦合。 我们还展示了如何将这些反向方法/功能无缝编织在一起 。 我们甚至已经看到行业通过微服务朝着这些概念迈进。

我们尚未讨论的是First-Class Procedures提供的类型系统和组成。

为了讨论这一点,让我们从众所周知的依赖注入概念开始。

依赖注入

依赖项注入的元数据描述了具有以下三个属性的依赖项列表:

  • 注入依赖项的字段(或构造函数参数)(提供依赖项的名称,例如字段名称)
  • 依赖类型
  • 可选的限定词(区分相同类型的依赖项)

利用该信息,可以进行依赖关系的匹配。 请注意,某些依赖项注入框架对此有所改进。 但是,上述元数据通常足以自动关联对象。

连续注射

Continuation Injection将函数/方法的调用减少为与Dependency Injection类似的简单属性集。

由于只能传递一个参数(其余都是依赖项注入),因此只需要一种类型。 这是可选参数类型。

同样,所有来自First-Class Procedure的继续都被命名。

请注意,合格的延续被视为容易出错。 自动将延续连接到匹配的First-Class Procedures,需要对系统中的每个延续使用不同的参数类型。 实际上,大多数情况下,都是传递相同的简单域数据类型。 因此,您最终不得不限定每个延续。

此外,排位赛延续在降低复杂性方面几乎没有改善。 在限定所有连续性时,最终要为每个连续性编写配置。 换句话说,您最终将提供每个延续名称到服务一流程序的映射。 此配置非常容易出错。 我们将展示如何减少错误的发生,并在短期内容易理解。

因此,使用以下元数据描述了“一流程序”所需的每个继续:

  • 续名
  • 延续参数的类型(即发送给延续的参数的类型)

注意,方法/函数的异常也被建模为延续。 该类型是异常类型。 名称是异常类型的名称。

一流的程序类型系统

将Continuation Injection元数据和Dependency Injection元数据放在一起,我们将为First-Class Procedure获得以下元数据(类型)信息:

 FirstClassProcedureType { 
     Class<?> parameterType; 
     ContinuationType[] continuations; 
     DependencyType[] dependencies;  }  ContinuationType { 
     String name; 
     Class<?> argumentType;  }  DependencyType { 
     String name; 
     Class<?> objectType; 
     String qualifier;  } 

上面的类型可以描述所有一流的程序。 由于方法/函数需要参数,因此这些参数由DependencyType列表描述。 由于方法/函数需要调用其他方法/函数,因此在ContinuationType列表中进行了描述。 因为First-Class Procedure只有一个参数,所以参数类型描述了必须通过调用ContinuationType提供的参数类型。

注意,我们没有讨论线程注入类型。 实际上,这是通过将对象类型与线程池匹配而从DependencyType列表派生的。 有关更多信息,请参见线程注入

现在我们可以键入First-Class Procedure,我们可以看看使用这种类型的系统进行合成。

一流的程序组成

头等程序的组成重点在于将延续部分连接在一起。 依赖注入将对象(状态)提供给方法/功能。 依赖关系的这种连接是与延续分开完成的。 因此,我们只需要关注延续到其服务一流程序的延续性。

现在可以在代码甚至配置文件中执行此操作。 但是,随着系统复杂性的增加,用于服务一流程序的延续名称列表变得非常笨拙。 试图从链接列表中破译系统行为变得非常困难。

因此,我们将一流程序看作如下:

  • 具有输入锚点的处理节点
  • 每个延续的输出锚点数量不同
  • 链接作为从输出锚点到输入锚点的线

该表示用于组成的图形配置。 First-Class Procedure是图中的节点,其中的线表示它们之间的延续。 因此,一流程序的组成实际上是在它们之间画线。

由于图形配置在视觉上易于理解,因此即使是初级开发人员也很容易理解该应用程序。

摘要

我们已经证明了Continuation Injection如何简化方法/函数的调用。 这个简单的用于连续注入的元数据模型类似于对象的依赖注入。

这个简单的元数据为一流程序创建了类型系统。 这种类型的系统可以实现一流程序的图形化组合。

此外,由于是图形化的,因此对于初级开发人员来说很容易理解其组成。

下一篇文章将讨论如何使First-Class Procedure类型的系统更通用,以实现应用程序的模块化。 但是,这些模块仍保持类似类型的系统以包含在图形配置中。

翻译自: https://www.javacodegeeks.com/2019/11/first-class-procedure-type-system-for-composition.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值