基于ASP.NET的Web应用系统架构探讨

news2024/11/15 11:07:38

       摘要:提出了一种基于ASP.NET开发方式的四层架构的Web应用系统构造思想。其基本内容是:将面向对象的UML建模与Web应用系统开发相结合,将整个系统分成适合ASP.NET开发方式的应用表示层、业务逻辑层、数据访问层和数据存储层四层结构。以此方式构造的Web应用不仅达到了代码组织结构清晰明朗、高重用性、适用性,易于维护和移植的目标,而且可以提高web应用系统的开发速度。解决了目前大型Web程序开发中,代码适用性、重用性差,及难于维护和移植的问题。


  引言
  随着计算机网络技术的迅速发展,Web应用系统越发变得日益广泛起来。ASP.NET是微软推出的新一代Web开发平台,与其它Web开发技术相比,ASP.NET提供的Web页面级状态管理功能、服务器控件触发事件的工作模式、代码和内容分离的编程方式等?[1],在一定程度上改变了以往的we b 应用系统的架构模式。在软件开发技术方面,面向对象技术和软件分层结构设计是代码组织的一些好方法。但是对于具体的开发平台而言,多层结构有着不同的具体表现;对于具体的项目开发而言,面向对象技术对具体问题进行类定义和对象划分也不相同。因此,如何基于ASP.NET这些新技术在ASP.NET平台上应用面向对象技术架构一个逻辑清晰、模块合理的多层结构的Web应用系统就成了文中讨论的内容。下面以笔者曾参与的《实验室信息管理系统》中的“ 论文管理子系统” 为例,来阐述基于四层架构的设计思想。

 


  1 ASP.NET下Web程序架构
  系统描述:学生可以登记自己的论文,也可以删除自己登记的论文和相关所有回复;老师和学生可以查看、回复论文,也可以删除、修改自己的回复;管理员可以查看、删除登记的所有论文和回复。笔者省略了论文管理系统的使用案例图和使用案例事件流图??[2,3],只给出了修改自己回复案例的时序图(见图1)。对于基于ASP.NET的Web应用系统,用户直接面对的是客户端浏览器,用户在使用系统时的请求是通过HTTP协议传递给服务器端的ASPX页面,用户操作的事务逻辑处理和数据的逻辑运算由服务器与数据库系统共同完成。按照在系统中的用途分类,把负责系统与角色交互的对象称为边界类对象,把负责系统中访问数据库的对象称为实体对象,把系统中介于边界对象和实体对象之间,负责时序图中流程的对象称为控制对象。故在时序图(见图1)中,Papers.ASPX和 Session对象属于边界类对象,Users对象属于控制类对象,Reply对象属于实体类对象。

  1.1 ASP.NET下Web应用表示层的架构
  表示层是用户和软件交互的接口,对于Web程序设计而言就是基于HTML的界面。主要职责就是为用户提供信息,以及把用户的操作传送给逻辑层和数据处理层。从使用案例事件流图中,可以确定用于交互的页面个数,再从案例时序图中,可以确定用于和用户交互的页面和服务器端的ASPX页面关系。图2是修改自己回复案例用到的页面关系图。

       Papers(View)页面对应用户查看某篇论文的页面,Papers(Edit)页面对应用户查看自己回复的页面。从案例时序图中可以得知它们都是Papers服务器页面在两个不同状态下产生的页面。为了克服传统Web窗体页本身无状态这一固有限制,ASP.NET页框架提供了一种“视图状态”(view state)的功能,此功能会在往返行程之间自动保留页以及页上所有控件的属性值,ASP.NET这种特性为数据表现层设计提供了极大的便利。ASP.NET还 采用了由服务器控件引发的事件的工作方式。Web窗体控件事件模型要求在客户端捕获事件信息,并且通过HTTP发送将事件消息传输到服务器,框架再解释该发送以确定所发生的事件,然后在要处理该事件的服务器上调代码中的适当方法。通过上面的两项技术ASP.NET框架提供了可以创建传统客户端/服务器Web交互的抽象模型,使开发者能够使用支持快速应用程序开发(RAD)和面向对象编程 (OOP)的传统方法和工具来进行应用程序编程。因此,可以根据角色与系统交互的事件流图和页面关系图来架构ASP.NET下Web表示层:


  (1) 从页面关系图出发,确定系统中用到的主要功能界面。
  (2) 根据ASP.NET中Web控件的特点,对确定的功能界面进行可视化页面布局:
  (3) 从事件流图出发,确定功能页面之间以及页面状态之间转移逻辑关系,根据ASP.NET中Web页面级状态管理功能和服务器控件属性、事件编程模式,编写部分页面之间以及页面状态之间转移代码。
  在NET开发工具中,可以使用“所见即所得” 页面设计工具对整个页面进行可视化布局,在实现这些页面之间以及页面状态之间转移逻辑关系代码时,可以在Web窗体设计器“设计” 视图中, 通过修改对象属性或编写事件完成页面的逻辑关系代码

 

 1.2 ASP.NET下Web业务逻辑层的架构
  业务逻辑层是整个Web应用系统信息和逻辑处理中心,在时序图中反应为由负责时序图流程的控制对象构成。业务逻辑层也是联系Web应用系统表示层和数据存储访问层的纽带,因此Web业务逻辑层在整个系统的架构中至关重要。从案例时序图中,可以确定控制对象以及控制对象与其它对象所需提供的服务。图3是“修改自己回复”案例的时序图中的users控制对象的类图。由于ASP.NET提供了一种所谓的后台代码,可用于分离用户界面和逻辑代码,而 ASP.NET本身也完全支持基于模块与组件开发,因此,为采用面向对象的技术架构逻辑层提供支持,可以从系统用例图和时序图出发在ASP.NET下架构Web业务逻辑层:


  (1) 大多数 Web 应用系统都是属于信息管理系统,所以控制对象可以按照使用系统的角色进行划分控制类。
  (2) 从案例时序图出发,确定控制对象所需的功能。
  (3) 采用.NET组件方式包装 Web业务逻辑层中的功能,从而使逻辑层和表示层在物理上分开。
  在.NET开发工具中,可以采用“类”文件的方式实现Web业务逻辑层中的组件,在工程项目中可以采用添加引用的方式把“类”文件引入Web工程中,这样Web业务逻辑层的功能就可以以对象的方式在应用Web系统的开发过程中使用。


  1.3 ASP.NET下Web数据访问层架构
  数据访问层作为业务逻辑层访问数据存储层的数据访问接口,其主要职责是为数据存储层进行抽象封装,使数据存储层从业务逻辑层看来能完全透明。从案例时序图可以确定实体对象、实体对象的属性及实体对象为控制对象所需提供的服务。图4是“修改自己回复”案例的时序图中“Replys”实体对象的类图。点管理机制系统。它按照对等网络中节点的网络特性对节点进行分组,分组内节点按照传输性能进行分层,通过赋予网络自组织、自适应的功能来增强组播系统的传输性能。在一个大的对等网络中,节点根据分组标准自主形成中小规模的组播群,数据传输主要集中在组内进行。组内管理采用动态集中式控制,主节点掌握了组播组内成员的全局信息节点通过彼此交换信息动态调整组内位置,使得分组内的数据传输性能最优化,从而加强了整个网络的性能。另一方面,由于采取了分组的机制,服务器仅需维护分组信息即可而不用管理所有节点,节点的加入、管理和数据传输等完全由节点间P2P完成,极大地减轻了服务器的负担,提高了可服务的节点数目。采用这种节点分组、组内分层的节点自组织管理机制,能够调整各节点在对等网络中的位置, 满足异构网络中各节点所处的不同网络环境。通过组内动态调整,使得输出带宽大的节点处于分组的顶端位置,加快数据的分发从而提高多播的效率以减少数据延时。采取这种上层以tree与下层以mesh为主体的混合结构,极大地增强了网络的鲁棒性。当网络条件变化时,整个网络会随之动态调整。如新节点的退出或失效不会导致转发路径的断裂,转发路径具有自我修复、自我最优化的能力。因此,这种节点管理机制可以应用于大型文件的共享、流媒体等多种场合。

  在实际的应用中,面对复杂的网络环境,如何较为准确地判断节点间的网络距离,进一步强化分组算法和组内管理算法,还有很多工作要做,这是在未来的工作中重点研究的内容。

 

