160 likes | 638 Views
Object Oriented Analysis and Design. Model Driven Development. 波音 747. 超过 6 百万个零件,仅机尾就有上百个零件 能承载上百个旅客 能不停地飞行上千公里. 波音 747. 当波音在 60 年代开始生产 747 的时候,一共画了 75 , 000 张工程图. 为什么?. 因为他们正在生产一个极其复杂的系统, 而且不能出哪怕是一点点的差错. 软件开发也同样复杂. 人与系统的交互. 系统安全. 交易,存储. 模型. 可靠性,可扩展性. 子系统,模块,分布式. 成千上万行程序.
E N D
Object Oriented Analysis and Design Model Driven Development
波音747 • 超过6百万个零件,仅机尾就有上百个零件 • 能承载上百个旅客 • 能不停地飞行上千公里
波音747 • 当波音在60年代开始生产747的时候,一共画了75,000张工程图 为什么? 因为他们正在生产一个极其复杂的系统, 而且不能出哪怕是一点点的差错
软件开发也同样复杂 人与系统的交互 系统安全 交易,存储 模型 可靠性,可扩展性 子系统,模块,分布式 成千上万行程序
什么是模型驱动开发? • Model-driven Development (MDD) is a challenging approach to software engineering that is expected to change the way systems are developed. It postulates the model as the main artifact being developed rather than the code.
模型驱动开发A strategic initiative to automate the integration, generation, modernization, visualization, and reuse of software artifacts Modeling Web Requirementsand Application Data • Unify business and software teams with model-driven business integration • Improve productivity by providing a choice of modeling paradigms • Make reuse practical with asset-based development Software Construction BusinessProcesses Deployment Management
模型驱动开发成熟度方阵 Smaller Semantic Gap
package com.megabank.loan; import javax.ejb.EntityBean; public abstract class LoanBean implements EntityBean { private javax.ejb.EntityContext entityContext; public LoanBean() {} public void ejbActivate() {} public void ejbPassivate() {} public void ejbRemove() {} public void ejbLoad() {} public void ejbStore() {} public javax.ejb.EntityContext getEntityContext() { return entityContext; } public void setEntityContext(javax.ejb.EntityContext entityContext) { this.entityContext = entityContext; } public void unsetEntityContext() {} public abstract void setRate(java.lang.Float rate); public abstract java.lang.Float getRate(); public abstract void setAmount(java.lang.Float amount); public abstract java.lang.Float getAmount(); public abstract void setBalance(java.lang.Float balance); public abstract java.lang.Float getBalance(); public abstract void setTermMonths(java.lang.Integer termMonths); public abstract java.lang.Integer getTermMonths(); public java.lang.String ejbCreate() throws javax.ejb.CreateException { return null; } public void ejbPostCreate() {} public abstract void setId(java.lang.Long aId); public abstract java.lang.Long getId(); … } Level 0: Manual
通常是由代码逆向产生模型图 目的 文档化 浏览 理解 Level 1: Visualization
模型和代码保持同步 自动 手工 修改模型或代码 Level 2: Synchronization
Level 3: Patterns And Code Templates • “A pattern provides a common solution to a problem in a specific context” (Grady Booch) • 非常容易的重用成功验证的设计 • 各种pattern包括 • GoF Patterns • IBM e-business patterns • Sun’s J2EE patterns • Code template允许代码级的重用
Platform-Independent Model Level 4: Platform Independence PIM 不会因为技术或程序语言 等的变化而受到影响 Refinement Transformations Platform-Specific Model Platform-Specific Model PIM 可以用来产生各种平台的 解决方案 Platform-Specific Model A Transformations improve adoption of new platform technology
Level 5: Executable Models • 模型本身可以执行 • 用户基本上面对的是模型
Code Level 6: MDD Vision Requirements, Use CasesSystems and Business Engineering Patterns and traceability Test and Instrumentation Design Customizable transformations Application Debugging Build and Deploy
Level 6 Future Possibilities • 模型驱动排错 • 例如断点设在模型上而不是在代码上 • 可视化运行时分析 • 例如线程等