Rafy 领域实体框架 - 领域模型设计器(建模工具)设计方案

简介:

设计目标


Rafy 实体框架中以领域驱动设计作为指导思想。所以在开发时,以领域建模为首要任务。为此,我们为它开发了领域模型设计器。开发人员可以在设计器中,设计相应的领域模型,查看现有代码对应的领域模型。

我们为这个设计器制定了以下功能:

image

  • 外部简单设计器:也就是设计器可以部署为一个可以独立运行的软件。该软件可以打开领域模型的设计图,方便团队中的非开发人员角色查看。同样,这个软件最好也能支持对模型进行设计。
  • Rafy 运行时设计器:Rafy 是一个插件化架构的框架。所以我们也期望这个设计器可以以插件的形式,直接运行在 Rafy 框架构建的应用程序中。这样,在应用程序运行时,就能看到当前软件对应的领域模型。
  • VS 内部设计器:这是最重要的一个功能,我们希望设计器能与 Visual Studio 深度整合。首先,这样使得可以在 Visual Studio 中就能直接进行领域建模,并能根据模型来生成实体代码;其次,在使用 CodeFirst 的场景下,也能在 Visual Studio 中直接根据当前的实体类代码来生成相应的领域模型设计图。

 

设计方案


根据当前 Rafy 框架的架构,结合要实现的设计器的功能。规划整个设计器的所需要的组件:

image

并画出组件间的依赖图:

Architecture

 

简要说明各组件的用途:

  • DDD Object Model:位于最底层的 DDD 对象模型,用于描述领域建模中的实体及实体间的关系。这里的对象模型结构,决定了上层可支持的 DDD 建模类型。
  • Model Xml Document:用于支持对象模型的 XML 序列化。以 XML 文档的形式定义了模型的显示、实体类型、实体间的关系结构。
  • WPF Controls:WPF 中可用于显示模型的控件集。例如:实体块、连接线等。
  • WPF Model Viewer:基于 XML 文档模型,操作 WPF 控件集,实现模型的显示。
  • WPF Model Designer:同样基于 XML 文档模型,操作 WPF 控件集,实现模型的编辑。(由于编辑相对显示来说更复杂,所以设计器和查看器分为两个单独的包来实现。第一期只实现了查看器。)
  • VS Package:Visual Studio 插件包。实现模型设计器集成到 VS 中;调用同步组件,实现代码与模型间的同步。
  • Code Synchronizer:代码同步组件,实现代码与模型间的同步(Model-First 或者 Code-First)。
  • Rafy Entity Meta:当下 Rafy 框架中的实体运行时元数据包。
  • Rafy Plugin:一个可运行在 Rafy 应用程序中的插件。这个插件用于查看运行时实体的领域模型关系图。
  • Standalone Designer(exe):独立运行的设计器应用程序。

 

重点组件


下面,是重点组件的关系图。

  • DDD Object Model: 
    image 
  • Model WPF Controls: 
    image
  • 文档控件结构 
    image

 

实现细节


设计完成后,规划整个实现的顺序:

image

共花了半个月的时间来完成,以下是完成后的项目结构,其中选中的5个项目即是设计器相关的项目:

image

  • Rafy.EntityObjectModel: 对应设计中的 DDD Object Model。 
    image
  • DesingerEngine: 对应 WPF Controls。该项目被设计为一个可重用的,与 DDD 无关,用于图形设计的程序集。 
    image
  • Rafy.DomainModeling: 包含了设计时的 RafyDomainDocument、ModelViewer、XML Document 等组件。 
    image
  • ModelingEnv: 一个简单的独立运行的 WPF 程序。
  • VSPackage: VS 插件。

 

初步成果


20130328 开始实现,至20130415 完成第一版本,可在 VS 中查看实体的领域模型关系图。

image

下面是模型查看器的效果:

图片1

以及使用独立应用程序查看的效果:

image

 

PS: 由于一直都使用 CodeFirst 开发模式,所以过了一年了,到现在也只是实现了模型查看,还没有实现模型设计的功能 。X@8}U9MLE}EBUE273)]9PGF


本文转自BloodyAngel博客园博客,原文链接:http://www.cnblogs.com/zgynhqf/p/3695348.html,如需转载请自行联系原作者

相关文章
《面向对象分析与设计》一3.1 系统边界
本节书摘来自华章出版社《面向对象分析与设计》一书中的第3章,第3.1节,作者 麻志毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看
3705 0
|
7月前
深入.net平台的分层开发
深入.net平台的分层开发
|
领域建模 uml
面向对象分析与设计
一、面向对象分析与设计 面向对象分析与设计(Object-oriented Analysis and Design,简称OOAD)是一种软件开发方法论,旨在通过将现实世界的问题抽象为对象的集合来进行系统分析和设计。 面向对象分析(Object-oriented Analysis,简称OOA)是指通过识别和描述系统中的对象及其相互关系来分析问题。在面向对象分析中,重点关注的是问题域中的实体、属性、行为以及它们之间的关系。通过对问题域的深入理解,可以识别出系统中的关键对象,并确定它们的属性和行为。 面向对象设计(Object-oriented Design,简称OOD)是指根据面向对象分析的结果,
165 0
【结构化开发方法】抽象和模块化
【结构化开发方法】抽象和模块化
408 0
|
存储 JSON 数据库
领域模型vs数据模型,应该怎么用?
什么是领域模型?什么又是数据模型?两者可以等同吗?在实际应用中,怎么样才能用好它们?本文介绍领域模型和数据模型的概念定义,并举例说明两者相互混淆的错误用法,分享如何正确地应用它们。
领域模型vs数据模型,应该怎么用?
|
前端开发 数据库 Android开发
|
数据安全/隐私保护
《面向对象分析与设计》一3.3 用况
本节书摘来自华章出版社《面向对象分析与设计》一书中的第3章,第3.3节,作者 麻志毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看
2059 0
《面向对象分析与设计》一导读
在20世纪90年代,面向对象技术以其显著的优势成为计算机软件领域的主流技术,随后该技术在大多数发达国家的软件开发中得到了相当广泛的运用。在我国的软件产业界,面向对象技术的学习与应用热潮出现于20世纪90年代后期,如今面向对象分析与设计技术也已经得到了广泛的应用。
1349 0