1.4 ASP.NET下Web数据存储层架构
  数据存储层的主要功能是把数据访问层的数据处理功能转换为具体的数据库或文件操作。从案例时序图中,可以确定实体对象以及实体类型的属性。实体类中的每个属性可以与数据库中的字段相对应,即每个实体类可以与数据库中的一张表对应。因此,在ASP.NET的Web应用系统中,可以通过System.Data.OLEDB命名空间或 System.Data.SQL Client??[4,5] 命名空间中的数据库访问和控制类型构造与具体数据库相适应的类。在数据存储层对实体对象的属性和服务的访问中,可以通过这个类完成对数据库的访问和控制。


  2 结论
  采用四层架构的思想,并运用UML的对象特点进行类的划分的架构设计,使得代码编写逻辑清晰,易于管理和维护,并且具有很好的代码的可重用性、适用性、易维护性和可移植性。四层架构的编写完全可以由四组人员同时进行,这样代码的维护管理上就更加清晰,并且可以缩短开发周期。但是同时进行的四层代码编写,需要有良好的前期的需求分析的支持。只有完备的需求分析(例如:使程序设计人员都清楚项目所包含或者项目中需要的类名和功能名称,当项目统一使用的时候,就不会因为名称不统一导致引用错误等问题),才可能真正实现四层架构的并行设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/498474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[CF复盘] Codeforces Round 871 (Div. 4)20230506

