模块化 组合化_一流的组合模块系统

2023-11-09

模块化 组合化

这是本系列的第二篇文章,介绍了用于组合的反转控制类型系统。 本文讨论了比上一篇文章的“一流过程类型”更通用的“模块类型”系统。

注意:某些功能性编程语言也尝试定义一流模块。 本文定义的First-Class Modules是从反向函数创建的。

一流的程序

回顾上一篇文章 ,First-Class Procedure的类型定义如下。 请注意,由于依赖项是自动关联的,因此我们排除了依赖项类型。

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

这就定义了First-Class Procedure具有单个输入参数和多个连续输出,以进一步构成逻辑和处理异常。

模组

对于具有第一类过程的方法,函数等而言,具有一个具有多个输出的单个输入是很好的选择。 但是,当系统增长时,我们不希望复杂度使输入/输出遭受类似的复杂度增加。 我们希望输入/输出提供一个接口来封装模块的复杂性。 请注意,如果没有封装,我们将无法模块化应用程序的复杂性。

要启用到模块的接口,让我们创建以下输入/输出类型:

 InputType { 
     String name; 
     Class<?> parameterType;  }  OutputType { 
     String name; 
     Class<?> argumentType;  } 

为了理解为什么要创建这些类型,我们将使用耦合控制反转的可视化配置来更好地帮助理解正在发生的事情。

以下模块配置代表由First-Class Procedure处理并将其结果发送到输出的单个输入:

在以上配置中,First-Class Procedure封装在模块中。 模块公开的全部是输入和输出。 上述模块的结果类型如下:

  • 输入名为“输入”,并将参数传递给第一类过程
  • 名为“ Output”的输出,其参数由First-Class Procedure执行的结果提供

但是,这在First-Class Procedure接口上没有什么改进。

有用的是封装多个First-Class Procedures以承担模块的功能:

尽管模块中包含了新的过程,但模块的界面没有变化。 使用该模块的其他配置将不会意识到在内部添加了另一个First-Class Procedure。

我们也不必将自己局限于单个输入和输出。 我们可以有一个具有多个输入和输出的任意复杂的模块:

生成的模块封装了详细信息以具有以下接口:

  • 输入“输入”
  • 输入“ Input-2”
  • 输出“输出”
  • 输出“ Output-2”
  • 输出“ Output-3”

模块类型

模块的结果类型如下:

 SectionType { 
     InputType[] inputs; 
     OutputType[] outputs  } 

请注意, OfficeFloor的命名源自其在业务概念中的基础,随后将模块称为“部分”。

模块(部分)具有多个输入和多个输出。 然后可以将这些输入/输出连接到其他模块的相应输出/输入。

此外,模块本身可能包含其他模块。 连接输入/输出以进行合成时,模块具有与一流程序相同的输入/输出连接。 以下配置演示了将本文开头的模块嵌入另一个模块中:

在上面的配置中,封装的模块是包含单个First-Class Procedure还是两个First-Class Procedure都是无关紧要的。 仅在模块公开的输入/输出上使用模块。 模块的其余复杂性都被封装。 这允许模块化应用程序的复杂性。

一流的模块

因此标题提到了“一流的模块”,但我们只是在视觉上讨论了将模块连接在一起的问题。

为了本质上成为“一流”,需要将模块分配给变量。

上面的图形配置是建立在以编程方式一起配置的Sections(模块)之上的。 图形配置实际上是在First-Class Modules(部分)之上的一层,以使您更容易理解应用程序的模块化方式。

您可以在本文上面使用的OfficeFloor的图形配置实现中看到这一点。 上面的图形配置是通过活动进行的。 Activity是Section的特定专业化( ActivityLoaderImpl源在此处 )。 该活动将XML从图形配置转换为创建节,一流过程,输入,输出。 Activity实现中的每个变量都分配给变量,存储在数据结构中,传递给函数,从函数返回等。这使Section(模块)本质上是“一流的”。

这种基于延续的输入/输出接口非常灵活。 它是如此之多,以至于First-Class Procedures本身也只是Section的专门实现( 请参阅ProcedureEmployer )。

摘要

我们已经看到了如何将First-Class Procedures封装在First-Class Modules中,甚至是First-Class Modules自身中。

我们已经展示了图形配置实际上是如何利用“一流”特性的。 图形配置实际上是一个较高层次的组合,它提供以下两个方面:

  • 更容易理解应用程序的模块化
  • 更快地配置应用程序(实际上只是画线以进行合成)

请注意,以编程方式配置我们的应用程序是很有可能的。 但是,这需要更深入地了解一流程序/模块。 最初,初级开发人员可能不希望这样做。

因此,一流模块的图形化配置为构建模块化应用程序提供了简便性。 这无需处理基础结构的复杂性。 我发现其他构图策略仍存在问题。

在下一篇文章中,我们将讨论一流模块如何提供各种现有组合策略的组合。 您可能会发现,现有的组合策略实际上只考虑了小型编程,而不是考虑大型编程,因为一流模块在模块化和简化应用程序方面变得更加有效。

翻译自: https://www.javacodegeeks.com/2020/01/first-class-module-type-system-for-composition.html

模块化 组合化

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模块化 组合化_一流的组合模块系统 的相关文章

