一种应用程序命令执行架构设计

2023-05-16

一种应用程序命令执行架构设计

袁永福 2011-7-5

 

有感于一些程序中ASPX页面中直接编写功能性代码,难于组织和维护,实现不了程序的高度可配置化,自此提出一种应用程序命令执行架构,其架构图如下

 

在这个架构中,每一个应用程序中存在一个Host(宿主),它是应用程序功能模块组织中的顶级结构,它战略上管理着整个应用系统的功能点,而且是访问本架构的入口点。

Host下面有若干个Module(功能模块),Module对象Name属性用于进行标识,有StartStop方法用于启动和停止功能模块。[袁永福版权所有]

每一个功能模块下有若干个Command(命令),而一个个Command对象就实现了具体的功能点,Command对象有Name属性用于进行标识,对于WinForm程序,还提供快捷键、按钮图标、提示文本等属性。在具体的写代码中,可以Module类中定义一个个功能模块方法,然后通过反射生成一个个委托,并封装成Command对象;也可以从Command公共基础类型定义一个个实现具体功能的功能点类型。[袁永福版权所有]

这样整个应用程序通过“Host — Module — Command”三级结构将所有的功能点组织在一起。Module可以动态的挂在Host下面而无需硬编码,这样可以实现插件式的软件功能机制,若精心设计还能搞出软件模块热拔插的机制。

Host下面还有Session(会话),Session是一个运行时的数据容器,Command中的功能模块可以通过它来临时存储和共享数据,当Host关闭时Session中的数据会被清空。使用Session能减少各个Command的耦合性,保证系统的变形金刚的功能。在实现时,对于ASP.NET程序,这里的Session可以是ASP.NET Session的封装;对于WinForm程序,Session可以是一个字典列表对象。

Host下面挂着Config(配置),[袁永福版权所有]Config是一个数据容器,其功能和Session类似,但其中的数据会被自动的持久化的。当Host关闭时,Config中的数据会自动保持到系统配置文件或者数据库中,当Host启动时系统又会从配置文件或数据库中加载上次保存的Config数据。各个ModuleCommand都可以使用各自的系统配置数据,这也能减少功能模块之间的耦合性。

Host下面还挂着UI Controler(用户界面控制器),UI Controler用于访问用户界面,它下面挂着若干个Form(用户界面表单对象),对于WinForm程序是一个个窗体或用户控件,对于ASP.NET这是一个个ASPX页面或用户控件。

每一个Form下面有着若干个功能性控件,比如菜单、按钮等等。这些功能性控件通过一种Binding机制绑定到Host下面挂着得所有的Command对象。当程序运行时,用户按下命令按钮,则通过绑定机制触发Command对象,从而执行Command对象的功能性代码来完成某项功能。

由于采用Binding机制,这样在开发时不是直接处理菜单、按钮的点击事件,而是设置菜单、按钮的Binding相关属性。这种机制使得开发和维护用户界面变得很灵活。程序员只要把一个个Command对象实现好,而用户界面可以任意设计,后台代码基本上不需要修改。[袁永福版权所有]

而且Binding机制能实现反向控制操作,当执行了某个操作使得一些Command的状态发生改变,比如可用状态、可见状态等等。此时系统会自动更新用户界面中的控件状态,比如设置菜单、按钮灰化使其不可用等等。

为了能让Binding机制可行,需要提供很强的设计时支持,使得开发人员在开发应用程序用户界面时能很方便的将菜单、按钮和Command对象进行绑定,在这方面VS.NET没有任何问题。

另外Command对象可以通过UI Controler来访问用户界面,这能避免功能性代码直接访问用户界面,降低后台功能性代码和用户界面的耦合度[袁永福版权所有]。

Host下面还挂着Permission(授权),这是进行授权控制,在程序运行时用户按下菜单、按钮通过Binding机制触发Command对象,在最后的关头系统会自动调用Permission来进行Validate(验证)。若验证通过则触发Command对象,若验证不通过则啥都不会发生。而且根据授权信息还能更新用户界面的功能控件状态,比如某个Command通过不授权,用户没有权限调用,则自动设置绑定到该Command的菜单、按钮灰化,使其不可用。

