领域特定语言(Domain-Specific Language, DSL)在 Visual Studio 2022中的实验——建立领域模型

一、环境

        dotnet --version
        8.0.101

        Microsoft Visual Studio Enterprise 2022 (64 位) - Current
        版本 17.8.4


已安装组件

ComponentLink
Visual Studiohttp://go.microsoft.com/fwlink/?LinkId=185579
Visual Studio SDKhttps://go.microsoft.com/fwlink/?linkid=2166172
Modeling SDK for Visual Studio

二、概述

        域特定语言(Domain-Specific Language,DSL)是一种表示法,通常用图表示,其表示方法与UML中的类图相近,旨在用于特定目的。

        相比之下,UML 等语言是通用的。 在 DSL 中,可以定义模型元素的类型及其关系,以及它们在屏幕上的呈现方式。

        在VS2022中设计 DSL 后,可以将其作为 Visual Studio 集成扩展 (VSIX) 包的一部分进行分发。表示法只是 DSL 的一部分。 VSIX 包与表示法一起包含一些工具,用户可以应用这些工具来帮助他们编辑和生成模型中的材料。

        DSL 的主要应用之一是生成程序代码、配置文件和其他工件。 尤其是在将创建产品的多个变体的大型项目和产品系列中,从 DSL 生成许多可变方面可以明显提高可靠性,并快速响应需求变化。

三、创建DSL项目解决方案

        若要创建新的域特定语言,请使用域特定语言项目模板创建新的 Visual Studio 解决方案。

  1. 在 “文件” 菜单上,指向 “新建” ,再单击 “项目” 。

  2. 在“创建新项目”下查找“特定于域的语言设计器”。

  3. 单击“特定于域的语言设计器”。

  4. 在“名称”框中,键入 FamilyTree。 单击 “创建” 。

  5. 对于本次实验,选择“最小语言”模板。

  6. 在相应的向导页中输入 DSL 的文件扩展名。 这是包含 DSL 的实例的文件将使用的扩展名。

  7. 检查其他页面,然后单击“完成”。

    将生成包含两个项目的解决方案。 它们名为 Dsl 和 DslPackage。 随即打开名为 DslDefinition.dsl 的关系图文件。

四、建立模型

1、请注意新解决方案的以下方面:

  • Dsl\DslDefinition.dsl 这是创建 DSL 解决方案时看到的文件。 解决方案中的几乎所有代码都是从此文件生成的,对 DSL 定义进行的大多数更改都在此处进行。 有关详细信息,请参阅使用 DSL 定义关系图。

  • Dsl 项目 此项目包含定义域特定语言的代码。

  • DslPackage 项目 此项目包含允许 DSL 实例在 Visual Studio 中打开和编辑的代码。

2、重命名域类、关系和工具

在 DslDefinition 关系图中,将 ExampleModel 重命名为 FamilyTreeModel,将 ExampleElement 重命名为 Person,将 Targets 重命名为 Parents,将 Sources 重命名为 Children。 可以单击每个标签进行更改。使其如下图所示

3、重命名元素和连接器工具

        单击“解决方案资源管理器”下的选项卡,打开“DSL 资源管理器”窗口。 如果看不到该窗口,则在“视图”菜单上,指向“其他窗口”,然后单击“DSL 资源管理器” 。 DSL 资源管理器仅在 DSL 定义关系图为活动窗口时可见。

        打开“属性”窗口并定位它,以便可以同时查看 DSL 资源管理器和属性。

        在 DSL 资源管理器中,依次展开“编辑器”、“工具箱选项卡”、“<你的 DSL>”和“工具”。

        单击 ExampleElement。 这是用于创建元素的工具箱项。

        在“属性”窗口中,将“Name”属性更改为“Person” 。

        请注意,Caption 属性也会更改。

        同样,将 ExampleConnector 工具的名称更改为 ParentLink。 更改 Caption 属性,不将其作为 Name 属性的副本。 例如,输入“父链接”。

