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

news2024/9/24 11:29:40

一、环境

        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.coloradmin.cn/o/1388076.html

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

相关文章

RabbitMQ的安装使用

RabbitMQ是什么&#xff1f; MQ全称为Message Queue&#xff0c;消息队列&#xff0c;在程序之间发送消息来通信&#xff0c;而不是通过彼此调用通信。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时&#xff0c;消费者无法快速消费&#xff0c;…

图解结算平台:准确高效给商户结款

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;4&#xff09;篇。 本章主要讲清楚支付系统中商户结算涉及的基本概念&#xff0c;产品架构、系统架构&#xff0c;以及一些核心的流程和相关领域模型、状态机设计等。 1. 前言 收单结算是支付系统最重要的子…

曲面上偏移命令的查找

今天学习老王的SW绘图时&#xff0c;遇到一个命令找不到&#xff0c;查询了一会终于找到了这个命令&#xff0c;防止自己忘记&#xff0c;特此记录一下&#xff0c;这个命令就是“曲面上偏移”&#xff0c;网上好多的教程都是错误的&#xff0c;实际上这个命令没有在曲面里面&a…

蓝桥杯备赛 | 洛谷做题打卡day3

蓝桥杯备赛 | 洛谷做题打卡day3 sort函数真的很厉害&#xff01; 文章目录 蓝桥杯备赛 | 洛谷做题打卡day3sort函数真的很厉害&#xff01;【深基9.例1】选举学生会题目描述输入格式输出格式样例 #1样例输入 #1 样例输出 #1 我的一些话 【深基9.例1】选举学生会 题目描述 学校…

封装日期时间组件

概述 该组件包含日期选择&#xff0c;任意时间选择、固定时间点选择。 子组件代码(date-picker.vue) <template><div id"date_picker"><el-popover placement"top" width"322" trigger"click" ref"popover&quo…

【学习心得】图解Git命令

图解Git命令的图片是在Windows操作系统中的Git Bash里操作截图。关于Git的下载安装和理论学习大家可以先看看我写的另两篇文章。链接我放在下面啦&#xff1a; 【学习心得】Git快速上手_git学习心得-CSDN博客 【学习心得】Git深入学习-CSDN博客 一、初始化仓库 命令&#xff…

Go后端开发 -- 数组 slice map range

Go后端开发 – 数组 && slice && map && range 文章目录 Go后端开发 -- 数组 && slice && map && range一、数组1.数组的声明和初始化2.数组的传参 二、slice切片1.slice的定义和初始化2.len()和cap()函数3.空切片4.切片截取5…

基于深度学习的实例分割的Web应用

基于深度学习的实例分割的Web应用 1. 项目简介1.1 模型部署1.2 Web应用 2. Web前端开发3. Web后端开发4. 总结 1. 项目简介 这是一个基于深度学习的实例分割Web应用的项目介绍。该项目使用PaddlePaddle框架&#xff0c;并以PaddleSeg训练的图像分割模型为例。 1.1 模型部署 …

智能反射面—流形优化

使用Manopt工具箱适合优化最小化问题&#xff0c;如果你的优化问题是最大化问题&#xff0c;那么需要将其转换为最小化问题然后使用Manopt工具箱求解。 具体安装过程 Matlab添加Manopt - 知乎 (zhihu.com) 优化问题 clc,clear; close all; srng(1);%rand seed N10; GR_num1e3…

MathType中文网站2024最新版本下载及嵌入word教程

MathType是一款专业的数学公式编辑器,兼容Office word,excel等700多种程序,用于编辑数学试卷、书籍、报刊、论文、幻灯演示等文档轻松输入各种复杂的数学公式和符号。 MathType是一款功能强大的数学公式编辑器&#xff0c;广泛用于编写和编辑数学公式。Word是微软公司推出的文…

C语言练习day6

关于牛客网运行超时的问题 [NOIP2008]ISBN号码_牛客题霸_牛客网 题目 思路&#xff1a;这个题目重点在怎么去把这个ISBN号码正确输入&#xff0c;其实这个题目已经提示了我们一点信息&#xff1a;输入描述里说&#xff0c;是一个字符序列&#xff0c;其实我们就可以把这个IS…

中国社科院与新加坡社科大联合培养博士——单证还是双证?

有关博士学位&#xff0c;我想不用多说相信很多人都清楚&#xff0c;博士是我国学位等级中目前为止的最高学位&#xff0c;拥有了博士学位就相当于拥有了最高荣誉&#xff0c;但是&#xff0c;我国教育形式另开设了学历教育&#xff0c;对于学历教育的形式&#xff0c;在职博士…

MIT 6s081 lab1:Xv6 and Unix utilities

Lab1: Xv6 and Unix utilities 作业网址&#xff1a;https://pdos.csail.mit.edu/6.828/2020/labs/util.html Boot xv6(easy) 下载&#xff0c;启动xv6系统 $ git clone git://g.csail.mit.edu/xv6-labs-2020 Cloning into xv6-labs-2020... ... $ cd xv6-labs-2020 $ git …

Maxwell数据同步(增量)

1. Maxwell简介 1.1 Maxwell概述 Maxwell 是由美国Zendesk公司开源&#xff0c;用Java编写的MySQL变更数据抓取软件。它会实时监控Mysql数据库的数据变更操作&#xff08;包括insert、update、delete&#xff09;&#xff0c;并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流…

浅谈智慧路灯安全智能供电方案设计

摘要: 智慧路灯&#xff0c;作为智慧城市、新基建、城市更新的主要组成部分&#xff0c;近些年在各大城市已得到很好的落地和 应用&#xff0c;但其与传统路灯相比集成大量异元异构电子设备&#xff0c;这些设备的供电电压、接口形式、权属单位各不相同&#xff0c; 如何设计一…

《绝地求生》职业选手画面设置推荐 绝地求生画面怎么设置最好

《绝地求生》画面怎么设置最好是很多玩家心中的疑问&#xff0c;如果性能不是问题无疑高特效显示效果更好&#xff0c;但并不是所有画面参数都利于战斗&#xff0c;今天闲游盒带来分享的《绝地求生》职业选手画面设置推荐&#xff0c;赶紧来看看吧。 当前PUBG的图像设置的重要性…

YOLOv5改进 | 主干篇 | 12月份最新成果TransNeXt特征提取网络(全网首发)

一、本文介绍 本文给大家带来的改进机制是TransNeXt特征提取网络,其发表于2023年的12月份是一个最新最前沿的网络模型&#xff0c;将其应用在我们的特征提取网络来提取特征&#xff0c;同时本文给大家解决其自带的一个报错&#xff0c;通过结合聚合的像素聚焦注意力和卷积GLU&…

1131. 拯救大兵瑞恩(dp思想运用,set)

1131. 拯救大兵瑞恩 - AcWing题库 1944 年&#xff0c;特种兵麦克接到国防部的命令&#xff0c;要求立即赶赴太平洋上的一个孤岛&#xff0c;营救被敌军俘虏的大兵瑞恩。 瑞恩被关押在一个迷宫里&#xff0c;迷宫地形复杂&#xff0c;但幸好麦克得到了迷宫的地形图。 迷宫的…

MySQL(三)——函数

上期文章 MySQL&#xff08;二&#xff09;——SQL 文章目录 上期文章字符串函数数值函数日期函数流程函数总结 函数&#xff1a;一段可以直接被另一段程序调用的程序或代码 字符串函数 函数功能CONCAT(S1,S2,…Sn)字符串拼接&#xff0c;将S1,S2,…Sn拼接成一个字符串LOWER…