当然用户界面控件可以映射到Command对象,开发者编写的后台代码(User Code)也可以触发Command对象,此时也会通过授权验证。

在实现中,Binding机制或者User Code都不能直接访问Command对象,而且使用命令名通过Host来查找Command对象并在Host内部的代码中触发,在Host内部触发Command对象前就可以调用Permission对象执行验证。

 

通过这种应用程序命令执行架构,系统的功能和用户界面从逻辑上分开了,实现了插件式的软件功能架构,这种架构能促使开发者开发出能在多个项目中都能使用的程序功能模块,这些功能模块经过标准化就是产品,因此这种架构能为项目的产品化打下一个良好的技术基础。

而且对于已有系统,可以将页面对象改造成Module,实现FormModule在形式上的统一而逻辑上的分开,这样能低成本的改造旧系统,保护客户的已有投资。

 

以上是我提出的一种应用程序命令执行架构,欢迎拍砖。[袁永福版权所有]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一种应用程序命令执行架构设计 的相关文章

  • JZVIdeoPlayer(节操视频播放)

    比如jiecao的视频播放 依赖一个是视频 xff0c picasso 图片加载框架 compile 39 cn jzvd jiaozivideoplayer 6 0 0 39 compile 39 com squareup picasso
  • Android Apk编译的apk安装失败解决

    一 xff1a 如果直接拷贝到手机进行安装 提示安装失败 xff0c 解决有两种 第一 xff1a 在我们项目中的 gradle properties 文件中加入 xff0c 下面的那句 android injected testOnly
  • Android APP第三方支付流程

    手机APP 支付宝接入 1 开发前准备 xff1a 申请一个通过实名认证的企业支付宝账号 下载SDK开发包 提供APP apk以备审核 xff0c 审核通过后即可进行代码集成 2 流程 流程图 xff1a 流程解释 xff1a app携带支
  • Android介绍如何生成keystore 文件并使用

    cmd下 进入到jdk的bin目录 xff0c 这样的话 xff0c android keystore文件就会生成在这个目录下 签名的时候我们需要这个文件 C Program Files Java jdk1 7 0 01 bin gt ke
  • android代码APK混淆

    实际的产品研发中为了防止自己的劳动成果被别人窃取 xff0c 混淆代码能有效防止apk文件被反编译 xff0c 进而查看源代码 说来惭愧 xff0c 作为互联网创业公司的我们也确实对竞品Apk反编译研究过 xff0c 如果Apk混淆之后确实
  • android资源文件混淆

    前面一篇文章我们说过Apk的混淆 xff0c 除了源代码的混淆 xff0c 还有资源文件的混淆 微信推出的apk资源混淆方案 xff0c 该方案的具体原理课参见 xff1a 安装包立减1M 微信Android资源混淆打包工具 微信资源混淆工
  • WebView使用

    https www cnblogs com xunzhi p 6023190 html span class hljs keyword public span span class hljs class span class hljs ke
  • 最新研究:AI已可诊断50种眼疾,1.2秒内确认神经系统疾病

    本文由人工智能观察编译 译者 xff1a Sandy 近年来 xff0c 人工智能技术与医疗健康领域的融合不断加深 xff0c 且在科技巨头与资本巨头积极布局的努力下 xff0c 智能医疗正在不断取得新的突破 而根据 自然医学 xff08
  • stm32 fsmc 功能讲解

    LCD有如下控制线 xff1a CS xff1a Chip Select 片选 xff0c 低电平有效 RS xff1a Register Select 寄存器选择 WR xff1a Write 写信号 xff0c 低电平有效 RD xff
  • go语言基础之面向接口编程示例

    span class token keyword package span main span class token keyword import span span class token punctuation span span c
  • ZynqMP SOC 启动Linux遇到TF卡只读(RO)报错

    如果TF卡作为root启动Linux遇到如下错误 xff1a mmcblk0 mmc0 13ab SE128 115 GiB ro VFS Cannot open root device 34 mmcblk0p2 34 or unknown
  • mmc0: error -84 whilst initialising SD card

    玩zynqMP的板子上的SOC xff0c TF作为root启动petalinux系统 xff0c 碰到如下报错 xff1a error 84 whilst initialising SD card 查询Kernel代码中的sd c也没有看
  • .gradle文件夹下没有gradle.properties

    前言 可直接跳过此段到解决方法 前两天刚配置好Android的环境 xff0c 创建了一个Google的sample 但是在构建的过程中就出了问题 Unable to resolve dependency for 39 app 64 deb
  • eclipse编写web.xml中出现The word '...' is not correctly spelled

    为什么会这样呢 xff1f 因为eclipse中设置了拼写检查 xff0c 解决方法 window gt preferences gt 输入spelling xff0c 将右面的enable spelling checking复选框中的勾去
  • centos vsftpd安装

    1 安装vsftpd yum install vsftpd service vsftpd restart vi etc vsftpd vsftpd conf 配置见最下文 vi etc vsftpd vsftpd conf chroot l
  • 小米2013校园招聘笔试题

    题目 xff1a 一个数组里 xff0c 除了三个数是唯一出现的 xff0c 其余的都出现偶数个 xff0c 找出这三个数中的任一个 比如数组元素为 1 2 4 5 6 4 2 xff0c 只有1 5 6这三个数字是唯一出现的 xff0c
  • 自制Anki选择题模板(支持桌面版/移动版)

    复习面试知识偶然发现了一个小东西 anki xff0c 感觉挺好用就是模板有点少 xff0c 做选择题比较费劲 xff0c 网上找了几个终究不如我心意 xff0c 于是参考前人源码 xff0c 自己改编了一个看起来还不错的版本 这是很久以前
  • VMware Workstation 安装 CentOS 7 虚拟机

    安装步骤 VMware 创建CentOS虚拟机 Jack魏的博客 CSDN博客 https blog csdn net WeiHao0240 article details 100894672 VMware Workstation Pro
  • 基于 HAProxy + Keepalived 搭建 RabbitMQ 高可用集群

    RabbitMQ 集群 通常情况下 xff0c 在集群中我们把每一个服务称之为一个节点 xff0c 在 RabbitMQ 集群中 xff0c 节点类型可以分为两种 xff1a 内存节点 xff1a 元数据存放于内存中 为了重启后能同步数据