[CF复盘] Codeforces Round 871 Div. 4 20230506 总结A. Love Story1. 题目描述2. 思路分析3. 代码实现 B. Blank Space1. 题目描述2. 思路分析3. 代码实现 C. Mr. Perfectly Fine1. 题目描述2. 思路分析3. 代码实现 D. Gold Rush1. 题目描述2. 思路分析3. 代码实现 E. The La…

UNeXt:基于 MLP 的快速医学图像分割网络

UNeXt是约翰霍普金斯大学在2022年发布的论文。它在早期阶段使用卷积,在潜在空间阶段使用 MLP。通过一个标记化的 MLP 块来标记和投影卷积特征,并使用 MLP 对表示进行建模。对输入通道进行移位,可以专注于学习局部依赖性。 UNeXt 基本架构 U…

考研数学高数1-1综合测试-函数及其性质

今天听完强化课之后去做学习包的题,发现没带平板,如果写到纸上,塞到书里又不知道去哪了,所以索性就拿Latex写了,虽然有一点麻烦,但是好在数量不多,就这么写吧。 都是我自己写的过程,…

第三十八章 Unity GUI系统(下)

上一章节我们将了UI的锚点,关于锚点我们只讲了一半,因为锚点并不只是一个点,它还可以是一个矩形。 我们可以将锚点拆开(鼠标选中后拖动),也就是将“四瓣雪花”拆成“四瓣”。那么此时锚点就成为一个矩形。我…

00-docker篇: linux系统安装docker操作 (最实用的操作)

目录 1. docker 简介 -> 简易理解: -> docker是否有自己仓库呢 -> docker 是靠什么运行呢 -> 简单说点docker优点 2. linux安装docker ps: 如果是新服务器 请直接看2. 3 -> 2.1: 查看内核版本: -> 2.2 如果有残留docker, 删除指令 -> 2.3 yu…

2023年全国职业院校技能大赛网络建设与运维-网络运维部分

全国职业院校技能大赛 网络建设与运维 五、网络运维 某单位网络拓扑架构如下,交换机连接两台服务器,其中Server1服务器是数字取证服务器,Server2服务器是应急响应服务器,通过交换设备相连,通过路由设备连接到安全设…

Portraiture4最新版滤镜P图一键磨皮插件

今天coco玛奇朵给大家带来了一款ps磨皮插件,超级简单好用。Portraiture 滤镜是一款 Photoshop,Lightroom 和 Aperture 插件,DobeLighttroom 的 Portraiture 消除了选择性掩蔽和逐像素处理的繁琐的手工劳动,以帮助您在肖像修整方面…

如何使用 ChatGPT 来快速编写产品需求文档(PRD)

PRD 生成 ChatGPT 即了解具体的编程知识,也了解编程之前的需求设计过程。因此产品经理也可以使用 ChatGPT 来快速编写PRD(产品需求文档, production requirement documentation)。 根据需求编写 PRD 首先,我们可以尝试把需求交给 ChatGPT,…

