10

模型驱动架构的想法是,您创建模型来表达您需要以一种没有任何(或至少大多数)实现技术的方式解决的问题,然后为一个或多个特定平台生成实现。声称是在更高的抽象层次上工作更强大和更有生产力。此外,您的模型比技术更有效(因此,当您的第一语言/平台过时时,您仍然有一些东西可以用于下一代解决方案)。另一个声称的关键好处是可以生成许多样板文件和“繁重的工作”。一旦计算机理解了您的情况的语义,它就可以为您提供更多帮助。

有人声称这种方法的生产力提高了 10 倍,而且这将是我们所有人在 10 年内构建软件的方式。

然而,这一切都只是理论。我想知道当橡胶遇到道路时会产生什么结果。此外,MDA 的“官方”版本来自OMG,看起来很重。它很大程度上基于 UML,这可能被认为是好还是坏取决于你问谁(我倾向于“坏”)。

但是,尽管有这些担忧,但很难与在更高抽象级别上工作并“教”计算机理解问题和解决方案的语义的想法争论。想象一系列简单地表达真理的 ER 模型,然后想象使用这些模型来生成解决方案的重要部分,首先是在一组技术中,然后是在另一组技术中。

所以,我很想听听现在真正在做 MDA 的人(“官方”与否)。你使用什么工具?效果如何?你能够捕捉到多少理论上的承诺?您看到真正的 10 倍效率提升了吗?

4

6 回答 6

6

对这个问题缺乏回应有点不祥……也许我会让Dijkstra解决这个问题。

... 因为计算机出现在十年,当时人们对科学技术的进步和健康的信心几乎是无限的,所以回顾一下,鉴于其最初的目标,人类在过去五个世纪的科学努力可能是明智的是一场壮观的失败。

你们都记得,首要目标是开发长生不老药,让喝它的人长生不老。但由于永远贫困没有多大意义,科学界很快就开始了第二个项目,即。魔法石可以让你根据需要制造尽可能多的黄金。

...

对理想的编程语言和理想的人机界面的追求,使软件危机像阳光下的雪一样融化,具有——而且仍然具有!——寻找万能药和石头的所有特征。这种搜索得到了两方面的大力支持,首先是因为奇迹的创造是你对计算机的期望最低的事实,其次是来自一个一直需要灵药和石头的社会的财政和政治支持首先。

可以区分两个主要流,对石头的追求和对灵药的追求。

对 Stone 的探索是基于我们的“编程工具”太弱的假设。一个例子是认为当前的编程语言缺乏我们需要的“特性”。PL/I 是生产的更壮观的准宝石之一。我还记得 1968 年 Datamation 中的广告,其中一个微笑的 Susie Mayer 用全彩宣布她已经通过切换到 PL/I 解决了她所有的编程问题。可以预见的是,几年后,可怜的苏西·梅耶尔将不再微笑。不用说,任务继续进行,并在适当的时候以 Ada 的形式生产了下一个可能的石头(在铁幕后面被感知地称为 PL/II)。

...

另一个以“编程工具”形式出现的石头系列是在“软件工程”的旗帜下产生的,随着时间的推移,它试图用管理学科取代知识学科,以至于它现在已经接受了它的章程。 “如果你不能编程,如何编程。”

于 2009-04-01T01:11:57.570 回答
4

自 1999 年以来,我一直在模型驱动软件开发领域进行自己的独立研究。我终于在 2006 年开发了一种通用建模方法,我将其命名为 ABSE(基于 Atom 的软件工程)。

因此,ABSE 建立在两个基本方面:

  • 编程是关于问题分解
  • 一切都可以在树上表示

一些 ABSE 功能:

  • 它可以支持所有其他形式的软件工程,从传统的面向文件的方法到基于组件的开发、面向方面的编程、特定领域的建模、软件产品线和软件工厂。

  • 它的通用性足以应用于企业软件、嵌入式、游戏、航空电子设备、互联网,实际上任何领域。

  • 如果有效,您无需成为火箭科学家即可使用。“纯粹的开发人员凡人”可以访问 ABSE。没有像 oAW/MDA/XMI/GMF/etc 工具链中那样的复杂性。

  • 它的元元模型旨在支持从模型中 100% 生成代码。无需往返。元模型直接支持自定义/生成的代码组合。

  • 该模型可以同时操作。可以应用工作流程和版本控制(需要工具支持)。

这听起来像是在乌托邦方面,但实际上我离开了研究阶段,我现在正处于将上述所有内容付诸实践的 IDE 的实施阶段。我想我会在几周内(大约四月底)准备好一个基本的原型。IDE(名为 AtomWeaver)是通过 ABSE 构建的,因此 AtomWeaver 将成为 ABSE 方法的第一个概念验证。

所以,这不是 MDA(谢天谢地!),但至少是一种非常易于管理的方法。作为 ABSE 的发明者,我对此感到兴奋是可以理解的,但我相信模型驱动软件开发将在 2009 年得到推动!

敬请关注...

于 2009-04-02T09:13:19.807 回答
4

模型驱动的软件开发仍然是一个利基领域,但已发表的案例研究和越来越多的其他文献显示出比手动编码方法更成功。

OMG 的 MDA 只是一种方法,其他人正在使用领域特定语言(不使用 UML 进行建模)取得成功。

关键是从模型生成代码并在生成器没有生成您想要的内容时更新它——而不是修改您的代码。帮助您执行此操作的专业工具已经存在多年,但在过去五年左右的时间里,由于 Microsoft 进入该领域并通过 Eclipse 世界中的 openArchitectureWare 等开源项目,对这种方法的兴趣有所增加。