4、将域属性添加到类

        在 DSL 定义关系图中,右键单击 Person 域类,指向“添加”,然后单击“域属性”。

        键入新属性名称的列表,例如 Birth 和 Death。 在键入每个名称后按 Enter。

        添加将在形状中显示属性的修饰器。

        沿着从 Person 域类扩展到关系图另一侧的灰色线。 这是关系图元素映射。 它将域类链接到形状类。

        右键单击此形状类,指向“添加”,然后单击“文本修饰器” 。

        添加两个名称为 BirthDecorator 和 DeathDecorator 的修饰器。

        选择每个新修饰器,然后在“属性”窗口中设置“位置”字段。 这决定了域属性值将在形状上显示的位置。 例如,设置 InnerBottomLeft 和 InnerBottomRight。

五、设置关系图

        也可以添加域类,将模型改成如图所示

 可以在“关系图元素”中设置域类-几何图形的映射,同时可以设置域类属性和修饰器之间的映射

六、测试

  1. 在“解决方案资源管理器”的工具栏中,单击“转换所有模板”

  2. 按 F5。 等到 Visual Studio 的实验实例出现。

可以在实例实例的工具箱中看到领域模型的域类和关联关系已经出具在工具列表中了,现在新建的领域模型可以集成在VS2022的开发工具中,用于开发其他相关应用了。

利用领域模型提供的工具,可以创建新的应用模型了。

七、参考文章

1、域特定语言入门 - Visual Studio (Windows) | Microsoft Learn

2、领域特定语言
      Domain-Specific Language
        【美】马丁.福勒(Martin Fowler) 著
                徐昊        郑晔        熊节     译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MILP加速运算技巧(三)——以OR-Tools设置惰性约束为例

