编程语言在其历史上有几个(R)进化步骤。一些人认为,模式驱动的方法将是下一个大事件。有一些工具,如openArchitectureWare、AndroMDA、Sculptor/Fornax平台等,都能带来难以置信的生产力提升。然而,我的经验是,一开始就很容易开始,但是当你尝试一些意想不到的事情时,或者很难找到足够的信息来告诉你如何开始你的项目,因为可能有很多事情需要考虑。
我认为,要从模型驱动的东西中获得任何东西,一个重要的洞察力就是要理解,模型不一定是一组漂亮的图片、树模型或UML,而是一种文本描述(例如状态机、业务规则等)。
你是怎么想的,你的经验告诉你什么?是否有模型驱动开发的未来(或您可能想称之为它的任何东西)?
更新:似乎对这个主题不感兴趣。请让我知道,如果你有任何(好的或坏的)经验,模型驱动的方法,或为什么你认为这是毫无意义的。
发布于 2008-09-18 20:39:25
我认为,这需要时间,直到工具变得更精细,更多的人获得MDD的经验。目前,如果您想从MDD中获得一些东西,您必须投入相当多的资金,因此它的使用仍然有限。
例如,查看openArchitectureWare :虽然它非常健壮,并且存在基本文档,但是内部工作的文档缺失了,并且在可伸缩性方面仍然存在问题,这些问题是没有文档的--当Xtext和Xpand被重写时,这些问题可能会变得更好。
但是,忽略这些限制--使用oAW,生成本身相当容易--您可以像在X趋向和Xpand中一样导航您的模型,并且通过将几个工作流合并到更大的工作流中,您也可以做非常复杂的事情。如果需要的话,您可以求助于Java,因此您在处理模型方面有很大的灵活性。用Xtext在oAW中编写自己的DSL也很快就完成了,但是您基本上可以免费获得您的元模型、解析器和一个非常好的编辑器。此外,您也可以从任何地方获得模型,例如,可以将数据库转换为元模型的组件,并且无需付出很大的努力就可以编写相应的模型。
所以我想说,随着工具和经验的增加,MDD仍在积累。如果你有必要的专业知识,并且准备在你的公司内推广它,它已经可以成功地使用了。最后,我认为,这是一件非常好的事情,因为很多胶水代码(也就是复制粘贴)可以而且应该生成。用MDD做这件事是一种非常好的和结构化的方法,在我看来,这有助于重用。
发布于 2008-11-26 11:04:35
免责声明:我是业务应用程序的开发人员。下面的观点肯定是由我在企业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我认为这不能再简化了。此外,任何带有框和行的图形表示都不会简化,也不会提供更多的方便(考虑布局、重构、搜索、扩展……)。
发布于 2008-11-26 11:19:28
模型驱动的开发已经存在很长时间了。
最成功的早期尝试是詹姆斯马丁斯综合工程设施“仍然在附近和销售的CA严重不酷的"Coolgen”品牌名称。
那么,如果世界如此美好,它为什么不接管世界呢?
好吧,这些工具很擅长使简单的东西更简单,但是,它们不会使硬的东西变得更容易,而且在很多情况下也会使硬的东西更难!
当您知道用Java/C/SQL或其他任何方法编写正确的代码时,您可以花费数小时试图说服图形4GL建模语言“做正确的事情”。
https://stackoverflow.com/questions/21091
复制相似问题