编程语言在其历史中有几个(r)进化步骤。 有些人认为模型驱动的方法将是“下一件大事”。 有一些工具,如openArchitectureWare,AndroMDA,Sculptor / Fornax平台等,可以带来令人难以置信的生产力提升。 然而,我的经验是,它在开始时要么相当容易,但是当你尝试一些意想不到的东西或者很难找到足够的信息来告诉你如何开始你的项目时,也会陷入困境。可能有很多事情需要考虑。

我认为从模型驱动的东西中获取任何东西的重要见解是理解模型不一定是一组漂亮的图片或树模型或UML,但也可能是文本描述(例如状态机,业务规则)等等。)。

您的想法是什么?您的经历告诉您什么? 是否存在模型驱动开发的未来(或者您可能想要称之为的任何东西)?

更新:这个主题似乎没有太多兴趣。 如果您对模型驱动方法有任何(好的或坏的)经验,或者您认为它根本没有意义,请告诉我。

===============>>#1 票数:6

免责声明:我是业务应用程序的开发人员。 以下观点肯定是由我在企业IT战略中的经验所塑造的。 我知道,还有其他软件开发领域。 特别是在工业和/或嵌入式系统开发中,世界可能看起来不同。

我认为MDSD仍然与代码生成过于紧密相关。

代码生成仅在您的代码包含大量噪声和/或非常重复时才有用。 换句话说,当你的代码不能主要关注基本的复杂性时,却会被意外的复杂性所污染。

在我看来,当前平台和框架的趋势正是为了消除意外的复杂性,让应用程序代码专注于基本的复杂性。

因此,这些新的平台/框架从MDSD运动的风帆中汲取了很多风。

DSL(文本的)是另一种趋势,试图使唯一的重点放在基本的复杂性上。 虽然DSL可以用作代码生成的源,但它们并不主要与代码生成相关联。 DSL(特别是内部DSL)基本上允许它在运行时被解释/执行。 [运行时代码生成介于两者之间]。

因此,即使经常与MDSD一起提及DSL,我认为它们实际上是MDSD的替代品。 鉴于目前的炒作,他们也从MDSD运动中获取动力。

如果您已达到最终消除代码中的意外复杂性的目标(我知道这是虚构的),那么您已经达到了业务问题的文本模型。 这无法进一步简化!

漂亮的盒子和图表不提供抽象级别的另一个简化或提升! 它们可能有助于可视化,但即便如此也是值得怀疑的。 掌握复杂性的图片并不总是最好的表现形式!

此外,MDSD中涉及的工具的当前状态增加了另一级别的意外复杂性(想想:同步,差异/合并,重构......),这基本上使简化的最终目标无效!

看看下面的ActiveRecord模型,作为我理论的一个例子:

class Firm < ActiveRecord::Base
   has_many   :clients
   has_one    :account
   belongs_to :conglomorate
end

我不认为这可以更简化。 任何带有方框和线条的图形表示都不会简化,也不会提供更多便利(考虑布局,重构,搜索,差异......)。

===============>>#2 票数:5

模型驱动开发已经存在了很长时间。

早期尝试中最成功的是詹姆斯·马丁斯综合工程设施“,它仍然由CA以严重不冷的”Coolgen“品牌名称进行销售。

那么,如果它如此美好,它为什么不接管世界呢?

这些工具很擅长简化这些简单的东西,但是,它们不会让硬件变得更容易,而且在许多情况下使硬件变得更难!

当您知道在Java / C / SQL中编写正确的东西或其他任何微不足道的东西时,您可以花费数小时试图说服图形4GL建模语言“做正确的事”。

===============>>#3 票数:3

我想也许没有明确的答案 - 因此在这个问题上缺乏“兴趣”。

但我个人对MDA有过不同的经验。 唯一一次好的体验就是使用了很棒的工具 - 我曾经使用过TogetherSoft(我相信它们最终会出现在borland) - 他们是第一个引入编辑的人之一,这不是“代码生成”,而是实际编辑代码/直接模型(所以你可以编辑代码,或模型,这是一件事)。 他们也进行了重构(这是我第一次记得它发布在smalltalk环境中)。

从那时起,我没有看到MDA在人气方面的增长,至少在主流方面,所以在受欢迎程度方面它似乎不是未来(所以那种答案)。

当然流行并不是一切,而且有回归的趋势,但暂时我认为MDA +工具被许多人视为“基于向导的代码生成”工具(无论它是什么)所以我认为这将是一段时间,也许永远不会真正起飞。

===============>>#4 票数:3 已采纳

我认为,这需要时间,直到工具变得更精致,更多人获得MDD经验。 目前,如果你想从MDD中获得一些东西,你必须投入很多,所以它的使用仍然有限。

