MDSF:特定领域建模 DSM(Domain Specific)介绍

简介:

     在读书笔记:Visual Studio DSL工具特定领域开发指南中介绍了特定领域开发的一些相关技术有:模型驱动开发 MDA、面向语言编程 LOP 、语言工作平台 Language Workbenches 、特定领域建模 DSM 、产生式编程 Generative Rrogramming 、意图软件 Intentional Software 、软件工厂 SOftware Factories。本篇通过书籍Domain-Specific Modeling来给大家介绍一下特定领域建模DSM,这也是OpenExpressApp采用的特定领域开发方法如果你想提高软件开发的产量和质量,那么这本书你应该看看。

  Domain-Specific Modeling (DSM)是软件开发中新的方法,它有希望能够大幅度的提高开发速度并简化软件开发。在过去十年中,早期采用DSM的人已经提高了五到十倍的速度,这本书是第一本介绍DSM的书籍,涉及领域建模、语言定义、代码生成和DSL工具等内容,它还向大家介绍了不同领域的示例 ,展示了在团队中如何使用DSM来改善软件开发。

  这本书介绍了DSM是什么,为什么它有用,以及如何成功的生成和使用DSM方案来提高产量和质量。全书分为四部分:

  1. DSM介绍以及带来的商业价值
  2. DSM基础:定义以及DSM架构
  3. DSM示例:手机、保险等实际案例
  4. 生成DSM方案:语言定义、生成定义、领域框架、定义流程、DSM工具和DSM的使用

以下我与大家分享一下DSM的主要内容。

两件事情

  1. 提高抽象级别,从【专用的方案域的技术相关内容】转到【直接使用问题域的业务概念和规则】
  2. 允许用户选择某种语言或其他形式来生成最终产品。基于这点,MDA和DSM的区别之一:MDA不能由用户控制生成的代码,而DSM运行用户完全控制生成步骤。DSM不期望生成所有的代码,但是可以基于模型生成大部分通用代码。DSM生成的代码等工件时可读、有效、满足功能要求的基于应用特定的资产。

       

 三个核心元素 

有经验的开发人员都会有下面简单的实践,也可以说是三个基本的开发实践价值观:

  • 不重复自己
  • 如果重复三次,则考虑自动化
  • 定制方案比通用方案要更好

  DSM完成符合上面的实践,通过定制化的建模方式去应对问题领域,通过抽象和生成解决了产量和质量的问题。它需要有经验的业务和开发人员开发三种东西:可以在建模工具中基于特定领域的模型语言来对应用进行建模,然后DSM引擎会使用特定领域的代码生成器来生成框架代码或可执行的模型在领域框架上运行。

  1. 特定领域的模型语言
  2. 特定领域的代码生成器
  3. 领域框架

 

四个实例化级别

DSM是一种模型驱动开发方法,所以它的核心就是模型,从模型定义到建模到模型运行,这几步中模型一个分为四个级别:

  1. 元元模型:基于元模型定义之上的高层次抽象模型,用于构建元模型。MetaEdit+使用的是GPPPRR,这也是OpenExpressApp的MetaModelEngine采用的元元模型
  2. 元模型:基于业务领域的抽象模型,例如实体等
  3. 模型:如果元模型是定义,那么模型就是元模型的实例,例如Author是一个实体
  4. 应用:模型定义是一个具体的业务类别,应用则是模型的一个实例,例如Steven Kelly是一个作者

DSM示例

书中介绍了不同行业的一些示例,读者可以有针对性看与自己类似行业的示例。更多示例见:http://www.metacase.com/cases/dsm_examples.html

商业价值

  • 缩短上市时间,开发生产力能够提高5-10倍
  • 由于使用的是经过验证的工具,产品质量显著提高
  • 积累领域知识
  • ......

构建DSM的成本

DSM先期投入的成本比通用模型要多,实际上有时成本会更低,因为前期投入的人力会比通用目的建模的人少。但是,到了后期可以看出明显使用特定领域建模比通用目的建模所需要的成本要低很多。

  