随机推荐

  • 事件流及事件处理程序总结

    事件流 事件捕获阶段 处于目标阶段 事件冒泡阶段 事件捕获与事件冒泡的区别 如何阻止事件的默认行为 以及如何阻止事件冒泡 事件捕获和事件冒泡的概念是相反的 事件捕获 不具体的节点更早接收到事件 而最具体的节点最后接收到事件 DOM2级事件
  • EndNote在Word中插入文献不能自动生成编号 - 解决方案

    本文出处 新浪博客 小数码植物摄影 之http blog sina com cn s blog 629be3eb0100sih3 html 新浪博客 小数码植物摄影 首页 http blog sina com cn u 1654383595
  • Android Studio中怎样引用图片资源

    随着不断接触Android Studio 越来越发现和Eclipse有着巨大的差别 不管是表面的目录结构 还是内在对各种资源的管理 本篇就来聊聊Android Studio中怎样来显示图片 以及与Eclipse中的差别 在Eclipse中依
  • requests爬虫遇到404怎么办_Python爬虫基础库和实践

    爬虫有三大基础库Requests BeautifulSoup和Lxml 这三大库对于初学者使用频率最高 现在大家一起来看看这基础三大库的使用 Requests库 Requests库的作用就是请求网站获取网页数据 Code res reque
  • C# Modbus Rtu实现

    Modbus Rtu的实现与Modbus Tcp的实现类似 C ModBus Tcp的学习及Master的实现 我们还是需要借用一个开源库NModbus4 在vs中 打开NuGet管理器 安装NModbus4 具体实现 具体实现与之前的Mo
  • 主流大语言模型的技术原理细节

    作者 spring 1 比较 LLaMA ChatGLM Falcon 等大语言模型的细节 tokenizer 位置编码 Layer Normalization 激活函数等 2 大语言模型的分布式训练技术 数据并行 张量模型并行 流水线并行
  • Vue组件(插槽)

    1 插槽属于Vue组件的三个核心之一 其余两个分别是属性和事件 今天主要学习插槽的使用 2 插槽 slot 将子组件和父组件进行组合 可以弥补视图的不足 是组件具有更好的拓展性 组件的封装方式 抽取共性 3 插槽的使用方式 1 vue2 0
  • 解决'Unknown custom element'问题

    报错截图 解决方法 模板少写了一个 然后删除多余的模板就行啦
  • 如何安装mysql5.7包_安装mysql 5.7 最完整版教程

    安装环境 CentOS7 64位 MINI版 安装MySQL5 7 1 配置YUM源 在MySQL官网中下载YUM源rpm安装包 http dev mysql com downloads repo yum 下载mysql源安装包 shell
  • anaconda python3.8目录_Linux系统下Anaconda的安装和使用教程

    一 Anaconda的安装 去官网下载 https www anaconda com products individual 下载到本地后利用FileZilla软件上传到服务器 我这里上传到了 data bioinfosoftware文件夹
  • vcpkg编译第三方库leveldb

    vcpkg编译leveldb 1 安装vcpkg 使用git命令直接pull vcpkg源码 git clone https github com microsoft vcpkg 2 在vcpkg目录执行bootstrap vcpkg ba
  • Android 之 intent内容解析

    文章目录 intent intent 属性 1 Action 匹配规则 Action匹配只要有一个与Intent中携带Action相同即可 2 Category 注意 3 Data 4 Component 5 Type 6 Extras 存
  • DirectShow音视频同步实验报告(2)

    单一视频流 Filter Graph如图2 图2 单一视频流的Filter Graph 注意 紧靠Video Renderer的上一级Filter的Video输出Pin 其GetMediaType函数提供的Media Type的VIDEOI
  • CMake学习之set

    文章目录 一 set关键字 二 变量的使用 一 set关键字 将一个cmake变量设置为给定值 将变量
  • 搭建jupyter notebook,开启线上IDE学习

    一 windows搭建jupyter notebook 在jupyter notebook中利用本地虚拟环境 1 激活本地虚拟环境 activate py36 安装nb conda conda install nb conda 3 在ana
  • 发布一套很有本土特色的闽南语QQ表情

    发布一套很有本土特色的闽南语QQ表情 作为福建本地人 对闽南语在熟悉不过了 平时朗朗上口的俗话 现在演变成活泼可爱有趣的QQ表情咯 大家喜欢的话可以来收藏 底下有QQ表情导入包 直接导入QQ即可使用了
  • 如何安装EasyX图形库

    如何下载 1 打开EasyX官网点我 应该是这样子的 2 点击 下载 EasyX 在图片的右边 找不到算你眼瞎 3 直接打开安装包 4 下一步 来到选择界面 5 点击安装 EasyX文档也可以安装一下 但下面的必须点一个 6 点击关闭 结束
  • 服务器运维基础知识,运维技术必须了解的服务器基础知识

    小影提醒 文章部分内容源于互联网收集整理 不代表影速观点 若有咨询 运维技术必须了解的服务器基础知识 等有关服务器 云主机租用 托管 配置 价格问题 请随时咨询影速科技客服 享受1v1贴心服务 1 双路等于双核么 常听说双路至强XX式服务器
  • Spring Boot单元测试

    目录 什么是单元测试 单元测试的好处 单元测试的实现 断言 修改操作 删除操作 添加数据 返回受影响的行数 返回自增id 什么是单元测试 是指对软件中的最小可测试单元进行检查和验证的过程 单元测试的好处 可以非常简单 直观 快速的测试某一个
  • 模块化 组合化_一流的组合模块系统

    模块化 组合化 这是本系列的第二篇文章 介绍了用于组合的反转控制类型系统 本文讨论了比上一篇文章的 一流过程类型 更通用的 模块类型 系统 注意 某些功能性编程语言也尝试定义一流模块 本文定义的First Class Modules是从反向