2008-11-04 81 views
3

模型驱动的软件开发。模型驱动开发的工具(最佳实践?)?

据我所知,它提高了设计的抽象层次,以更好地反映软件将尝试运行的领域。这只是一句话。

领域专家(客户)与开发人员之间的沟通对于使此方法有效至关重要。我想知道的是,如果有一套工具套件或一组最佳实践将有助于MDSD的最初推力?一旦该域充实了,那么将该模型映射到ORM(或其他)呢?

我只是潜入MDSD和DSL的领域,所以任何建设性的想法或意见将appriciated。

回答

2

如果您正在Microsoft平台上开发,您可能还想查看奥斯陆。有一个很好的概述这里: http://www.pluralsight.com/community/blogs/aaron/archive/2008/11/03/introducing-quot-oslo-quot.aspx

这里有一吨的从克里斯销售链接: http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=2197

我不准备等同于模型驱动的开发领域驱动设计,只是还没有。

您可能也想看看模型驱动架构(OMG MDA)的透视图,虽然可能没有太多的自己滚动。

模型驱动中的一个大问题 - 任何事情都与专业知识来自哪里,从模型派生实现以及什么级别的维护(和调试)发生在什么地方。我对可用书籍的测试将是他们如何使管道可以理解,以及如何理解从建模到部署再回来的路径。

+0

正是! MDSD和DDD是不同的!他们经常被集中在一起。 高层次他们有类似的目标,但达到这些目标的手段有着完全不同的优先级! – jbandi 2008-11-26 11:08:50

2

如果您在.net中编程,您应该阅读Jimmy Nielsson的“应用领域驱动设计和模式”。他还有一个关于ORM(NHibernate),SOA和依赖注入的部分。

无论如何,您应该看看Eric Evans的“Domain Driven Design”。这是一个经典的地方,你可以找到有关域驱动设计的模式和最佳实践的宝贵信息。

1

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

我认为MDSD仍然与代码生成密切相关。

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

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

因此,这些新的平台/框架为MDSD运动带来了很大的风险。

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

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

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

好框和图表不提供抽象层次的另一个简化或提升!它们可能对可视化有好处,但即使这样也是有问题的。画面并不总是掌握复杂性的最佳表现形式!此外,MDSD中涉及的工具的当前状态还增加了另一个级别的意外复杂性(思考:同步,差异/合并,重构......),这基本上无效了简化的最终目标!

请看下面的ActiveRecord模型,我的理论的说明:

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

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

+0

虽然我喜欢你的回答,但我会指出那些消除意外复杂性的框架,就像你说的那样,仍然不会抽象出实现细节。 RoR中的模型对象仅在该框架的上下文中有用。你不能从单独的派生.NET,Java或C++实现 – 2008-11-26 11:26:33

1

MDD可能非常复杂或相对简单。

如果您想从各种模型(例如UML)自动转换为代码并执行往返工程等等,您可以获得一些漂亮的花哨工具。

或者

您可以绘制模型和构建代码更多或更少的手,用单向(型号代码)改造。

首先构建模型的想法是一个行之有效的最佳实践。它通常被称为“设计”。当人们将设计与规范混淆时,就会出现问题。将构建的模型不是编程规范。这是一个抽象,可用于评估正确性,定义测试用例,编写规范等。

您不必模拟所有内容。您可以通过创建数据模型来启动MDD,而不依赖于任何特定的实现。

  1. 您使用UML绘制模型。

  2. 您将UML转换为类定义。

  3. 您使用ORM层(或ODBMS)将模型映射到某种存储。

你不需要比这更多。你需要做的是在你解决太多其他问题之前,把注意力放在模型上。

这个问题通常来自软件开发过程中发生的各种过早优化。早日进入RDBMS物理设计。早期进入网页设计并使用它来驱动数据模型。早期进入定义服务器体系结构和分配存储空间。