什么时候需要建立一个DSM方案

基于产品框架演变出来的产品变数越多,则构建一个DSM方案所带来价值越大:很多管理软件都是基于变量来做的个性化需求,这其实是项目型产品,做的项目越多,投资回报率越大

DSM开发角色

  在以前的基于组件开发技术中,有人开发组件,有人使用组件。在产品线开发中,一部分人开发所有项目通用的平台,一部分人使用这些资产进行开发。DSM开发组织机构与这些方法类似,也区分两种不同的角色:开发DSM解决方案的角色和使用DSM进行开发的角色。  

  在DSM中我们可以定义出以下几种角色:

  1. 领域专家:具备问题域的丰富业务知识,他们熟悉领域内的术语、概念、流程和规则。当开发业务系统时,专家懂得业务知识。如果是技术领域,则架构师和开发经理就是领域专家。
  2. 特定模型语言开发人员:设计元模型,并提供使用指导和模型示例。语言开发人员与领域专家和关键DSM用户关系密切。
  3. 生成器开发人员:从模型转换成代码。通常生成器开发人员也是定义领域框架的人员。
  4. 领域框架开发人员:通常是有应用架构的具有丰富经验的架构师和开发人员。他们提供在目标环境下的参考实现,并且已经开发过组件框架、类库等。
  5. 建模工具开发人员:实现模型语言和代码生成器的建模工具。 
  6. DSM用户:模型在高级别层次上进行抽象,很大程度上支持测试、产品管理、QA、实施、销售和客户等多种人员进行沟通。DSM用户人数做多,他们使用建模工具进行开发。
    • 业务工程师使用模型建立业务领域概念
    • IT工程师使用模型扩充技术模型
    • 测试人员使用模型建立测试用例
    • 部署人员可以生产安装程序
    • 管理人员可以获取度量信息

DSM的是与不是...

  • 不是代码的模型表现,而是特定领域业务
  • 不是模型草图或者文档,而是模型作为核心资产来驱动后续产品开发
  • 不是重型建模开发,而是基于需要部分建模生成产品,迭代进行
  • 不是生成需要更改的代码,而是生成领域框架需要的执行模型或者代码,不修改生成的工件
  • 不是生成不足够的代码,而是自己完成控制生成环节
  • 不使用模型和代码的双向同步,而只是由模型生成代码

DSM与其他建模方法的不同

  • UML
    UML是一种大家熟知的设计语言,它其原来类、方法、属性等代码世界的概念。它对开发的自动化和提高产能上基本上没有提供帮助,它没有提高抽象级别来支持代码生成
  • 可执行UML
    可执行UML的目标是把UML作为一种编程语言 ,它的抽象级别很低,不支持特定的问题域
  • MDA
    MDA不能由用户控制生成的代码,而DSM运行用户完全控制生成步骤。
  • 定制化UML
    OCL、MOF都是特定的语言,这些语言也没有明确的特定语言概念

DSM定义和DSM使用

DSM定义都是元模型的定义,包括语言、生成器以及领域框架的编写。DSM定义完成后,通过建模生成模型,生成代码,运行在领域框架上。由于不可能所有代码都完成生成,所有还需要开发人员编写一些代码,这部分代码有可能会独立存在,也有可能会并入领域框架。

DSM应用流程

  1. 验证DSM概念:了解DSM,可以就小范围已知的领域尝试特定领域概念进行开发,例如对UI部分使用UI模型
  2. 开展一个试验项目:找到一个项目作为DSM方案的试验基地,开发DSM项目的第一版
  3. 使用DSM方案:大范围的推广DSM方案
  4. DSM维护:不断完善、维护DSM项目

  以上几步其实也是技术推广的较为通用的步骤,都是小范围验证、项目试验、大范围推广再就是持续应用完善。OpenExpressApp目前处在第2步,系统的DSM方案支持才刚开始。

特定领域语言定义

领域框架

DSM工具比较

