标签: model-driven-development

是否有用于函数式编程的软件工程方法?

今天教授的软件工程完全专注于面向对象的编程和面向世界的"自然"面向对象的视图.有一个详细的方法描述了如何将域模型转换为具有多个步骤的类模型以及许多(UML)工件,如用例图或类图.许多程序员已经内化了这种方法,并且很好地了解了如何从头开始设计面向对象的应用程序.

新的炒作是函数式编程,在许多书籍和教程中都有教授.但功能软件工程呢?在阅读有关Lisp和Clojure的文章时,我发现了两个有趣的陈述:

  1. 功能程序通常是自下而上而不是自上而下开发('On Lisp',Paul Graham)

  2. 函数程序员使用映射,其中OO程序员使用对象/类('Clojure for Java Programmers',Rich Hickley的演讲).

那么功能性应用程序的系统化(基于模型的?)设计的方法是什么,即在Lisp或Clojure中?有哪些常见步骤,我使用哪些工件,如何将它们从问题空间映射到解决方案空间?

lisp functional-programming clojure model-driven-development

202
推荐指数
7
解决办法
2万
查看次数

UML是一种编程语言吗?

UML可以用于自己编程计算机系统,没有支持的实现语言,例如直接到机器代码的图表(可能通过C或C++等),没有人工编码干预.

uml modeling model-driven-development

19
推荐指数
3
解决办法
6422
查看次数

在实际项目中使用Alloy的经验

一段时间以来,我一直对正式方法感兴趣.我使用了正式的方法来推理我一直在研究的一些项目的一些非常具体的子领域.我永远无法说服其他团队成员尝试同样的,更不用说用正式方法指定整个域了.

我发现一种特别有趣的方法是Alloy.我认为它可以作为整个项目的基础更好地"扩展",因为它在概念上和符号上非常接近实际的编程语言.此外,这些工具非常可靠,因此可以轻松获得模型验证的好处.

我非常有兴趣了解您在项目中使用Alloy时可能遇到的任何实际经验.您是否认为它帮助您设计了更好的域模型?在验证期间是否在您的域模型中发现错误?你会再次使用它吗?

formal-methods model-driven-development alloy

15
推荐指数
3
解决办法
2158
查看次数

您如何看待模型驱动的软件开发?

我真的很想知道您对Java和/或.NET的模型驱动软件开发的看法.

它能节省时间吗?它是否提高了质量?

mdsd model-driven-development

8
推荐指数
2
解决办法
1144
查看次数

您对Rhapsody开发的审核流程是什么?

我的团队正在使用IBM的Rhapsody工具进行实时嵌入式开发.不幸的是,我们对目前的审核流程不满意.

更具体地说,我们遇到了困难,因为:

  • 图表更改缺乏良好的差异工具
  • Rhapsody差异工具不会生成可在审阅中使用的报告
  • 源文件历史记录不稳定,因为源文件是MDD中的产品,因此未在VCS中以高粒度配置
  • 在源代码上运行差异有时会引入其他开发者所做的无关更改
  • 有时更改模型元素的属性会更改许多源文件
  • 通过属性更改很容易更改源文件而不知道它

有没有人有任何关于在Rhapsody开发上进行同行评审的强大但又轻松的提示?您想分享的任何最佳实践和经验教训?我不是在寻找一个成熟的流程写作; 花絮我不知道会不会很棒.

embedded model-driven-development rhapsody

7
推荐指数
1
解决办法
974
查看次数

对于真实世界的应用程序,是否有MDSD/MDA成功案例?

我目前面临的情况是,我作为测试驱动开发的倡导者必须与模型驱动软件开发(MDSD)/模型驱动架构(MDA)的倡导者竞争.

在我看来,代码生成是我工具箱中的一个有价值的工具,我需要时大量使用模板和自动化.当我认为这有助于理解内部工作或讨论白板上的架构时,我还用UML创建图表.但是,我强烈怀疑通过UML创建软件(创建状态图和序列图以创建工作代码而不仅仅是代码的骨架)对于多层应用程序(数据库层,业务/域层和Gui,甚至可能是分布式的)更有效.在我看来,当谈到MDSD时,CASE工具突然不再仅仅是一种工具,而是满足的要求:一方面,我看到它,

所有这些让我想知道是否有一个成功的故事(产品是及时推出,在变幻无常的时间内,只有少数错误和部分软件已经被重用),以满足现实世界的应用需求.这个creteria并使用严格的模型驱动方法开发:

  • 它与对象管理组(OMG)或与MDSD/MDA/SOA /相关的顾问无关
  • 该应用程序与业务流程建模无关,也不是CASE工具本身
  • 最终用户积极使用该应用程序
  • 它至少有三层,包括一个超出显示原始表值的用户界面,而不是常见的MDA/MDSD示例之一("如何建模咖啡机,交通信号灯,洗碗机").

mdsd mda model-driven-development

7
推荐指数
1
解决办法
1132
查看次数

关于域模型及其可见性的问题

我参与了一场关于领域模型可见性的有趣辩论,并想知道这里的人是否有任何良好的指导.

  • 根据我对MDA的理解,我们不需要在整个应用程序层和层中公开域模型
  • 原因是对域模型的任何更改都会对整个应用程序产生影响
  • 明智的做法是暴露轻量级对象(DTO),它是域模型的一个小子集来抽象实际模型
  • 另一方面,对域模型的任何更改都意味着在整个应用程序中更改各种DTO以使更改可见,而如果我们确实公开域模型,则更改位于单个位置

