应用程序模型不仅是XAF的核心,它更是XAF的最大特色,它自动收集XAF项目中的信息,用于生成不同平台的UI。由于应用程序模型在XAF中的重要性,官方文档对它的介绍比较详细,大家可以直接阅读官方文档 https://docs.devexpress.com/eXpressAppFramework/112579/ui-construction/application-model-ui-settings-storage

建议大家带着问题去阅读

  • 应用程序模型的分层结构是什么样的,各层都包含了哪些信息,它们之间有什么区别
  • 应用程序模型有哪些存储类型,它们有什么特点,普通用户与管理员之间的存储有什么不同
  • 如何在代码中读取及修改应用程序模型的值
  • 如何通过代码对应用程序模型进行扩展
  • 如何使用ModelNodesGenerator生成节点
  • 如何使用ModelNodesGeneratorUpdater自定义节点

应用程序模型在概念上理解起来不是很难,在XAF中它存储了用于生成UI所需的信息,同时市面上大多数的低代码平台也都是基于模型进行配置与存储,事后再根据用户的请求将模型生成相应的UI。

理解了上面的概念后,对于应用程序模型的基本操作应该没有问题,由于应用程序模型涵盖的内容比较多,如果想灵活的应用,还需要对它深入的了解。

下面讲一个容易产生疑惑的知识点,在我们对应用程序模型扩展时,都是通过接口实现,全程没有创建继承接口的类,访问扩展时也都是直接访问接口,这里可能有些小伙伴会有疑惑XAF是怎么实现的,我们都知道如果想正常运行必须要有类的存在,其实类是XAF帮我们创建了。XAF在运行时,通过收集模型中的接口及其配置,生成C#代码,并将这些代码编译生成为程序集(Assembly),再加载到主程序中。

大家可以将下面代码添加到ViewController中,加上断点看一下assembly的详细信息,你可以看到它的实际存储位置,同时也可以通过ILSpy工具查看Assembly中的信息。

在XAF中基于XPO的DomainComponent(已被弃用)也是采用的这个技术,在官方文档中没有找到它们俩之间关系的信息,但它们都用到了DevExpress.ExpressApp.DC命名空间下的接口与类。

如果想更深入的了解应用程序模型,你可以从这两个类ApplicationModelManager与ModelApplicationCreator入手,ApplicationModelManager负责模型的管理(能够看到模型加载的整个过程),ModelApplicationCreator负责模型的创建(就是Assembly编译生成的过程)。

关于应用程序模型的其它知识,还会在后面与XAF中的其它概念一起介绍。

XAF新手入门 - 应用程序模型(Application Model)的更多相关文章

  1. XAF新手入门 - 类型子系统(Types Info Subsystem)

    类型子系统概述 类型子系统是XAF的核心概念,但我们平时却很少关注它,它集中存储了模块中的类型,它是生成应用程序模型(Application Model)的基础,它与XAF中其它的概念都有所关联,了解 ...

  2. XAF新手入门 - 前言

    很多小伙伴在第一次接触XAF时,会被它的丰富功能及开箱即用的特点所吸引,即使在不了解XAF的情况下,也能够依葫芦画瓢创建一个功能丰富的应用,但当应用到实际项目中时,你会发现与之前的愿景差距很大,很多都 ...

  3. XAF新手入门 - 模块(Module)

    模块概述 谈到模块大家应该都不会感到陌生,不管是前端还是后端都有模块的概念,XAF中的模块概念与大多数框架中的模块概念是相通的.XAF模块首先是一个.NET类库,同时它还包含一个继承自ModuleBa ...

  4. HoloLens开发手记 - 应用程序模型 App model

    HoloLens使用Universal Windows Platform (UWP)提供的应用模型.UWP应用模型定义了应用如何被安全和完全地安装.更新.版本控制和移除.它管理了应用生命周期 - 应用 ...

  5. Implement Property Value Validation in the Application Model 在应用程序模型中实现属性值验证

    In this lesson, you will learn how to check whether or not a property value satisfies a particular r ...

  6. XAF应用开发教程(四)应用程序模型

    XAF是重量型框架,确实够重量的,方方面面都做得规规矩矩. 如果看了前面三节,可能会认为,这N多的Attribute到底都是从哪里来的?到底有多少这样的Attribute?如果不够用了怎么办?等着官方 ...

  7. MVVM Light 新手入门(2) :ViewModel / Model 中定义“属性” ,并在View中调用

    今天学习MVVM架构中“属性”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华的利刃 MVVMLight系列. 一个窗口的基本模型如下: View(视图) -> ViewModel ...

  8. 原创:从零开始,微信小程序新手入门宝典《一》

    为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...

  9. MVVM Light 新手入门(3) :ViewModel / Model 中定义“事件” ,并在View中调用 (无参数调用)

    今天学习MVVM架构中“事件”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华 的 利刃 MVVMLight 6:命令基础 在MVVM Light框架中,事件是WPF应用程序中UI与后台 ...

  10. ASP.NET MVC4 新手入门教程之五 ---5.用控制器访问模型数据

    在本节中,将创建一个新的MoviesController类并编写代码来检索电影数据并将其显示在浏览器中使用一个视图模板. 才走出下一步生成应用程序. 用鼠标右键单击控制器文件夹中并创建一个新的 Mov ...