文章目录 前言OR-Tools添加惰性约束的方法基于简单TSP的对比实验无惰性约束部分惰性约束完全惰性约束完整代码前言 在运筹学建模和求解过程中1,“lazy constraints”(惰性约束)是一种动态添加约束的策略。通常,在使用整数规划(Integer Programming)或混合整数规划(Mixe…

RTC讲解

RTC&#xff08;Real Time Clock&#xff09;实时时钟 RTC实时时钟本质上是一个独立的定时器。RTC模块拥有一组连续计数的32位无符号计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配…

提升开发效率,Fiddler Everywhere for Mac助您解决网络调试难题

在现代软件开发中&#xff0c;网络调试是一个不可或缺的环节。无论是前端开发还是后端开发&#xff0c;我们经常需要对网络请求进行监控和调试&#xff0c;以便及时发现并解决问题。而Fiddler Everywhere for Mac作为一款强大的网络调试工具&#xff0c;能够帮助开发者提升工作…

Ubuntu重启后进入initramfs导致无法开机

今晚&#xff0c;我的电脑意外关机&#xff0c;重新开机后打开了虚拟机后出现initramfs&#xff0c;一直无法开机。该虚拟机使用的是 vm17,系统是ubuntu20, 解决方案 使用如下命令查看和识别磁盘、分区或文件系统的信息 在initramfs后面输入 fsck /dev/sdb4 ,即修复上面损坏的…

git碰到最常见相关疑难操作记录

git相关疑难操作记录 文章目录 git相关疑难操作记录1 codeup里的git1.1 git 拉取v1代码1.2 git拉取V1代码最直接不用解决冲突的方法1.3 方法21.4 pre-commit 如果检查提示no files时候1.5 git ssh1.6 git push到算法库1.7 git push origin dev bug1.8 新环境配置codeup git ssh…

32 选择组件

效果演示 实现了一个复选框的动画效果&#xff0c;当复选框被选中时&#xff0c;复选框的前面会出现一个勾号&#xff0c;同时复选框的背景颜色会变成灰色&#xff0c;复选框旁边会出现一个火花效果。当复选框被取消选中时&#xff0c;复选框的勾号会消失&#xff0c;复选框的背…

线程同步--生产者消费者模型

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件变量的使用必须依赖于互斥锁以确保线…

Docker(三)使用 Docker 镜像

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 使用 Docker 镜像 在之前的介绍中&#xff0c;我们知道镜像是 Docker 的三大组件之一。 Docker 运行容器前需要本地存在对应的镜像&#x…

行驶证OCR识别应用领域有哪些?

随着科技的不断发展&#xff0c;OCR技术已经逐渐成熟&#xff0c;并在各个领域得到了广泛的应用。其中&#xff0c;OCR技术在行驶证识别领域的应用也日益受到关注。本文将重点介绍行驶证OCR识别的应用领域&#xff0c;以便更好地了解这一技术的应用前景。 首先&#xff0c;行驶…

尚硅谷Nginx高级配置笔记

写在前面&#xff1a;本笔记是学习尚硅谷nginx可成的时候的笔记&#xff0c;不是原创&#xff0c;如有需要&#xff0c;可以去官网看视频&#xff0c;以下是pdf文件 Nginx高级 第一部分&#xff1a;扩容 通过扩容提升整体吞吐量 1.单机垂直扩容&#xff1a;硬件资源增加 云…

计算机毕业设计----SSH会议室管理系统

项目介绍 本系统为基于jspsshmysql的会议室管理系统&#xff0c;包含普通用户和管理员&#xff0c;系统功能如下&#xff1a; 普通用户&#xff1a;会议室管理、会议管理、用户管理、个人资料。 管理员用户&#xff1a;会议室管理、会议管理、用户管理、部门管理、设备管理、个…

前端 文件下载方法

开头 欢迎查看此文件下载添加页面下载按钮添加下载方法 欢迎查看此文件下载 我们每个项目中都会有一个文件下载的需求&#xff0c;但有些小伙伴遇到这种问题不知道该如何解决&#xff0c;那我今天就来为大家讲解一下 添加页面下载按钮 <div><button click"dow…

基于docker创建nginx容器

docker一键安装可以参考我这个博客&#xff1a;一键安装docker 1.创建基础容器 docker run -p280:280 --name nginx -d nginx创建挂载到容器的宿主机文件夹 mkdir -p /home/000nginx-ebrms-ftp/html mkdir -p /home/000nginx-ebrms-ftp/logs mkdir -p /home/000nginx-ebrms-f…

使用vue2写一个太极图,并且点击旋转

下面是我自己写的一个代码&#xff0c;命名有些不规范&#xff0c;大家不要介意。 <template><div class"qq"><div class"app" :style"{ transform: rotateStyle }"><div class"app1"><div class"ap…

三坐标平台对环境的温度有要求吗——河北北重

三坐标铸铁平台对环境的温度有一定的要求。通常情况下&#xff0c;三坐标平台在使用过程中要求环境的温度保持在一定范围内&#xff0c;以确保测量数据的准确性和稳定性。 具体的温度要求可能会因不同的三坐标铸铁平台型号和制造商而有所不同&#xff0c;一般来说&#xff0c;常…

Unity Mirror VR联机开发 实战篇(二)

一、迁移示例中的联机物体 1、将MirrorExamplesVR工程中的部分文件夹复制到自己的工程中。 1、打开MirrorExamplesVR中的 SceneVR-Common场景。 2、将场景中没用的东西都删掉&#xff0c;只留下面这些&#xff0c;新建一个空物体XR Mirror&#xff0c;将所有剩下的物体拖成XR …

汽车连接器接线端子和多芯线束连接界面

冷压接的开式压接和闭式压接以及热压接的超声波焊接对汽车连接器接线端子和多芯线束连接界面 连接器接线端子和多芯线束的连接是电子线束行业&#xff0c;特别是汽车行业常用的导线连接方式。汽车整车线束又由许多分支线束组成&#xff0c;而分支线束必须通过连接器实现连接&am…

绝地求生【违规处罚工作公示】1月8日-1月14日

1月8日至1月14日期间&#xff0c;共计对174,636个违规账号进行了封禁&#xff0c;其中164,757个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为&#xff0c;建议您优先在游戏内进行举报&#xff1b; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

JavaSE核心基础-循环-笔记

1.for循环: for(初始条件&#xff1b;判断条件&#xff1b;步进表达){ 循环体 } for(int i1;i<10;i){ if(i9){ break; // 终止循环 } if(i4){ continue; // 继续下次循环&#xff0…

开源模型应用落地-业务整合篇(一)

一、前言 经过对qwen-7b-chat的部署以及与vllm的推理加速的整合&#xff0c;我们成功构建了一套高性能、高可靠、高安全的AI服务能力。现在&#xff0c;我们将着手整合具体的业务场景&#xff0c;以实现完整可落地的功能交付。 作为上游部门&#xff0c;通常会采用最常用的方式…