希望看到一些关于此的评论和想法.

感谢所有的帮助!

c# architecture model-driven-development

6
推荐指数
1
解决办法
147
查看次数

模型驱动的软件开发与Haskell

只需阅读关于模型驱动软件开发(MDSD)的(德国)Wiki文章.总结Wiki定义:

  • MDSD是关于DRY原则(不要重复自己)
  • MDSD是关于DSL(域特定语言)和生成器的设计
  • 通过MDSD可以更简洁地描述问题(通过各个DSL的更高抽象级别).

因为我知道并使用高阶函数式编程,我想知道,我的实际问题是:MDSD是否只是一种绝望的尝试,将高阶函数式编程提供的强大功能注入(部分)编程语言/范例本身缺乏那些功能?

(或者我误解了MDSD甚至可以用来支持高阶函数编程吗?)

haskell functional-programming model-driven-development

6
推荐指数
1
解决办法
1459
查看次数

Mendix中的缓存和AOP:Mendix应用程序中是否有统一或标准化的服务器端缓存方法?

使用Mendix Business Modeler构建Web应用程序与使用Java/Spring/JSF等技术开发Web应用程序有着根本的不同.但是,为了这个问题,我将尝试比较两者:

在基于Java/Spring的应用程序中,我可以将我的应用程序与第三方产品Ehcache集成,以在方法级别缓存数据.例如,我可以配置ehcache来存储给定方法的返回值(具有特定的生存时间).每当调用此方法时,ecache将自动检查先前是否使用相同的参数调用了方法,以及缓存中是否存在存储的返回值.如果是这样,则永远不会实际执行该方法,而是立即返回缓存的方法返回值.

我希望在Mendix中具有相同的功能,但在这种情况下,我将缓存Microflow返回值.此外,我不希望被强制在整个地方添加操作,明确告诉Microflow检查缓存.我想在一个集中的地方注册我的Microflows进行缓存,或者只是标记每个Microflow进行缓存.换句话说,这个问题与Mendix中面向方面编程(AOP)的概念一样多,因为它是关于缓存的:有没有一种方法可以挂钩进入Microflow调用,以便我可以应用前后执行操作?在我看来,同样的原因也就是为什么AOP在Java中有它的目的.

aop caching model-driven-development mendix

5
推荐指数
1
解决办法
382
查看次数

angular -Which form type选择Model-Driven或Template Driven表单?

当我使用模型驱动的形式,如:

@Component({
  selector: 'my-app',
  template: `
  <p>
    <label>First Name:</label>
    <input type="text"  [ngModel]="user.firstName" required>
  </p>
  `,
  providers: [myService]
})
Run Code Online (Sandbox Code Playgroud)

当我使用模板驱动形式时,如:

 @Component({
      selector: 'my-app',
      template: `
      <p>
         <label>First Name:</label>
         <input type="text" formControlName="firstName">
      </p>
      `,
      providers: [myService]
    })
Run Code Online (Sandbox Code Playgroud)

我认为上面两件事都有相同的功能.所以,在开始新项目的时候,我觉得哪个更好?

model-driven-development angular

5
推荐指数
1
解决办法
1195
查看次数

将模型驱动开发与嵌入式工作结合使用有哪些好工具?

我相信在实时和嵌入式软件开发领域中,模型驱动的开发/工程(即OMGs模型驱动架构)已经有了一些提升.人们有哪些工具和工具供应商的经验?

谷歌给了我很多学术论文和一两个供应商(IBM Rational Rose Technical Developer和VisSim).

此外,我们将非常感谢有关模型格式(UML?),平台特定模型的目标语言/环境(C?RTOS?)和测试(基于逻辑的?)的任何信息.

embedded methodology real-time model-driven-development

3
推荐指数
1
解决办法
1080
查看次数

数据库触发器:列值与空变量的比较

我正准备参加模型驱动开发考试.我遇到了一个特定的数据库触发器:

CREATE TRIGGER tManager_bi
FOR Manager BEFORE INSERT AS
DECLARE VARIABLE v_company_name CHAR(30);
BEGIN
  SELECT M.company
  FROM   Manager M
  WHERE  M.nr = NEW.reports_to
  INTO  :v_company_name;

  IF (NOT(NEW.company = v_company_name))
    THEN EXCEPTION eReportsNotOwnCompany;
END 
Run Code Online (Sandbox Code Playgroud)

此触发器旨在防止经理向外部经理报告的输入,即不是来自同一公司的经理.相应的OCL约束是:

context Manager
   inv: self.company = self.reports_to.company
Run Code Online (Sandbox Code Playgroud)

相关表格看起来像(简化):

CREATE TABLE Manager
(
  nr INTEGER NOT NULL,
  company VARCHAR(50) NOT NULL,
  reports_to INTEGER,
  PRIMARY KEY (nr),
  FOREIGN KEY (reports_to) REFERENCES Manager (nr)
); 
Run Code Online (Sandbox Code Playgroud)

教科书说当新插入的管理器没有向任何人报告时(即NEW.reports_toNULL),这个触发器也能正常工作,实际上,在测试时,它确实可以正常工作.

但我不明白这一点.如果NEW.reports_toNULL,那就意味着变量v_company_name将为空(未初始化??NULL),这意味着比较NEW.company …

sql firebird triggers model-driven-development

3
推荐指数
1
解决办法
181
查看次数