模型如何压缩?使用轻量化的模型压缩技术剪枝(pruning)

深度学习模型参数太多,本地服务器部署没有问题,但是如果部署到移动端、边缘端,像手机、树莓派等,它们的性能不能满足,所以我们要压缩模型大小,让他们可以部署到边缘端 模型压缩:使用轻量化的模型…

Redis 布隆过滤器总结

Redis 布隆过滤器总结 适用场景 大数据判断是否存在来实现去重:这就可以实现出上述的去重功能,如果你的服务器内存足够大的话,那么使用 HashMap 可能是一个不错的解决方案,理论上时间复杂度可以达到 O(1) 的级别,但是…

Flutter 开发的那些小细节

Flutter 创建应用的小注意 包名 每当创建一个新的 Flutter 应用时,一些 Flutter IDE 插件会请你输入一个类似 com.example 的包名,包名(在 iOS 里叫 Bundle ID)一般都是公司域名的反写。如果你的应用打算上架商店,建…

NetApp 7-mode下Autosupport日志的收集

前面介绍过NetApp Cluster mode下autosupport日志的收集方法,最近遇到很多7-mode下客户扔出一个有故障指示灯的照片,然后让你判断问题的case。NetApp没有一个命令能很清晰的把所有的和硬件有关的问题列出来的命令。客户随之就说,要不输入一条…

【操作系统OS】学习笔记第三章 内存管理【哈工大李治军老师】

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享。 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0…

《机器学习算法竞赛实战》-chapter6模型融合

模型融合 模型融合常常是竞赛取得胜利的关键&#xff01; 具有差异性的模型融合往往能给结果带来很大的提升。虽然并不是每次使用模型融合都能起到很大的作用&#xff0c;但是就平常的竞赛经验而言&#xff0c;尤其是在最终成绩相差不大的情况下&#xff0c;模型融合的方法往往…

法规标准-GB/T 39265标准解读(2020版)

GB/T 39265是做什么的&#xff1f; GB/T 39265全名为道路车辆 盲区检测系统性能要求及试验方法&#xff0c;其中主要是对BSD系统的性能要求及测试步骤进行了介绍。本文仅解读M1、N1类车辆相关内容。 一般要求 系统开启与关闭 1.BSD系统应具备手动开启和关闭的功能 2.手动关…

巧用 exports 和 typeVersions 提升 npm 包用户使用体验

默认导出 对于开发一个 JavaScript 三方库供外部使用而言&#xff0c;package.json是其中不可缺少的一部分 一般而言&#xff0c;对于库开发者来说&#xff0c;我们会在package.json中指定我们的导出入口。一般而言会涉及两个字段main和export&#xff0c;它们会涉及到当前模…

开关电源基础03:正激和反激开关电源拓扑(2)-半桥和全桥拓扑

说在开头&#xff1a;关于薛定谔的波动方程&#xff08;3&#xff09; 波动方程在矩阵派的内部也大受欢迎&#xff0c;首先是海森堡的老师索末菲&#xff0c;然后是建立矩阵力学的核心人物之一的另一位老师&#xff1a;马克思.玻恩。玻恩在薛定谔方程刚出来时就赞扬了他的成就…

宕机了?!DolphinScheduler 高可用和 Failover 机制关键时刻保命

点击蓝字 关注我们 高可用性是 Apache DolphinScheduler 的特性之一。它通过冗余来避免单点问题&#xff0c;所有组件天然支持横向扩容&#xff1b;但仅仅保证了冗余还不够&#xff0c;当系统中有节点宕机时&#xff0c;还需要有故障转移机制能够自动将宕机节点正在处理的工作转…

【react 全家桶】高级指引(上)

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录 12 【react高级指引&#xff08;上&…

I.MX6Q-SDB开发板移植ubuntu

I.MX6Q-SDB开发板移植ubuntu 0.前言一、准备工作二、ubuntu移植1.下载ubuntu发布的根文件系统2.根文件系统的简单修改3.板卡适配设置4.打包根文件系统 三、烧写镜像1.dd命令2.uuu工具3.mfgtool工具4.i.mx6q-sdb的拨码设置&#xff1a; 四、大无语事件 0.前言 这两天收拾杂货堆&…