zoukankan      html  css  js  c++  java
  • Rafy 领域实体框架

    去年4月,我们为 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

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

  • 相关阅读:
    mysqldump 导出数据库为DBname的表名为Tname的表结构 导出数据库的所有表的表结构
    mysqldump 备份某张表 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions,
    nfs missing codepage or helper program, or other error
    date 增加一个小时 减少一个小时
    mysqldump 备份单个数据库
    mysql删除账户
    怎么删除某个用户的所有帖子?
    mongodb删除重复数据
    ReSharper2018破解详细方法
    激活windows和office
  • 原文地址:https://www.cnblogs.com/zgynhqf/p/3695348.html
Copyright © 2011-2022 走看看