随机推荐

  • [CentOS7] Install RabbitMQ Using PackageCloud Yum Repository

    Set up Yum Repository A quick way to set up the repository is to use a Package Cloud provided script It is not a require
  • go语言基础之map的增删改查

    package main span class token function import span span class token string 34 fmt 34 span func span class token function
  • 安卓getSharedPreferences 与 getPreferences 与getDefaultSharedPreferences的区别

    整理了一下getSharedPreferences 与 getPreferences 与 getDefaultSharedPreferences 的区别 xff0c 有需要的朋友可以参考下 1 SharedPreferences 简介 为了
  • request、response 中文乱码问题与解决方式

    request乱码 浏览器向服务器发送的请求参数中包含中文字符 xff0c 服务器获取到的请求参数的值是乱码 response乱码 服务器向浏览器发送的数据包含中文字符 xff0c 浏览器中显示的是乱码 乱码产生的原因 不管是request
  • 基于@Transactional注解的Spring事务

    64 Transactional注解 64 Transactional 可以作用于接口 接口方法 类以及类方法上 当作用于类上时 xff0c 该类的所有 public 方法将都具有该类型的事务属性 xff0c 同时 xff0c 我们也可以在
  • 解决Win7系统DHCP Client服务已设置为“自动”开机仍然无法启动问题

    前言 问题描述 xff1a 由于使用了管家 360等软件进行过网络优化 xff0c 导致每次开机不能正常获取IP连接网络 xff0c 并且系统服务项DHCP Client已设置为 自动 xff0c 但是开机仍无法正常启动 网上大部分解决方法
  • java -jar命令运行jar包时指定外部依赖jar包

    大家都知道一个java应用项目可以打包成一个jar xff0c 当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口 具体的方法是修改jar包内目录META INF下的MANIFEST MF文件 比如有个叫做
  • IntelliJ idea设置显示错误代码提示

    idea默认关闭自动编译 xff0c 所以一些编译错误只有在编译的时候才会提示 xff0c 例如修改了引用类 按图中设置打开自动编译 xff1a 注意 xff1a idea默认打开省电模式 xff0c 自动编译在省电模式下被禁用 xff0c
  • HTTPS协议及其工作原理

    一 什么是HTTPS HTTP 协议 xff08 HyperText Transfer Protocol xff0c 超文本传输协议 xff09 是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 HTTP协议传输的数据都是未加密的
  • Tomcat配置https方式访问

    1 准备安全证书 获得安全证书有两种方式 xff1a 一种方式是到权威机构申购CA证书 xff0c 还有一种方式是创建自我签名的证书 本文以自签名证书为例 xff0c 使用SUN公司提供的证书制作工具keytool制作自签证书 xff0c
  • Java证书工具keytool用法总结

    Keytool简单介绍 keytool 是个密钥和证书管理工具 它使用户能够管理自己的公钥 私钥对及相关证书 xff0c 用于 xff08 通过数字签名 xff09 自我认证 xff08 用户向别的用户 服务认证自己 xff09 或数据完整
  • TaskSnapShot源码分析

    功能 在android设备上 xff0c 打开最近任务 xff0c 会显示退出app时的界面关机重启后马上打开最近任务 xff0c 还是会显示关机前的app列表 Android为了实现上述的功能 xff0c 在每次app切换时都会对app界
  • go语言基础之结构体赋值

    span class token keyword package span main span class token keyword import span span class token string 34 fmt 34 span s
  • MySQL架构,贴过来,抽空看看

    麻雀虽小 xff0c 五脏俱全 MySQL虽然以简单著称 xff0c 但其内部结构并不简单 本章从MySQL逻辑组成 xff0c 物理组成 xff0c 以及相关工具这几个角度来介绍MySQL的整体架构组成 xff0c 希望能够让读者对MyS
  • 不同人眼里的华为

    经济学人 称它是 xff1a 欧美跨国公司的灾难 xff0c 时代 杂志称它是 xff1a 所有电信产业巨头最危险的竞争对手 xff0c 爱立信全球总裁卫翰思 xff08 Hans Vestberg xff09 说 xff1a 它是我们最尊
  • 一个案例引发的思考

    今天下午 xff0c 团队开了一个简短的版本总结会 会上测试经理分析了一个案例 xff1a 某子程序在转测试后发现不能被平台调度 xff0c 原因是子程序的调度入口跟不符合平台规范 很明显开发在转测试前没有充分自验证 xff0c 测试经理提
  • C++动态创建对象应用技术讲解

    Native C 43 43 是不支持根据类名的C 43 43 动态创建对象 比如从一个文本文件中读取类名然后构造一个对象 主要原因是没有丰富的动态元信息 xff0c 没有单根类库 然而可以用几种技术进行实现 如果是类似Spring那样的根
  • 人际关系3大禁忌

    一 锋芒毕露 所有人都会抓机会除掉你的锋芒 xff0c 一个到处宣扬自己的能力的人是很容易被打击的 不轻易出手 xff08 出口 xff09 xff0c 多用 我试试看 等谦逊言辞 二 自负 给人一种目空一切 xff0c 难以团队协作和领导
  • 自动化测试系统的软件架构(转)

    自动化测试系统的软件架构 一 xff0e 为什么要自动化测试系统 随着产品可测性设计和仪表程控制技术的不断完善和提高 xff0c 自动化测试系统越来越广泛的被应用于从产品设计研发到生产制造验证的各个环节 自动化测试系统之所以风靡 xff0c
  • 一种应用程序命令执行架构设计

    一种应用程序命令执行架构设计 袁永福 2011 7 5 有感于一些程序中 ASPX页面中直接编写功能性代码 xff0c 难于组织和维护 xff0c 实现不了程序的高度可配置化 xff0c 自此提出一种应用程序命令执行架构 xff0c 其架构