以openArchitectureWare为例:虽然它非常强大并且存在基本文档,但是缺少内部工作的文档,并且仍然存在可扩展性问题,这些问题是未记录的 - 当Xtext和Xpand被重写时可能会更好。

但是鄙视这些限制,使用oAW可以很容易地生成一代,你可以像Xtend和Xpand中的魅力一样导航你的模型,并将几个工作流程组合成更大的工作流程,你也可以做很复杂的事情。 如果需要,您可以使用Java,因此您可以非常灵活地使用模型。 在oAW中使用Xtext编写自己的DSL也很快就完成了,但是你可以免费获得元模型,解析器和非常好的编辑器。 此外,您可以基本上从任何地方获取模型,例如,可以将数据库转换为元模型的组件,并且可以毫不费力地编写相应的模型。

所以我想说,随着工具和使用经验的增加,MDD仍在不断发展。 如果您具备必要的专业知识并且已准备好在公司内部推广它,它已经可以成功使用。 最后,我认为,这是一件非常好的事情,因为可以而且应该生成许多胶水代码(也就是复制粘贴)。 在我看来,使用MDD执行此操作是一种非常好且结构化的方式,这有助于重用性。

===============>>#5 票数:2

MDD的一个问题是,由于它在更高的抽象级别上工作,因此它需要开发人员也可以在抽象级别上升。 这极大地减少了可以理解和使用这些方法的开发人员。

===============>>#6 票数:1

如果您对模型驱动方法有任何(好的或坏的)经验,或者您认为它根本没有意义,请告诉我。

我认为这里的贡献者是“无银子弹”阵营(我绝对是)的一部分。 如果MDA工作(相当于“巨额储蓄”),我们就会知道,这是肯定的。 问题是:在保持系统可管理性的同时,你能走多远“元”? 当他们引入更正式的元元模型时,这是UML 2.0的转折点。 到目前为止,我还没有看到UML 2.0的模型化功能的真实世界使用(但我的世界相当有限)。 此外,您只有两种选择,采用模型驱动的方法:生成代码,或者让运行时利用您的模型。 最终的无约束代码生成器被称为“人类”,而最终的运行时在4GL中找到(现在的当前数字是多少?)。 也许这可以解释缺乏热情。

===============>>#7 票数:1

模型驱动开发将是未来,当且仅当它使用的模型可以像编写它应该生成的代码一样灵活。 我认为它现在做得不好的原因是你很难做到与基于文本的编程语言已经做了几十年相同的“往返”。

使用基于文本的编程语言,更改模型就像更改几行代码一样简单。 使用图形化编程语言(也就是像UML这样的MDD图),你必须找到一种方法将该模型一直转换回基于文本的等价物(首先已经非常有效),它可以非常非常凌乱

恕我直言,如果MDD从头开始构建,与基于文本的对应物一样具有表现力和灵活性,那么它就是唯一有用的方法。 尝试将现有的自上而下的图形设计语言(如UML)用于自下而上使用分层抽象(例如编程语言)自下而上构建的工具会造成巨大的阻抗不匹配。 我不能完全指责它,但MDD中仍然缺少一些可以使它像人们声称的那样有用的东西......

===============>>#8 票数:1

我们在itemis(www.itemis.com)上使用了模型驱动的软件开发。 到目前为止,我们有非常好的经验。 Shure它不是一个银弹,但它有助于提高软件质量,从而更多地用于我们的客户。

===============>>#9 票数:0

这是一个非常晚的回复,但我目前正在寻找MDD工具来取代Rose RT,不幸的是,它被Rhapsody所取代。 我们处于实时,嵌入式和分布式C ++领域,我们从MDD中获得了很多。 我们正在努力寻求更好的工具,并在我们这家大公司中更广泛地使用该工具。 由于这里提到的一些很好的理由,这是一场艰苦的战斗。

我认为MDD只比编译器高一级,就像编译器高于汇编一样。 我想要一个工具,让我作为架构师,开发应用程序框架,并广泛编辑代码生成(脚本),以使用该框架和我们用于消息传递的任何中间件。 我希望开发人员制作完整的UML类和状态图,其中包括生成应用程序和/或库所需的所有代码。

确实,您可以使用代码执行任何操作,但我会粗略地总结MDD的优点:

  1. 一些人为MDD工具制作应用程序框架,中间件适配器和粘合剂。 他们建造了“房子”。
  2. 其他人创建完整的类,图表和状态机转换代码。 这让他们专注于应用而不是“房子”。
  3. 当图表是代码时,人们很容易看到peopel设计很奇怪。 我们没有所有的专业开发人员,很高兴以这种方式带来初级人员。
  4. 它主要是令人讨厌的状态机代码,可能发生在移动机器人项目中。 我希望人们制作我能理解,批评和处理它们的状态图。
  5. 你也可以进行很好的重构,例如拖动操作和属性继承链或其他类等。我比挖掘文件更好。