随机推荐

  1. 4.6 Windows驱动开发:内核遍历进程VAD结构体

    在上一篇文章<内核中实现Dump进程转储>中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descriptor即虚 ...

  2. Python 调用Zoomeye搜索接口

    钟馗之眼是一个强大的搜索引擎,不同于百度谷歌,它主要收集网络中的主机,服务等信息,国内互联网安全厂商知道创宇开放了他们的海量数据库,对之前沉淀的数据进行了整合.整理,打造了一个名符其实的网络空间搜索引 ...

  3. Flask 框架:运用WTForms实现用户注册

    WTForms 是用于web开发的灵活的表单验证和呈现库,它可以与您选择的任何web框架和模板引擎一起工作,并支持数据验证.CSRF保护.国际化等,运用WTForms框架并配合Flask可实现一个带有 ...

  4. SpringCloud-01-Eureka Ribbon

    1.微服务技术 2.SpringCloud SpringCloud是目前国内使用最广泛的微服务框架.官网地址:https://spring.io/projects/spring-cloud. Spri ...

  5. Mocha MemoryBufferQueue 设计概述

    目录 前言 MemoryBufferQueue 功能概述 Buffer 模块 API 设计 MemoryBufferQueue 的设计 Partition 的设计 对并发的支持 Partition 的 ...

  6. 技嘉水雕II 360水冷散热器评测:稳压340W i9-14900K

    一.前言:极简卡扣连锁风扇设计 再多风扇也只需2根线 如今这个年代,DIY主机几乎都会配大量的RGB风扇,然而"光污染"虽然带来了视觉感官享受,在理线方面却非常繁琐. 就拿360水 ...

  7. 你天天用4G 这些基本常识都知道吗?

    不少朋友在选购4G智能手机的时候,经常可能会遇到这样的名词,五模十三频.五模十七频.双4G.移动4G.联通4G.那这些名词到底是什么意思呢?它们之间又有什么区别呢? 其实上面的这些说法其实都是比较具有 ...

  8. java bean 慎用 is开头isXxx开头的属性,若必须得用,那么一定要记得 idea自动生成的 setter 和 getter会不标准,从而会引起问题,他自动生成后,需要手工再次进行修改,才可使用,要不然有可能引起各种问题

    直接上例子: 然后用 Idea 自动生成 getter 和 setter public class XyzBean { //最普通的 private String name; //Boolean类型, ...

  9. delphi调试 字符串 栈的地址,和栈中存的值

  10. Flink-postgres-cdc实时同步报错:无法访问文件 "decoderbufs": 没有那个文件或目录

    问题描述 Caused by: org.postgresql.util.PSQLException: 错误: 无法访问文件 "decoderbufs": 没有那个文件或目录 解决办 ...