我经营着几个网站:www.modeldrivensoftware.netwww.codegeneration.net,您可以在其中获得有关这些主题的更多讨论、采访、文章和工具选项。

于 2009-05-04T12:48:20.990 回答
1

我从 1997 年开始使用模型驱动技术和 DSL,我对 MDE 越来越感兴趣。

我可以证明,在某些情况下,达到 10 倍以上的生产力(甚至可能更多;-)是可能的。我已经实现了许多模型驱动的软件工厂,它们能够使用非常简单的模型生成可执行软件,从持久性层到 UI 层,与它们生成的技术文档相关联。

但我不遵循 MDA 标准有几个原因。MDA 承诺以 PIM 模型表达您的软件,并能够自动将其转换为一个或多个技术堆栈 (PSM)。

但 :

  • 谁需要在现实生活中针对多个技术堆栈?谁需要针对一个单一且定义明确的架构?
  • MDA 的魔力在于 PIM->PSM 转换,但是以迭代和增量方式进行 model2model 转换很困难:
    • model2model 的实现、调试、维护比 model2text 复杂得多。
    • 由于几乎不可能生成 100% 的软件,因此必须将细节添加到生成的 PSM 模型中,并在转换后保留转换。这意味着合并操作(3 路,以记住添加的细节)。在处理模型时,对象的合并图比文本合并要复杂得多(效果很好)。
    • 你必须处理一个 PSM 模型(也就是说一个看起来非常接近你最终生成的源代码的模型)。这对工具供应商来说很有趣,因为现成的 PSM 配置文件和相关的代码生成器可以与 MDA 工具一起销售和交付。

我提倡 MDE 策略,其中 PIM 是一种 DSL,它讲述您的逻辑架构(独立于任何技术堆栈),并使用自定义和特定代码生成器从该 PIM 生成代码。

优点:

  • 您不必处理复杂的技术性 PSM 模型。你有你的代码。
  • 使用 DSL 技术,PIM 更有效、更可持续、更具表现力,并且易于由代码和文档生成器解释。模型保持简单和精确。
  • 它使您有义务尽早定义您的架构要求和概念(因为它是您的 PIM 元模型),独立于任何技术堆栈。通常,它是关于识别各种类型的数据、服务、ui 组件,以及它们的定义、功能和特性(属性、与其他概念的链接;...)。
  • 生成的代码符合您的需求,因为它是自定义的。如果您生成的代码扩展了一些额外的手动维护的框架类,您可以使其更加简单。
  • 您以几种正交的方式利用知识:
    • 模型利用功能/业务
    • 代码生成器利用从逻辑架构组件到特定技术堆栈的技术映射决策。
    • PIM DSL 将您的逻辑架构的定义大写
  • 使用面向逻辑架构的 PIM,可以生成所有技术代码和其他非代码文件(配置、属性等)。开发人员可以专注于模型无法完全表达的业务功能的实现,通常不必再处理技术堆栈。
  • 合并操作都是关于平面源代码文件的,这很好用。
  • 如果您针对多个技术堆栈,您仍然可以定义多个代码生成器。

缺点:

  • 您必须实现和维护自己的特定代码和文档生成器
  • 一般来说,要充分利用 DSL 方法,您必须投资特定工具(模型验证、特定向导、对话框、菜单、导入/导出......)。
  • 在更新/改进您的 DSL 时,您有时需要迁移您的模型。通常这可以通过一些一次性迁移代码来完成,或者手动完成(取决于影响)。
  • 所有这些缺点都需要具有模型驱动技能的特定开发人员团队

这种特殊的方法可以在具有 UML 配置文件或特定模型编辑器(文本或图形)的可扩展 UML 建模器之上实现。

MDA和MDE之间的巨大区别可以概括为:

  • MDA 是一组通用工具和语言,为每个人的需要提供现成的 md 配置文件和工具。这对于工具供应商来说是完美的,但我怀疑每个人的需求和背景都不同。
  • 使用 MDE + 特定的 DSL 和工具,您需要一些辅助的、熟练的模型驱动开发人员来维护您的自定义软件工厂(建模器、建模器扩展、生成器......),但您可以随时随地利用并管理非常简单-精确-可持续的模型。

这两种方法之间存在某种利益冲突。一个提倡重用现成的预资本化模型驱动组件,而在另一个方面,您可以通过定义 DSL 和相关工具来实现自己的资本化。

于 2018-04-24T11:38:21.957 回答
0

我试过一次。大约在项目进行到一半时,我意识到我的模型与我的代码相比已经过时了,而且非常复杂,以至于让它们保持最新是令人望而却步的,这让我放慢了速度。

问题是软件充满了边缘情况。模型非常擅长捕捉大局,但是一旦您开始实际编写实现代码,您就会不断发现所有这些边缘情况,不久之后您会发现模型过于精细,您必须在维护模型或获取模型之间做出选择写了一些代码。也许样板生成对启动有好处,但在那之后好处很快就消失了,我发现我的生产力急剧下降。这些模型最终从那个项目中消失了。

于 2009-04-01T02:31:37.363 回答
0

We do use MDA and EMF as tools. It saves us a lot of man-hours through code generation instead of manual coding. It does require high qualification of analytics, but it is what IT is about. So we mainly concentrated on problems itself and also tools/frameworks which do code generation and run-time support of the generated code. Finally, I can confirm that we do have 10x productivity increase with MDA.

于 2019-06-19T05:49:03.590 回答