DSM与软件工厂、产品线工程的关系

  在以前我也介绍过软件工厂包括以下几部分:产品线工程、架构框架、模型驱动开发和指导。而DSM是一种模型驱动开发方法,它属于软件工程的一个模型驱动方法,这也是OpenExpressApp采用的主要方法

  在软件产品线工程方法 - 四个主要方法原则中介绍过产品线工程的成本(规模化产品开发方法-产品线工程 .pdf,DSM作为模型驱动开发的一种方法支持产品线工程,所以产品线工程的经济图与上面介绍的DSM成本图也有所相似,都是必须有前期的投入成本,一般等做到三个项目后才可以见到回报:

  

DSM:使用MetaEdit+编写Family Tree Modeling Language

MetaModelEngine:元模型引擎开发思路

Domain-specific modelling language and code generator for developing repository-based Eclipse plug-ins

 










 本文转自 jingen_zhou 51CTO博客,原文链接:http://blog.51cto.com/zhoujg/519607,如需转载请自行联系原作者


相关文章
|
3月前
|
存储 人工智能 Rust
SaaS平台Flows.network
Flows.network 是一个基于 Rust 和 Wasm 的无服务器平台,允许开发者构建和部署工作流功能,集成 AI 模型和 SaaS 服务,并通过 GitOps 自动化部署和更新。
36 0
|
网络协议 物联网 智能硬件
【Matter】解密Matter协议(一)--- 关键概念及特性
本篇文章我们将介绍Matter的关键概念及特性。 Matter是一个基于IPV6的运行在TCP/IP上的应用层协议,Matter的底层可以工作在WiFi、Thread或者以太网协议上,而蓝牙是用来完成Matter的入网配置的。
2680 0
【Matter】解密Matter协议(一)--- 关键概念及特性
|
存储 NoSQL 区块链
Libra教程之:Libra protocol的逻辑数据模型
Libra教程之:Libra protocol的逻辑数据模型
|
内存技术 Go Windows
带你读《计算机组成与体系结构:性能设计(英文版·原书第10版)》之一:Basic Concepts and Computer Evolution
本书以Intel x86体系结构和ARM两个处理器系列为例,将当代计算机系统性能设计问题与计算机组成的基本概念和原理紧密联系起来,介绍了当代计算机体系结构的主流技术和最新技术。本书作者曾13次获a得美国教材和学术专著作者协会颁发的年度最佳计算机科学教材奖。目前,他是一名独立顾问,为众多计算机和网络制造商、软件开发公司以及政府前沿研究机构提供服务。
Knowledge of Network Building&Maintenance(网络组建与维护知识点)
CH1 计算机网络技术基础 一、Gap Filing1.编码是将模拟数据or数字数据变换成数字信号,以便于数据的传输和处理。信号必须进行编码,使得与传输介质相适应。(第一点存疑) 2.在数据传输系统中,主要采用以下3种数据编码技术:-数字数据的数字信号编码-模拟数据的数字信号编码-数字数据的模拟信号编码Knowledge Extension:数据传输方式有以下4类a.模拟数据的模拟信号编码 b.数字数据的数字信号编码c.数字数据的模拟信号编码 d.模拟数据的数字信号编码这4类中除了模拟数据的模拟信号编码之外,其他3类都属于数据编码技术。
2259 0
|
算法 数据库
线性一致性与全序广播------《Designing Data-Intensive Applications》读书笔记12
上一篇聊了聊构建分布式系统所面临的困难,这篇将着重讨论构建容错分布式系统的算法与协议。构建容错系统的最佳方法是使用通用抽象,允许应用程序忽略分布式系统中的一些问题。
1489 0
|
XML JSON 数据格式
编码与模式------《Designing Data-Intensive Applications》读书笔记5
进入到第四章了,本篇主要聊的点是编码(也就是序列化)与代码升级的一些场景,来梳理存储之中涉及到的编解码的流程。目前主流的编解码便是来自Apache的Avro,来自Facebook的Thrift与Google的Protocolbuf,在本篇之中,我们也会一一梳理各种编码的优点与痛点。
1310 0