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

去年4月,我们为 Rafy 框架添加了领域模型设计器组件。时隔一年,谨以本文,简要说明该领域模型设计器的设计思想。

设计目标


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

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

  • 外部简单设计器:也就是设计器可以部署为一个可以独立运行的软件。该软件可以打开领域模型的设计图,方便团队中的非开发人员角色查看。同样,这个软件最好也能支持对模型进行设计。

  • Rafy 运行时设计器:Rafy 是一个插件化架构的框架。所以我们也期望这个设计器可以以插件的形式,直接运行在 Rafy
    框架构建的应用程序中。这样,在应用程序运行时,就能看到当前软件对应的领域模型。

  • VS 内部设计器:这是最重要的一个功能,我们希望设计器能与 Visual Studio 深度整合。首先,这样使得可以在 Visual Studio
    中就能直接进行领域建模,并能根据模型来生成实体代码;其次,在使用 CodeFirst 的场景下,也能在 Visual Studio
    中直接根据当前的实体类代码来生成相应的领域模型设计图。

设计方案


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

并画出组件间的依赖图:

简要说明各组件的用途:

  • 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:

  • Model WPF Controls:

  • 文档控件结构

实现细节


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

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

  • Rafy.EntityObjectModel: 对应设计中的 DDD Object Model。

  • DesingerEngine: 对应 WPF Controls。该项目被设计为一个可重用的,与 DDD 无关,用于图形设计的程序集。


  • Rafy.DomainModeling: 包含了设计时的 RafyDomainDocument、ModelViewer、XML Document
    等组件。

  • ModelingEnv: 一个简单的独立运行的 WPF 程序。

  • VSPackage: VS 插件。

初步成果


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

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

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

PS: 由于一直都使用 CodeFirst 开发模式,所以过了一年了,到现在也只是实现了模型查看,还没有实现模型设计的功能 。

最近半年没怎么长进,所以没东西可写,今天把这个翻出来,给大家做个分享。

Rafy 框架 - 领域模型设计器(建模工具)设计方案,布布扣,bubuko.com

时间: 2024-10-10 12:47:00

Rafy 框架 - 领域模型设计器(建模工具)设计方案的相关文章

基于Extjs的web表单设计器 第六节——界面框架设计

基于Extjs的web表单设计器 基于Extjs的web表单设计器 第一节 基于Extjs的web表单设计器 第二节——表单控件设计 基于Extjs的web表单设计器 第三节——控件拖放 基于Extjs的web表单设计器 第四节——控件拖放 基于Extjs的web表单设计器 第五节——数据库设计 基于Extjs的web表单设计器 第六节——界面框架设计 基于Extjs的web表单设计器 第七节——取数公式设计 基于Extjs的web表单设计器 第八节——表单引擎设计 这一节我给大家介绍一下表单设

pml界面设计器

PDMS是AVEVA公司的一款工厂设计项目软件,PDMS支持二次开发,其中二次开发包括.net及自带的Programmable Macro Language编程语言(简称PML),由于PML开发可以使用PDMS大部分资源,对PDMS版本的敏感度不会特别高,无需进行编译即可在PDMS上执行,所以虽然已经有.net等高级编程语言,但PML语言仍是主流的编程语言. PML编程示例 以下是PML编写的代码示例: 1 $*通过在调用宏文件时,传入相应的参数,使宏可以动态改变参数 2 $* 用法为$m 文件

安装类Excel开发工具设计器

本文主要介绍如何安装类Excel开发工具-活字格的设计器. 1. 活字格安装包介绍首先,在活字格的官方网站中的右上角点击立即试用,然后输入你的邮箱,登录邮箱,点击下载链接就可以下载活字格的安装包HuoZiGe.zip.解压这个安装包,里面会有两个应用程序HuoZiGe_Designer.exe和HuoZiGe_Server.exe. HuoZiGe_Designer.exe指的是活字格设计器,用来设计您的应用程序. HuoZiGe_Server.exe指的是活字格服务器,用来布署发布您的应用程序

报表控件报表设计器工具QuickReport下载

QuickReport 是一个100% 用Delphi 代码编写的分栏报表生成器,它可与Delphi 和C++Builder 完美整合,并且Delphi/C++Builder IDE 中使用表单设计器作为报表设计器来设计报表. 具体功能: 报表设计:QuickReport 是一个用Delphi 编写的分栏报表生成器.可与Delphi 和C++Builder 完美整合,在Delphi/C++Builder IDE 中使用表单设计器作为报表设计器来设计报表. 数据连接:Quickreport 可使用

润乾报表设计器中使用 spring 框架实现自定义数据集

spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.在 web 开发环境中经常会与 struts.hibernate联合起来使用,进行规范的框架结构开发.润乾中的二次开发也可以与 SSH 框架相结合部署到 web 项目中.本文介绍在设计时没有启动 web 服务,在设计器中使用 spring 的方式来实现自定义数据集. 实现思路:编写两个自定义数据集,一个在设计器中使用,一个在 web 项目中使用,在设计器中使用的类需要编写临时加载 spring 框架配置文件的代码,启动 spr

【.NET】EF框架之Entity Framework的核心--EDM设计器

上篇博客初步认识EF,总是在说EDM,到底什么是EDM呢?下面我们就来揭开它神秘的面纱:   xml中那些"乱七八糟"的代码. Entity Data Model就是所谓的实体数据模型,也就是EDM.在VS中添加ADO.net实体数据模型就可以直接画实体,向上可以方便我们的开发,向下直接映射到数据库,开发人员操作实体无须了解数据库表结构.下面就是.edmx中的两个实体了,我们这里不涉及数据库的概念,而是用一个叫做DBContext的上下文对象表示这些实体的集合. EDM设计器可以设计上

流程表单开发设计器设计方案

目 录 前言 设计功能 使用场景模拟 快速开发表单 表单使用 主要功能 表单设计器功能 其他相关功能 数据存储设计 Demo界面及功能 表单设计器 表单设计器功能界面整体原型 定义数据项目 表单字段属性定义 前言 原办公业务流程平台审批单使用业务数据(横向)表纵向存储的思路,所有流程所使用的业务表单的数据都存在一张物理表中,表中每条数据记录包含列的(Column)定义和值(Value),列(Column)所对应的字段信息,通过定义表来定义.这种设计需要使用代码进行数据组装,比较繁琐.当表单内容较

整合Acitiviti在线流程设计器(Activiti-Modeler 5.18.0)

整合Acitiviti在线流程设计器(Activiti-Modeler 5.18.0) 1.概述前言 一直以来都是从事大量的工作流相关的项目,用过很多商用的工作流产品,包括国内与国外的,尽管商用的工作产品在UI操作上比较人性化,但个人用户觉得,这东西只需要一些初级用户,对于我们一直在为一些高级的客户提供一些专业的数据整合.流程梳理.系统间的数据穿透时,这些系统因为不开源,给项目的实施带来巨大的风险,在一些项目栽过跟头后,我更偏向于使用开源的平台了.但开源平台最大的难点是在于你是否有足够的技术人员

解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件,若是在项目开发前就准备好了这些组件,为项目如期交付提供了保证. 查询设计器 Query Designer  支持选择一个或多个数据库表,通过左右连接的方式构建查询结果,支持直接手写SQL语句设计查询,支持调用存储过程查询,支持用代码设计查询. 报表设计器 Report Designer 支持配置的