即使我输入此内容,我也意识到您可以在代码中执行所有操作。 我喜欢代码之上的一个瘦工具jsut来强制统一,记录设计,并允许更容易的重构。

我遇到的主要问题是我没有一个好的答案,就是这些模型没有标准的功能和文件格式。 人们担心供应商会离开然后被困住。 (我们基本上就是在Rose RT中发生这种情况。)你没有源代码。 但是,您将获得最新版本的工具以及您最后生成的课程代码:)。 我愿意打赌,这个好处超过了风险。

我还没有找到这样的工具,但我想让一些供应商听我说,也许接受钱来实现这一目标。

  ask by Martin Klinke translate from so

未解决问题?本站智能推荐:

1回复

Struts 2.0-通过模型驱动获取多个数据

我有以下详细信息的jsp页面 <s:form> 输入fname: 输入lname: 地址1: 输入城市: 输入密码: 地址2: 输入城市: 输入密码: 地址3: 输入城市: 输入密码: </s:form>
1回复

在struts2中的列表在使用模型驱动界面时无法保存选择

您好,我在struts2应用程序中使用了接口模型驱动。 我在呈现页面时遇到问题,因为我总是遇到错误: 我不知道错误在哪里,所以我给社区带来困扰。 struts.xml : MyAction.java : MyModel.java : Item.java :
1回复

Struts2模型驱动的动作是否可以继承?

我有一个模型驱动的Struts2操作,它提供了正确的JSON响应。 当我重新构造动作时,我得到一个空的JSON响应。 是否有人继承了Struts2模型驱动的动作? 香港专业教育学院试图明确设置Struts配置中的包含属性: 以下所有操作的代码-并非正在使用的实际代码-为了清楚起
1回复

Ionic2模型驱动的表单验证提交

单击提交按钮(本地保存)时,我想在输入字段中显示错误消息。 如果您还有其他建议,请告诉我。 这是表格。 现在,这些字段为空。 当我单击提交按钮时,错误消息将打印在每个无效字段的下方。 当我单击按钮时,我想要这个。 这是模板文件 这是.ts文件
1回复

如何聚焦使用Angular模型驱动的表单动态创建的输入字段

我在Angular 7应用程序中使用模型驱动的表单,其中一个允许用户动态添加/删除一组字段。 这是我的意思的直观参考: 这是我使用的FormModel: 动态属性是domain_users ,它是具有3个FormControl (域,用户名和密码)的FormArray的Fo
2回复

条件验证Angular 2 - 模型驱动表单

我在Angular 2中有一个表单,其中有一个复选框,用于更改页面上的一些输入[文本]。 如果选中该复选框,则称为“CPF”的输入将更改为“CNPJ”。 我只有在选中复选框时才需要CNPJ,因为如果未选中,则用户甚至不会看到'CNPJ'输入。 这是HTML代码的一个片段: 这是
1回复

Struts2模型驱动的验证不起作用

我已在我的应用程序中实现了模型驱动的验证,但验证不适用于以下警告。 警告:访问对象为空,VisitorValidator将无法正确处理验证。 请确保访问对象不为null,以使VisitorValidator正常运行 知道为什么吗? 这是我的Action类。 这是
1回复

在Struts中为PUT请求驱动模型的问题?

我正在使用Content-Type作为application/x-www-form-urlencoded发出PUT请求。 我无法将表单主体元素映射到我的ModelDriven动作类( User )。 这是一个示例请求: 放置: http://www.xyz.com/account/
1回复

在Java编程中创建模型数据的最佳方法

在进行网络服务调用并为您的模型数据收集数据之后,我可以想到几种方法来保持模型直到应用程序进程终止: 将模型保存为静态变量,以便将其保存在内存中并可以快速访问 将模型数据写入数据库。 需要数据时访问数据库表。 这会稍慢一些,具体取决于您尝试获取和搜索多少数据。 创建一
1回复

Struts 2中一种形式的字段的多个模型对象

我们有一个JSP页面,其中显示了来自多个bean的详细信息。 现在,需要编辑这些单个bean的详细信息并将其持久保存到数据库中。 因此,我们正在做的是为每个单独的bean创建一个带有适当字段的表单。 但是ModelDriven接口仅允许一个对象。 因此,不会填充所有字段值。 而且我们无