.NET开发平台

2024-09-13

.NET开发平台(精选12篇)

.NET开发平台 篇1

AMF是Action Message Format协议的简称,是Adobe独家开发的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,为Flash播放器与Flash Remoting网关通信提供了一种轻量级的、高效能的通信方式。目前,AMF已被广泛应用到互联网的各个领域。

然而,复杂的二进制数据格式给基于AMF的开发带来了很大不便,直接解析和编码AMF数据是一项非常艰苦和枯燥的工作。于是,基于各种开发语言的AMF组件应运而生,Fluorine Fx便是其中之一。

Fluorine Fx是基于.NET开发的具备AMF数据解析功能的免费组件,它给广大.NET开发人员带来了福音,大大提高了.NET平台下进行AMF开发的效率。

本文抛砖引玉,介绍了在Visual Studio 2005平台下,使用VB.NET结合Fluorine Fx组件进行AMF开发的基本方法。

1 AMF数据包格式

AMF是顺序存储的二进制数据,每个AMF数据包都可分为3部分:版本号、AMF头和AMF主体。

1)版本号:

表示AMF版本,固定占2字节,16位整数,值为0(00 00)表示AMF0,值为3(00 03)表示AMF3。

2)AMF头:

每个AMF数据包可以包含多个AMF头,这一部分的第1、2两个字节用一个16位整数表示AMF头的数量,之后是顺序排列的AMF头。每一个AMF头按顺序由4部分构成,如下图所示。

头名称:一个UTF string,表示头的名字。

是否必须:一个Boolean,表示该头是否是必须的。

头长度:一个32位整数,表示头的长度。

头数据:某种类型的AMF数据,表示头的具体内容。

3)AMF主体:

一个AMF数据包中可以包含多个AMF主体,与AMF头一样,这一部分的第1、2两个字节用一个16位整数表示AMF主体的数量,之后是顺序排列的AMF主体。每个AMF主体的结构如下图所示。

Response:一个UTF String,表示请求的类和方法或响应的结果。

Target:一个UTF String,是一个标识,其作用就是为了实现请求和响应的对应,通过Target找到该响应对应的请求。一般使用自增整数。

主体长度:32位整数,表示主体的长度

主体数据:AMF格式的二进制数据序列,表示主体的数据,我们实际要传输的数据就放在这一部分。

2 AMF数据解析原理

整个数据处理的过程根据数据传送的方向,应分成发送和接收两大步分别处理,数据处理流程分别如图1。

发送时,先通过程序处理,将需要传送的数据以.Net支持的数据格式存储(建议使用自定义的类的实例存储),然后调用Fluorine Fx将这些数据转换成AMF二进制数据,保存到字节数组中,再向外发送。

接收时,先将从外部接收到的数据以二进制形式保存到字节数组中(即AMF二进制数据),然后调用Fluorine Fx将这些二进制数据转换成.Net数据,并存储到自定义类的实例中,再交给程序进行处理。

3 Fluorine Fx的安装与使用

1)下载并并安装Fluorine Fx组件

首先在Fluorine Fx官方网站下载并安装Fluorine Fx组件,安装过程比较简单,一路“next”,直到安装完成。

2)在VB.NET项目中引用Fluorine Fx

Fluorine Fx组件安装完成以后,重新启动Visual Studio 2005,新建VB应用程序项目(或打开已有项目),通过菜单“项目”?“添加引用”,弹出“添加引用”对话框(图3),在.NET列表中找到“Fluorine Fx for.NET Framework 2.0”,添加引用。于是,在对象浏览器中就有了“Fluorine Fx”命名空间(图4)。

如此以后,就可以在程序中调用Fluorine Fx编写代码处理AMF数据了。

4 程序范例

Fluorine Fx中提供了一个命名空间AMF3,利用这个命名空间里提供的对象,能够很轻松的处理AMF数据。下面的范例使用了其中的Byte Array对象。

假定项目中已定义如下类来包装需要传递的数据:

则上述流程图中编码和解码两个步骤的功能我们可以用以下两个函数实现:

1)编码函数en Code:

2)解码函数de Code:

从以上代码可以看出,Fluorine Fx提供了丰富的接口用于处理AMF数据,使.Net平台下的AMF数据处理工作变得轻松而高效。愿广大.Net开发者早日掌握Fluorine Fx这把利剑,轻松玩转AMF。

参考文献

[1]李春葆,金晶,曾平.VB.NET2005程序设计教程[M].北京:清华大学出版社,2009.

[2]Tapper J.Flex3权威指南[M].杨博,译.北京:人民邮电出版社,2009.

[3]Adobe官方文档.AMF3协议中文版[EB/OL].许江华,译.http://wenku.baidu.com/view/eaf5d3c708a1284ac8504327.html.

.NET开发平台 篇2

这个问题自己琢磨吧

2. 你喜欢独立工作还是团队工作?

这个问题其实没有对错之分,跟用人单位的工作环境和项目有关,有的单位喜欢独立性高的人有的人喜欢团队型的人,最好还是能证明自己既能独立工作又有很好的团队协作能力

3. 你对纯手写HTML有没有足够的信心?

这主要是考察你对HTML的熟悉程度,如果你一直用DW或者其他可视工具, 这一关估计要吃亏

4. 什么是w3c?

这要是考察你对web开发的标准有没有了解,最好能给出一些例子来证明你做的东西是符合w3c标准的

5. 你能写不用table的XHTML吗? 你校验你的代码吗?

感觉大部分人还是用table布局的,不过也要有不用table布局的能力

6. 你有哪些最喜欢的开发工具?为什么喜欢?

7. 证明一下你比较熟悉linux/unix shell环境

8. 你对那些技术比较感兴趣?你想学的有哪些技术?

9. 能给我看看你的作品吗?

10. 你以前参与过多大规模的网站开发?

11. 给我看看你的代码

12. 从web开发角度,你最欣赏哪些网站?

13. 请把这段代码给修改一下,告诉我又什么问题

14. 如果你开发的一个网站打开以后是一个空白页,请告诉我你会通过如何步骤进行troubleshoot?

15. 你最喜欢哪种开发语言?为什么?

.NET开发平台 篇3

关键词:教学改革 课程体系 教学方法 程序设计

中图分类号:G424.1 文献标识码:A 文章编号:1674-098X(2012)12(b)-0-01

计算机学科的发展给社会生活带来了极大的变化[1]。高校作为培养计算机人才的摇篮,必须不断调整计算机专业培养模式,完善课程体系,革新教学内容,以便培养出与时俱进的高素质计算机专业应用人才。《.NET平台和C#开发》课程作为计算机专业的专业方向课,在整个课程体系中占有重要的地位。它不仅是计算机及软件等相关专业学生所必须掌握的先进的开发技术之一,也是该专业及相关专业的核心专业课程。

1 课程教学现状分析

从调研结果来看,在重点院校中,大部分的院校开设了《.NET平台和C#开发》专业方向课,并且课时约在56~75标准课时之间,部分学校还增开了36学时的课程设计。普通院校开设该课程的比例比重点院校略低,而且课时量明显偏少,约在32~60标准课时,且多数为选修课程。而在高职类院校中,该课程的设置则呈上升趋势,今年开课院校比去年明显增多[2]。2010年,我校开设该课程,给定教学课时为56学时,含实验24学时。目前主要存在问题有:(1)课程开设时间单一,顺序不够合理。我校东校区在大三上学期开设此课程,而工商学院在2010年时为二年级开课。由于东校区计算机专业是一本招生,大部分同学基础较扎实,选择在三年级开课较合理。而工商学院由于是三本招生,同学的基础相对薄弱,在大二开设该课程带来了一些问题。授课过程中,通过与同学的接触、观察、沟通、考核显示,工商学院的成绩两极分化较严重,平时成绩好的同学在期末考试中甚至超过东校区的同学,但总体成绩普遍偏低。故此,可知工商学院在该课程的设置时间上需要改革。(2)学时偏少,实验比重偏小。我校《.NET平台和C#开发》课程学时安排情况为32(上课)+24(实验),课时明显偏少,尤其是实验部分。由于该课程是一门实践性较强的课程,24课时实验很难完成一个项目的设计及实现。同时,由于没有设置综合性课程设计部分,整个课程的实践环节就显得非常薄弱。(3)授课方式及考试形式不够科学有效。目前,我校均采取多媒体教室集中授课,实验室统一实验的形式完成该课程的教学。由于该课程实践性较强,学生不能够及时进行实践,课后实验时,学生不能再现教师课上所强调细节的情况尤为突出。考察形式在一定程度上对学生的学习起着较强的导向作用。我校统一的闭卷笔试导致了学生仅仅了解语法,真正调试程序时束手无策的情形发生,失去了该课程原本的强实践性的特点,也就不能凸显其正确引导学生学习方向的目的。(4)教学资源有待进一步完善。目前,我校该课程刚开设不久,授课教师团队处于进一步优化阶段,实验所用题库尚处于建设完善中,能够供学生上机学习的课程教学网站也处于试运行阶段,考试系统所必须的题库还需进一步完善。

2 改革的思路和方法

为发挥《.NET平台和C#开发》课程在培养计算机专业人才方面的优势作用,须从以下方面进行改革。(1)教学大纲分类制定,因材施教。实施目标分级,教学分级,符合教学中的可接受原则和因材施教原则[3-4],从课程开设时间上进行改革。制定分级教学大纲,以不同的教学目的在大二年级和大三年级同时开设该课程,或者通过选课的方式,允许不同层次的学生,在不同时间学习该课程,则教学效果会更加理想。(2)采用兴趣驱动和案例教学等教学方法和手段。兴趣是激发学生有效学习的关键因素。以培养学生兴趣为主导,使学生有兴趣地深入学习,教师可以采用多样化的课堂教学方法和手段进行教学,如案例教学法。在此过程中,教师还可因势利导地培养学生的创新意识,使学生掌握动态思维方法,提高他们的抽象思维、逻辑思维,以及程序设计能力[5]。(3)采用一体化教学模式。一体化教学模式将上课地点由传统的多媒体教室改到机房,使得学生在上课期间即可进行实验,从而打破教师讲授时学生只听课的传统教学模式,强化同学即时实践的环节。该模式的优点在于能够及时发现问题和解决问题,进一步增强学生学习的自主性,提高动手实践能力。同时配合课程设计,学生的动手能力及项目设计能力一定会得到很大程度的提高,也更能体现出该课程的强实践性的特点。(4)实施面向能力的考核机制。传统的纸质笔试并不适合所有的课程,尤其是该类实践性较强的课程。该课程的考核应放到实验室中,采用上机的方式进行。具体的考核方式改为平时上机实验加期末上机编程考试,并辅以综合课程设计的考核。以平时上机为引导,以考试编程为驱动,能够使得学生的学习目标更加明确,实践能力也将会得到充分的锻炼。

3 实践效果

对比2010年同时开课的东校区08级和工商学院09 级学生的期末笔试成绩,发现东校区学生的期末成绩分布情况较工商学院更加理想。这也充分证实了在基础扎实的大三年级开课能取得更好的效果。所以,工商学院也已在2011年将该课程开课时间调整为大二和大三分时开课。结合东校区09级学生上机考试和08级学生笔试考核的考核效果,可知考核形式改革后,采用上机考试的学生整体成绩有较明显的提高,成绩分布较采用笔试的08级同学成绩更加合理,且基本成绩分布良好。工商学院学生上机考试成绩也具有相同的情况。随机调查也显示,采用上机考试后学生的动手能力明显提高。

4 结语

研究及实践发现该课程的改革取得了较好的效果,同时该研究也已得到学院师生和学校的充分认可,证明了该课程改革的正确性和必要性。

参考文献

[1]李未.关于提高计算机本科教育质量的几点思考[J].计算机教育,2010(1):4-6.

[2]罗小平.高级语言程序设计教学中若干重要环节的实施[J].广东农工商管理干部学院学报,2000(4):48-51.

[3]侯旋.计算机文化基础课程新型教学法的分析与研究[J].现代电子技术,2005(24):66-68.

[4]教育部高等学校计算机科学与技术教学指导委员会.高等学校计算机科学与技术专业公共核心知识体系与课程[M].北京:清华大学出版社,2008:103-111.

.NET平台下开发框架体系研究 篇4

(1) 框架应具备较好的通用性, 能应用于大多数基于B/S和C/S模式的项目开发。 (2) 框架应具备较强的安全性, 能保障系统的稳定运行。 (3) 框架应该是分层设计, 各层组件可以部署在一台服务器上, 也可以部署在多个系统中, 从而使整个系统具有很好的可扩展性。 (4) 多个开发人员可以共享数据库的连接。因为数据库连接不是表示层直接实现的, 而是由中间层调用数据访问层完成的, 通过同一中间层就可以实现对数据库连接的共享。 (5) 如果业务发生变化, 确保可以重新部署所有程序。

2、框架体系结构

现阶段的系统开发大多是基于B/S或者C/S模式, 相应的表示层通常表现为web和winform方式, 为了体现出更好的灵活性和通用性, 本框架没有对表示层进行设计, 而是在表示层下面加入了应用接口层, 应用接口层提供了表示层和下层之间的接口, 体现了设计模式中的依赖倒转原则, 降低了程序各部分之间的耦合。

这样, 框架可以同时应用于windows应用系统和web应用系统中。对于传统数据访问控制层, 可以再分为数据服务层和数据库操作层。其中, 数据服务层封装了三种数据访问方式:本地访问、分布式远程访问和Web Service访问。为了实现不同数据访问方式的调用, 还必须加入核心调用层的设计。同时, 框架还加入了安全防护层, 确保系统具有较好的安全性。

(1) 表示层。表示层是客户端的用户界面, 负责从用户方接收命令, 请求, 数据, 传递给应用接口层处理, 最后将结果呈现出来。根据不同的需要, 表示层可以表现为web或winform方式。 (2) 应用接口层。应用接口层作为用户表示层和下层的接口, 负责给用户表示层提供组件的访问接口, 并且负责封装用户表示层传入的数据信息。同时, 表示层还可以作为隔离层, 将用户界面与各种业务功能的具体实现隔离开来。 (3) 核心调用层。核心调用层根据配置文件的配置信息, 确定所需要调用的服务方式, 启动数据服务层。 (4) 数据服务层。数据服务层封装了三种不同的数据访问方式, 分别为本地访问、分布式远程访问、Web Service访问, 并且通过.NET特有的反射机制, 动态调用相应的数据库操作。 (5) 数据库操作层。数据库操作层定义了数据库操作组件, 执行对应的数据库操作, 返回结果集。

3、框架中的配置管理规范

.NET多层开发框架中的配置管理规范主要由配置文件Envir onment Manager。config和配置文件管理类Environment Manager组成。配置文件Environment Manager。config为标准XML格式文档, 规定了框架中各种配置信息的读写规范, 其主要内容包括:数据库连接信息、数据服务层实现方式信息和服务器管理信息等。

数据库连接信息定义了数据库的路径、数据库名、连接密码等基本信息;数据服务层实现方式信息定义了框架中数据服务层的实现方式, 分为Local、Remoting、Web Service三种;而服务器管理信息定义了对服务器进行管理控制的相关信息, 供服务启动和数据操作层使用。

配置文件管理类Environment Manager负责管理配置文件, 包括配置文件的路径、配置文件加载、配置文件中对应的键值的获取、验证等功能。

4、框架中的数据传输与共享

按照基于设计模式的软件开发方式, 框架的设计应该遵循接口与实现分离的原则, 即使利用已有的模块, 只要知道它预定义的接口和实现的功能, 不用关心其实现的细节, 对于我们具体的实际应用来说, 应该保证在确定输入和输出数据的情况下, 尽量实现“黑盒重用”。因此必须预定义框架中数据的输入和输出形式, 可以设计一个通用的数据传输共享类, 用来传递数据, 需要实现的共享信息主要包括:系统信息、用户信息、用户操作信息、操作数据信息、返回数据集信息。根据需要将共享信息封装到两个类中:操作参数类和数据传递基类。

4.1 操作参数类

操作参数类Request Parameter由环境信息和用户操作信息组成, 用于向框架各层之间传递信息。环境信息包括系统信息和用户信息。这里的系统信息和用户信息包括系统时间、登陆系统的主机名称、IP地址、用户ID等。环境信息由配置文件管理类对象Environ ment Manager获取, 用于应用接口层向下传递给核心调用层。用户操作信息包括用户调用的框架类和具体操作信息。

4.2 数据传递基类

在对数据库的操作过程中, 一般是以Data Table的形式返回数据集信息。同时由于用户在进行数据库操作时, 需要传递不同的操作参数, 这样就可以设计一个数据传递类, 专门用于数据的传递。这里由于用户传入参数的不确定性, 只定义数据传递基类Base Appli cation Data, 具体某部分进行数据传递时, 继承基类的实现, 加入具体的参数即可。数据传递基类的实现主要包括两个方面:一是获得参数的抽象函数接口, 二是获得结果集的抽象函数接口, 可以通过继承的方式定义具体参数类型和结果集类型, 并且具体实现这两个函数。

5、结语

实践证明, 基于开发框架的应用开发模式和传统的开发模式相比, 在系统开发前期不需要投入较多精力进行系统框架的搭建, 只需要建立开发框架所需要的运行环境, 搭建好开发平台, 就可以在此基础上快速开发应用程序, 能很大程度上缩短项目开发周期。

摘要:Microsoft.NET是基于互联网的全新架构, 利用其提供的ASP.NET、ADO.NET和XML等组件, 以及Web服务, 开发基于.NET框架的应用系统。实践证明, 使用.NET框架可使应用程序的开发、部署及与其他网络系统集成变得更容易, 并可提高软件稳定性和安全性。

关键词:.NET框架,ASP.NET,ADO.NET

参考文献

[1]金正淑, 闰文耀, 陈亚军, 等.基于.NET技术的网上办公模型研究[J].计算机工程, 2010, 32 (12) :263-265.

.NET开发平台 篇5

最近园子里好多人谈到了招聘面试,特别是多线程这个问题出现了很多次;多线程也是我在面试中很喜欢问的一个题目,和大家分享一下(仅限.net)

为什么喜欢在面试中问这个问题

因为这是一个很好的了解面试者知识深度的问题,在现代CPU都是多核的背景下,多线程作为一种能充分发挥CPU资源的技术使用的越来越广泛.而且这个问题可以把普通的应用开发人员(增删改查)和有一定技术深度/专研精神的人区分出来

背景:

面试.net中高级软件工程师/架构师(事先可能不知道对方的目标等级,要在这次面试过程中确定)

本文只是单纯的一个技术面试的一个问题而已,不是完整的一个面试

以下是我的一般面试流程(不是所有的,不过60%都会在下面,所有问题都不是定死的,会看对方的情况再安排)

A 了解(要求简述,看回答的水平和方向选择2,3,4,5中的一个)

B 不了解(到结论1)

A 准确描述线程池的意义和使用场景;并且能深入介绍线程的资源消耗 [最好还能列举多种类似设计的比较](到问题4)

B 准确了描述了池的意义,并能描述对应的使用场景, 例如很多短时间的操作会用线程池中以避免构建线程的资源消耗(到问题3)

C 能描述使用场景,但是无法系统的说明原因(到结论2)

D 能系统的的介绍线程池,但是无法描述使用场景(到结论0)

A 能准确描述意义和优劣势, [例如性能,逻辑独立性,额外的性能消耗,线程调度和切换](到问题4 看起来技术细节/底子不错 继续问技术细节)

B 能描述一个准确的使用多线程的场景,但是无法系统的描述多线程的意义(到问题5, 想了解一下这个场景是否真的是他设计解决的,还是他只是其中的一个开发人员)

C 什么都说不出来,或者说不到点子上(结论2)

A 什么都说不出来(结论0/2 太奇怪了之前的问题是背的?这里同步居然说不出来)

B 知道lock关键字,然后其他的不懂(结论2)

C 知道lock autoresetevent 信号量等常见的.net中的同步方式,偶尔还能说跨进程同步(结论3-)

D 知道spinlock monitor event等基本上所有的常用同步方式,知道在某些场景适合用某种方式,但是说不出原因(到问题5 或者结论3)

E 知道user mode和kernel mode.对两者有一些细节上的了解,明白一个线程所持有的资源,能描述出不同同步方式的差别和使用场景,可以对monitor的内部原理作出介绍(结论4 或者到问题5)

A 没有具体的使用场景,(到结论0/2/3)

B 能从某一个角度介绍使用场景,并且能表述为什么当初使用了这个场景(到结论3)

C 作为团队的一员,参加过某个大型项目, 所以有一个很适合的使用场景,但是只讲过猪cucci女包、香奈儿包包、爱马仕包包:|冬装外套、冬装女装、时尚冬装:

:|皮草外套、水貂皮草、皮草大衣:

跑,没吃过猪肉(到结论3)

D 能系统的描述和介绍一些很适合的使用场景,并结合自己的项目经验介绍当初为什么使用这样的设计,同时还能提出优化建议以便能做的更好(到结论4)[可能会提出一个场景让他按照他的经验做现场设计]

初步结论0: 这人可能是事先准备的面试题,或者是听别人介绍过,但是自己从来没用过;接下来我会问问他其他方面的技术问题(特别是细节),确认他是否只会吹牛

初步结论1: 能力<=中级开发人员 [没吃过猪肉好歹要见过猪吧]

初步结论2: 能力在中级开发人员附近[有过不少实践经验,但是没有系统的想过原因,知其然而不知其所以然]

初步结论3: 能力在中级开发人员到高级开发人员之间 [知道点东西,不知道更详细的, 别人交代的任务可以完成的比较顺利,但是想做的很好有点难,需要架构师帮忙控制设计]

初步结论4: 能力在高级开发人员和架构师之间 [对多线程有较深入的了解,能在架构设计的时候选择适合的解决方案,能系统的描述多线程的意义,并给团队其他成员技术支持]

所有的结论都不是定死的,一般还会补充一些问题,或者最后让面试者自由问问题;希望面试者能充分表现他的技术能力在这个点

某些可能会被问到的技术细节:(上面已经提到的就不问了)

1.如果你是个leader/manager 如何解决掉产品里面存在的多线程的bug(你的团队成员水平可能很一般,会写出一些BUG)

2.IO线程和worker线程(window 和.net)

3.后台线程和前台线程

4.Stackoverflow的问题排查(询问线程栈)

5.线程池的配置和影响范围(有没有通过配置优化.net应用程序的性能)

6.有没有做过多线程程序的debug

如何排查某个进程中CPU 100% 的根本原因(假设只在生产环境出现)

出现意料之外的数据怎么处理

8.是否了解TLS thread local storage(可能会问到CallContext)

9.经典案例, 每隔一分钟执行一次的定时任务, 用 thread+ while(true)还是timer

10.一个.net线程的资源消耗

11..net线程和window线程的异同几种常用的概念的性能差别asp.net的线程机制和一些关键配置一些常见的多线程设计的场景 例如 thread1-queue-theads多线程和异步有什么关系和区别

本文描述了一些我个人比较喜欢的多线程方面的问题,以确定面试者是不是有足够的能力和技术深度

顺便看看他是否有系统的分析和解决问题的能力以及足够的知识面,顺便看看面试者的经验和知识体系

此外如此多的描述也是考验对方表达和沟通能力(这是架构师的重要能力)

当然,肯定有遗漏,不足或者误判..还请大家一起讨论讨论

补充(感谢各位在评论中的提醒)

1.这不是一个完整的面试,完整的面试更多是考核面试者是不是适合我们的公司的这个职位;包括说 性格,解决问题的能力,学习能力,团队合作,目前的技术水平

而这只是询问一个技术细节

.NET开发平台 篇6

S-ID系统是通过实时检测、控制现场作业对象的移动状况,从而,具体且准确地指导作业现场人员的操作,实现对存储货位过程中无差错管理的系统。系统通过监测作业状态,从而改善设备的位置和布局,提高作业效率和仓库利用率,无需人工的货位确认,彻底排除了人为过失。

一、基于.NET的超声波定位系统的关键技术介绍

(一)系统技术简介

S-ID技术的原理是在固定的三个空间坐标上设置三个超声波接收点,即受信机,被测物(发信机)间断发射超声波,通过测量三个接收点超声波到达的时间,换算为距离,从而得到被测物的空间坐标。系统构成图如图1所示。

利用锂电池供电。每隔一定时间向受信机发送超声波,当收到受信机发回的红外线后,再发送超声波。

2受信机

在接收到发信机发送的超声波后,将位置信息传回控制器,然后发送红外线,确定收到信息,此时发信机再发送超声波。

3控制器

控制程序通过控制器可以向发信机和受信机发送指令,也可以通过控制器接收来自发信机和受信机的信息。然后将信息发送给上位PC进行处理。

(二)3D编程技术

1D3D

D3D通过HAL(硬件抽象层)提供设备独立;HAL是由设备制造商提供的设备指定接口,D3D直接使用显示硬件来工作,程序才能不需要和HAL交互。应用程序使用D3D暴露的一系列接口和方法而不是HAL提供的机制来使用显示设备。设备制造商在WINDOWS的各个平台上(XP,2000,98等)实现32位编程。HAL可以是显示驱动器的一部分,或和设备驱动器通过一个驱动器生产商定义的接口来通讯的独立DLL(动态链接库)。

D3D HAL由芯片制造商、主板生产商或OEM实现。HAL仅仅实现设备依赖的代码并不竞争的执行。如果硬件没有执行一个功能,HAL就不会将其作为硬件功能来报告。另外。HAL并不验证参数,D3D在调用HAL之前执行参数验证。在微软DirectX 9。HAL可以有三种不同的顶点处理模式:软件顶点处理、硬件顶点处理和同一个设备上的混合顶点处理。纯设备模式是HAL设备的变量。纯设备类型仅仅支持硬件顶点处理,并仅仅允许应用程序查询状态的一个小的子集。另外,纯设备仅仅在有最小化容量级别的适配器上使用。

2OpenGL

OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化仿真,都可以利用OpenGL高质量、高性能的特点。OpenGL已成为独立于应用平台的图形标准,一个典型的OpenGL应用程序可以在任何平台上运行一只需要使用目标系统的OpenGL库重新编译一下。

OpenGL非常接近硬件,是一个圆形与硬件的接口,包括了100多个图形函数用来建立三维模型和进行三维实时交互。QpenGL强有力的图形函数不要求开发人员把三维物体模型的数据写成固定的数据格式,也不要求开发人员编写矩阵变换、外部设备访问等函数。大大地简化了编写三维图形的程序。由于微软在Windows中包含了OpenGL,所以OpenGL可以与Visual系列开发工具紧密接台,简单快捷地实现有关计算和图形算法,并保证算法的正确性和可靠性。简单地说。OpenGL具有建模、变换、色彩处理、光线处理、纹理影射、图像处理、动画及物体运动模糊等功能。

OpenGL的作用机制是客户(client)/控制器(sever)机制,即客户(用OpenGL绘制景物的应用程序)向控制器(即OpenGL内核)发布OpenGL命令,控制器则解释这些命令。大多数情况下,客户和控制器在同一机器上运行。正是OpenGL的这种客户/控制器机制,OpenGL可以十分方便地在网络环境下使用。因此Windows NT下的OpenGL是网络透明的。OpenGL图形库被封装在一个动态链接库内(OpenGL,DLL)。受客户应用程序调用的QpenGL函数都先在OpenGL32.DLL中处理,然后传给控制器Winsrv.DLL。OpenGL的命令再次得到处理并且直接传给Win32的设备驱动接口(De-vice Drive Interface。DDI),这样就把经过处理的图形命令传送给视频显示驱动程序。

而在三维图形加速卡的GLINT图形加速芯片的加速支持下,两个附加的驱动程序被加入这个过程中。一个OpenGL可安装驱动程序(Installable Client Driver,ICD)被加在客户这一边,一个硬件指定DDI (Hard—ware-specific DDI)被加在控制器这边,这个驱动程序与Win32 DDI是同一级别的。

(三)3DSTATE引擎介绍

3DSTATE 3D图形引擎是一套3D图形开发环境,其为通用3D软件开发提供了所有的底层支持。使用此开发环境开发3D软,件,用户不必了解引擎的工作原理,只需将精力放在自身软件的逻辑处理上,剩下的工作将由引擎来完成。

13D STATE3D引擎的特性

(1)高性能

3D STATE 3D引擎可获得较高的FPS(Frames Per Second)值,它在渲染速度(FPS)已接近硬件的理论值。它的画面质量属艺术级的,引擎内部还带有许多特效制作函数,用它们可制作出诸如半透明彩色板、爆炸、水下、水面波纹、3D动画、灯光、影子等特效。

(2)新技术

引擎在渲染速度和图像质量上具有高于其它基于PC机上的引擎的性能。使用3D STATE的3D引擎使得向任意程序添加3D内容变得简单。

(3)简单易用

在引擎SDK中,没有任何新的数据结构和类,都只是基本的APl函数,综合使用这些API函数。即可在较短的时间里开发出高性能的8D程序来。

(4)完全的自我控制

在引擎中,只需通过其API函数在位或字节级别上控制引擎的各方面行为,且在使用本引擎时,仍然可以继续使用其他引擎。

(5)通用性

引擎可用于任何需要3D内容的程序。且针对户内和户外式的程序都做过了优化处理。

(6)完整的开发工具包

引擎的开发包中。附带以下工具:

SDK:在用户所熟悉的开发环境中,可以使用它的API函数集对3D世界进行完整的控制。

World Builder:用它可以通过简单的鼠标拖放操作直接设计出复杂的3D世界。

Terrain Builder:用它可将位图直接转换

为真实的3D地形。

World Text Editor:用它可直接编辑3D世界文件。

World Viewer:用它直接可以打开并看到3D世界文件的内容,便于对世界文件的修改。

(7)DLL技术

由于3D STATE的3D图形引擎采用DLL技术,当引擎版本升级时,用户只需用新的DLL替换老的DLL即可,而不需要重新编译程序。

2.3DSTATE3D引擎基础

(1)3D坐标系

3D坐标系表示为:X轴——其正方向从屏幕里指向屏幕外;Y轴一其正方向从左指向右:z轴——其正方向从下指向上;原点——为(0.0.0)此坐标系也就是引擎中的世界坐标系,它属于绝对坐标系。所有其它坐标系将相对于此坐标系定义,如组的坐标系、目标的坐标系以及摄像机的坐标系,他们都是相对坐标系。在实际使用时,使用相对坐标系往往比绝对坐标系更方便。

(2)句柄

在引擎中,所有目标均有一个句柄(DWORD值),用它来标识一个特定的目标。所有面向特定目标操作的APl函数均接收这个句柄,以确定要操作的对象。引擎API函数中,几乎各组API中均有一个函数STATEZ_is(…),我们可用此函数来判定给定的句柄是否指定类型目标的标识。

(3)编辑器模式(Editor Mode)与观察者模式(Viewer Mode)

引擎有两种运行模式,即编辑器模式和观察者模式。这两种模式的选用由世界文件加载函数STATE_engine_load_world在启动引擎时一次性设置。并且不可实时切换,缺省为观察者模式。引擎运行时可由STATE engine_is_editor mode来识别正在运行的模式。

二、基于.NET的超声波定位系统的实现

(一)设备与控制器之间的技术连接

1C/S模型

即客户端,服务器模型,是一种非对称式编程模式。对于这种模式而言,其中一部分需要作为服务端,用来响应并为客户提供固定的服务;另一部分则作为客户端用来向服务端提出请求或要求某种服务。在实际应用中,程序可以同时包含客户端和服务端。在此系统中。服务端即控制器。

2连接方式

服务器套接口连接中,考虑采用赋给控制器专用端口(50D3)来实现连接。在建立了与控制器套接口的连接后,应用程序会打开客户端的配置文件,对数据库信息进行读取。在与控制器建立连接时,如果连接未成功,则结束连接请求,并提示连接失败;若连接成功,就会对客户端消息进行处理并等待控制器的响应。

(二)数据库操作实现

系统实现中的应用程序页面与数据库之间的操作主要是通过DataTable完成的。DataTable是ADO,NET中的一个类,可用于在程序中以临时表的形式填充数据。程序员可以对DataTable进行定制,通过Spread表格工具实现数据库数据的在线编辑、更新、删除,以及对显示数据进行排序、打印等,这些都方便了系统编程工作。

(三)系统流程

系统的主要工作包括:入库管理、出库管理、库存管理等。

入库作业流程包括:设备连接、确定入库明细、进行入库操作、完成入库。如图2所示。

出库作业流程包括:设备连接、确定出库明细、进行出库操作、完成出库。

(四)系统功能实现

1系统界面

当用户初次使用本系统时,需要分别对控制器、发信机、受信机进行设置,此时系统会把这些值存入数据库中,下次使用时,上一次设置的值即为默认值。点击默认设置以后,用户需要确定要进行的操作。即入库作业或出库作业,选择后下拉菜单和文本框被激活,可以通过它们确定货物的种类及数量,点击“OK”,进入作业监控界面。如图3所示。

2连接界面

用户输入欲连接控制器的IP地址及端口号。然后点击“Connect”按钮,如已连接,则提示已连接控制器;如连接成功,则提示连接成功并返回系统界面;如未连接成功,则提示连接失败;若点击“Close”按钮,则关闭与控制器的连接。如图4所示。

3发信机界面

用户输入要使用的发信机数量,发送时间间隔。点击“Set”按钮确定。然后逐一设置发信机地址,以“Finish”按钮完成设置。如图5所示。

4受信机界面

先设置受信机地址,然后该地址所对应的受信机会自动在下面的下拉菜单中出现,在下拉菜单中选择受信机,并逐一设置坐标,以“Finish”按钮完成设置。如图6所示。

5在库管理界面

用户可以通过此界面查询、修改或删除货物。如图7所示。

(1)查询

在文本框中输入一个货物名称。然后意击“Search”按钮,如存在。则在表格中显示其明细;如不存在,则提示货物不存在;若直接点击“Search”按钮,则在表格中显示所有货物明细。

(2)修改

在表格中有内容的情况下,修改内容,然后点击“Modify”按钮,如修改成功,则提示修改成功并修改数据库;否则修改失败。

(3)删除

在文本框中输入一个货物名称,然后点击“Delete”按钮,如该货物存在,则提示是否确定要删除,选择“是”,则删除,选择“否”。则返回;如该货物不存在,则提示货物不存在。或者在表格中有内容的情况下,选择一行,然后点击“Delete”按钮。也可进行删除操作。

6作业监控界面

用户可以利用光标键或鼠标控制镜头在三维空间内的移动,也可以单击鼠标左键切换跟踪对象,或单击鼠标右键切换自由移动和跟踪两种视角。在屏幕左上角显示了当前两个发信机的坐标(两发信机在图中分别以红、蓝两种颜色色块表示)和用户要的货物,在此例中为一台显示器,当发信机移动到显示器位置时,会弹出提示,询问是否要入库,选择“是”,则操作完成,同时修改数据库,程序返回系统设置界面;如选择“否”,则继续监控作业,如图8所示。出库情况与此相同,不再赘述。

ASP.NET开发基础概述 篇7

当一个HTTP请求到服务器并被IIS接收到之后, IIS首先通过客户端请求的页面类型为其加载相应的.dll文件, 然后在处理过程中将这条请求发送给能够处理这个请求的模块。在ASP.NET 3.5中, 这个模块叫做Http Handler (HTTP处理程序组件) , 之所以.aspx文件可以被服务器处理, 就是因为在服务器端有默认的Http Handler专门处理.aspx文件。IIS在将这条请求发送给能够处理这个请求的模块之前, 还需要经过一些Http Module的处理, 这些都是系统默认的Modules (用于获取当前应用程序的模块集合) , 在这个HTTP请求传到Http Handler之前要经过不同的Http Module的处理。这样做的好处一是为了一些必需的过程, 二是为了安全性, 三是为了提高效率, 四是为了用户能够在更多的环节上进行控制, 增强用户的控制能力。

2 ASP.NET性能优化

2.1 尽量使用静态HTML页面

ASP.NET开发的页面是先在服务器执行然后查询数据库返回数据最终生成HTML送到客户端, 这样来实现数据的动态交互, 运行起来非常方便。但这类程序不得不耗费一定的服务器资源。如果并发量大则肯定会导致服务器响应减慢。

而HTML静态页面是效率最高、消耗最小的页面, 因为它是直接存储在服务器硬盘中的, 当用户请求时, 服务器并不需要做任何处理, 而直接返回该页面, 这样性能消耗最小。因此对于访问量大的新闻频道类的网站, 信息内容的处理方法通常都在后台发布的时候直接生成静态HTML文件, 而不是每次访问都去读取数据库, 这样可以减少数据库的访问次数, 加快网站速度。

2.2 避免不必要的回送操作

在ASP.NET页面的Page_Load事件中的代码, 只要加载一次页面, 都会被执行一次。而按钮类控件比如Button等点击执行的时候, 都会执行回送操作, 这样会激发Page_Load事件而执行其中的代码, 但通常执行Button等点击类事件时, Page_Load事件中的代码是不需要执行的。因此ASP.NET机制中提供了Page.Is Post Back来避免对往返过程来执行不必要的代码。

2.3 关闭不必要的Session状态

Session在ASP.NET中的作用是保存用户的相关信息, 这些信息是保存在服务器端的, 主要用于授权机制。如果Session状态为开启, 则每次调用页面的时候, 都会首先查询Session状态, 虽然单个页面查询Session状态性能消耗小, 但是当并发量大, 访问页面非常多时, 这样显然会影响页面执行速度。因此如果该页面只是用于显示信息, 跟授权无关, 那么请关闭Session状态。比如一般CMS系统的前台页面是不需要Session的, 可以关闭它, 关闭Session的方法是在页面Page指令中加入如下代码:

2.4 关闭不必要的View State

View State在ASP.NET中的作用是保存数据在页面上, 每个对象都必须序列化到View State, 然后进行回传反序列化, 因此使用它是要耗费代价的。ASP.NET默认是开启View State的, 因此如果页面只是用于显示信息, 不用于表单交互, 则可以关闭它, 这样既可以减少View State序列化时耗费的性能, 又可以减小ASP.NET页面本身的体积大小。因为序列化的这些信息都会保存在该页面的HTML源代码中, 会增加页面的体积。

关闭的代码如下:

2.5 尽量在客户端进行用户输入验证

对ASP.NET用户输入进行验证的时候, 比如输入是否合法、是否是数字、格式是否正确、是否为空等, 采用服务器端C#代码来判断虽然非常地方便, 但是每次执行都需要送回服务器进行处理, 这样会大大影响系统的性能。在不必要的情况下尽量采用客户端验证, 比如ASP.NET提供了功能丰富的数据验证控件。

2.6 禁用调试模式

在发布网站之前, 需要始终牢记禁用调试模式。调试模式是在开发过程中用于开发人员调试程序使用的, 如果启用了调试模式, 则该网站的运行性能会受到非常大的影响, 当访问量小时感觉可能不太明显, 如果并发量大, 则网站性能会大大降低。

3 ASP.NET程序开发流程概述

3.1 需求分析

在整个项目中这块可以说是非常重要, 没有需求或者需求不明确, 那么开发人员将无从下手, 所以前期的需求调研是非常重要的, 如果在这块没有好好整理的话将会在后面遇到很多的问题。

3.2 数据库设计

当做好需求分析的时候, 下一个步骤就是搭建整个数据库, 可以说数据库是整个项目中最重要的角色, 一个优秀的数据库设计者就能从这里看出来。

在进行数据库设计的时候主键是必须的, 每个表都有其对应的主键, 而且主键最好用一个不相干的字段ID来表示, 这样方便我们在项目里面写代码。其他的就是一些命名之类的最好要见名知意, 不要使用汉字命名, 还有数据库的设计遵循三大范式。

3.3 编码

首先建立解决方案项目, 最后使用动软生成器生成相应的代码, 然后放到解决方案中, 修改bug, 使动软的代码可以运行, 最后建立web应用程序, 整个架构就是一个典型的三层架构。在各小组项目整合的时候, 如果前期不讨论如何弄的话在整和项目的时候将会遇到许多的问题, 这需要我们在Web应用程序中必须建立相应的使用外部文件的文件夹, 比如我们使用的JS文件我们可以放到Jquerys文件夹下面, css文件可以放到相应的style文件夹下面, 还有调用的dll我们可以放到lib文件夹下面。

动软生成的代码, 我们一般情况下不可以直接在里面操作, 因为那样的话如果数据库的结构变了, 我们需要重新生成代码, 将会覆盖我们的代码, 我们需要给DLL层的用户表里面添加一个分页的方法, 那么可以直接建立一个部分类LYSC_user Ext, 然后实现代码。

对于后台的实现, 后台是分角色写的, 个人有个人的模块, 所以后天的开发尤其能体现出来前面所说的内容, 因为后台分为用户管理、客户管理、企业文化、新闻和人才管理, 所以对应的每个角色都建立一个文件夹, 比如用户对应Users, 新闻对应news, 然后将该使用的easy UI文件夹行放到后台下面, 然后因为在后台用到了富文本编辑器, 所以将富文本编辑器的文件夹也放到下面, 这样就搭建好了整个系统的开发环境, 然后将这个文件发给我们的每个成员, 然后每个成员对应每个成员的开发角色, 在其相应的文件夹下面建立html, 一般处理程序和代码的书写, 在最后合并的时候我们只需要拷贝过来一个成员的文件夹复制到项目里面就行了。

3.4 调试测试

调试非常重要, 在写代码的时候就应该适当的调试, 比如那些很低级的错误, 文本框的长度, 邮件格式, 文本框不能为空等这些本来可以避免的Bug我们应该就不要让其发生, 所以我们在编写代码的时候就应该写完。调试测试最好由专业的团队进行测试, 最忌讳的就是自己测试自己的代码, 那样可能一些潜在的代码始终是测试不出来的, 所以等项目成型之后就要将自己开发的模块分给别人测试, 而你测试别人的模块, 这样使用黑盒测试一下基本通过, 这样一个网站算是成型了。

参考文献

基于.NET煤矿企业报表开发 篇8

报表是企业数据的汇总,它对企业的各个部门领导的决策,起着指导性的作用。因此必须要保证报表数据来源地准确性、数据处理的合理性、数据输出的规则性。但是往往企业报表的数据来源杂乱、处理方式多变、输出形式多样。给报表开发带来了诸多的难题。

煤矿企业内部部门繁多,所涉及到的生产报表有事故报表、罚款报表、入丼人数统计报表、调度主任值班日统计报表等,自然是种类繁多、结构复杂。毫无疑问报表系统开发是煤矿信息化系统中具有相当大挑战性的子系统。本文为了解决这个问题。采用了当今最流行的.NET平台的B/S构架。应用Visual studio 2008和SQL Server等工具进行开发,糅合了ASP.NET、C#、HTML(HyperText Mark-up Language)、JavaScript[1]、SQL,并使它们完美结合,达到了技术最优化程度。按照煤矿企业的需求,成功地开发出了用户界面友好、运行效率高效的报表系统这一子系统。为煤矿企业管理提供了最及时、最准确、最大价值的数据支撑。

1 关键技术

B/S构架[2]:即浏览器/服务器(Browser/Server)结构,是随着TNTERNER技术的兴起,对C/S结构的一种变化或者改进的结构,在这种结构下,用户工作界面是通过WWW浏览器来实现与服务器的交互,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大降低了对客户端计算机的要求,减轻了系统维护与升级的成本和工作量。

.NET平台[3,4]:是微软公司发布的新一代的系统、服务和编程平台,它独立于任何特定的语言或者平台,是一个新的运行库环境和一个全面的基类库,为我们定位、加载和管理.NET类型,同时也负责大量底层细节的工作,如内存管理、安全检查等。利用其面向对象语言的强大功能,开发者可迅速创建基于Web的、数据库密集型的应用程序,能够满足应用程序的开发与扩展的需要。

.NET的核心内容之一就搭建第三代互联网平台,这个网络平台将打破不同的上网设备、不同的操作体统、不同的网站,以及各大机构或行业之间的网络障碍,解决网站之间的协同合作问题,最大限度地实现资源共享。

另外,它不要求程序员使用一种特定的语言程序,可以使用多种.NET兼容语言的任意组合来创建一个应用程序,这样一个程序开发团队中的个人可以采用自己最精通的.NET语言,再各自充分利用.NET的性能、测试和完全优化特性,一个团队很容易开发出功能强大和性能可靠的应用程序。

2 报表总体设计及实现

2.1 需求内容

本文开发的单位是平煤十一矿,经过前期的调研和总结,本矿的报表形式一般涉及到表格形式、柱状图形式和饼状图形式。表格形式的报表包括了标题、表头、表体、表尾和所有辅助的说明文字等内容,其中的文字域既有动态文字域(表格中的内容是给定的)又有动态文字域(表格中的内容是编程生产或者是从数据库中读取)[5]。最终要求生成各类Web报表,具体功能:

1.按照角色权限访问数据。

2.各科室数据的录入。

3.生成报表。

4.报表分析。

5.导出、打印报表。

基于以上的功能需求,集成平台的处理框架如下图:

2.1.1 前台设计

此前台界面采用了HTML、ASP.NET、CSS、JavaScript技术,授权用户进入此Web界面后,当前默认的查询条件是当前的年份和月份,用户也可随意按照自己设置的时间进行查询。查询的结果集将会填充进,以TabName命名的自己所编写的table控件中。然后用户可以把查询结果导出、打印。前台实现效果如图3:

2.1.2 标题实现

报表标题中的年份是动态生成的,其它文字都是静态的,但是所要显示的两行文字的字体不同,一行文字居中,另一行文字居右。据此特性在集成开发环境(IDE)中采用了C#语言与HTML语言的组合,核心代码如下:

='black'>"+Time.Year.ToString()+"年"+Time.Month.ToString()+"月生产事故报表"+"

制表:平煤股份十一矿调度室

";实现效果如图4:

2.1.3 表头及表体实现

以下是建表的基本编程函数:

数据添加函数

//数据修改函数

pan)//合并行函数

//合并列函数

表头中的内容是静态不变的,可以通过静态填充实现,并且表头中都是文字性的内容,要实现矿方提供的样式可以通过以上的几个函数与Table的HorizontalAlign属性来实现。

表体中的数据来源于数据库,当用户按照条件查询时,Web服务器从数据库中读取相关数据,在IDE中按照矿方提供的具体公式对数据进行处理,再填充到Table控件中。

2.1.4 数据库设计

数据库的设计是在Server 2000的企业管理器[6]中实现的,通过调研,对此报表的数据来源,设计了三个表分别命名为He_DepManage(部门管理表)、He_Accident(事故管理表)、He_PlanMonth(全矿月计划表)。表中的设计如下面三张图:

在Web服务器与数据库的交互中,在Server中使用了用来完成特定数据读取的SQL语句集,也就是存储过程[6]。这些语句集经编译和优化后存储在数据库服务器中,用户通过指定存储过程的名称并给出参数(如果该存储过程带有参数)调用即可。大大增强了SQL语言的功能、效率及灵活性。同时可以将复杂的任务划分为多个简单的商业逻辑。

综合以上的综述,一张完整的并且按照矿方需求的生产事故罚款报表就成功开发出,Web效果图如图8:

2.2 具体实现

因为开发过程中所涉及到的报表数目过多,本文就生产事故罚款报表作为讲述对象,图2是矿方提供的一张原始生产事故罚款报表。

矿方要求此表的整体形式不表,只是在责任单位一列中作动态合并,年份用YYYY年MM月形式显示。

3 报表分析

为了让此报表中的数据转变为更高价值的信息知识,对此报表中的数据进行了分析,采用了折线图[4]形式展现出来。通过分析折线图,矿方管理人员可直观的发现问题所在,对下一步的指导生产、消除安全隐患、提高生产安全系数都有着指导性的作用。图9是分析折线图:

4 结论

开发过程中采用的简单化、模块化编程思想,具有通用性,使得开发人员的主要精力投入到客户的特定需求上,并提高的了开发速度。开发出的子系统功能具有良好的可定制性,可以满足该矿各类报表的生成。此报表子系统的成功开发,为该矿管理层的优化管理提供了科学的数据依据。同时,也加快了该矿的信息化建设。

参考文献

[1] David Flanagan. JavaScript权威指南(第四版)[M]. 张铭泽. 北京:机械工业出版设,2003.

[2] 朱印宏,苏震魏. ASP.NET+SQL Server网站模块化开发全程实录[M]. 北京:清华大学出版社,2009.

[3] Andrew Troelsen. C#与.NET3.0高级程序设计[M].朱晔,肖逵. 北京:人民邮电出版社,2008.黄智诚,谢静贤,黄恺昕.中文WORD 2000使用指南[]M.北京:中国石化出版社,2000:3060

[4] H.M.Deitel,P.J.Deitel等. C#高级程序员指南[M].周靖. 北京:清华大学出版社,2003.

[5] 吴雷, 袁兆山, 李超. B/S结构下复杂报表实现技术的研究[J]. 计算机应用研究.2005,23(5):83-85.

.NET开发平台 篇9

在.NET环境下开发Windows服务并不是一件特别复杂的工作, 但在开发过程中有许多细节需要注意, 下文将通过开发一个简单的Windows服务来说明在开发Windows服务过程中应该注意的问题。

1 创建Windows服务项目

在VS2010中创建一个新项目, 选择Windows服务模板, 并将项目名称命名为My Service。在打开的解决方案资源管理器中, 我们可以看到Windows服务项目的文件结构和Windows窗体应用程序项目类似, 只是其中的Form1.cs文件被替换为了一个名为Service1.cs的文件。打开program.cs文件, 我们会看到如下代码:

Service Base类是所有用.NET Framework开发的Windows服务的基类。所有的Windows服务类均必须从该类中派生。在上述代码中, 调用该类的静态方法RUN用于在服务控制管理器 (SCM) 中注册服务器的可执行文件。SCM是操作系统的一个组成部分, 它的作用是与服务进行通信, 并对服务进行管理。下图阐明了这种通信处理序列图的方式。

如果将服务设置为自动启动, 则在系统启动时, 将启动该服务的进程, 进而调用该进程的主函数。服务负责为它的每一个服务都注册一个service-main函数。主函数是服务程序的入口点, 在这里, service-main函数的入口点必须用SCM注册。

2 编写服务代码

创建好Windows服务项目后, 我们需要在项目中添加自己的服务逻辑。双击默认的Service1.cs文件, 我们将看到一个类似于Windows项目的设计界面。注意, 切记不要向其中拖放可视化空间, 由于Windows服务不支持可视化界面, 如果拖入可视化控件, 可能造成服务崩溃。选择这个服务的属性, 可以打开Properties editor窗口。在其中可以配置如下值:

Auto Log指定把启动和停止服务的事件自动写到事件日志中;

Can Pause And Contiue、Can Shutdown和Can Stop指定服务可以处理暂停、继续、关闭和停止服务的请求;

Service Name是写到注册表中的服务的名称, 使用这个名称可以控制服务;

Can Handle Session Change Event确定服务是否能处理终端服务会话中的改变事件;

Can Handle Power Event选项对运行在笔记本电脑或移动设备上的服务有效。如果启用这个选项, 服务就可以响应低电源事件, 并相应地改变服务的行为。

在设计界面中单击右键, 并选择查看代码选项, 我们将看到如下代码:

On Start方法和On Stop方法是从Service Base类继承下来的方法, 我们必须对他们进行重写, 来实现我们自己的服务的业务逻辑。调用On Start方法将启动服务, 该方法的线程不能停滞下来, 必须尽快返回给调用者。这是因为SCM对服务管理得限制, 如果服务的初始化花费的时间过多, 则SCM就假定服务启动失败。为了解决这个问题, 我们通常会利用线程来处理服务的实际工作。On Stop方法与On Start方法类似, 该方法会再服务停止时被调用。

修改Service1.cs中的代码, 添加服务的业务逻辑:

在初始化方法中将业务逻辑绑定到线程上, 并在On Start方法中添加启动线程的方法。该示例完成了一检测QQ进程, 并关闭QQ进程的Windows服务。

3 服务的安装

在Service1的设计界面中, 单击右键, 并选择添加安装程序子菜单, 该操作会向项目文件中添加一个名为Project Installer.cs的文件, 该文件中主要包含了Service Installer和Service Process Installer两个组件。这两个组件均派生于Component Installer类。其中Service Process Installer用于配制进程, 为这个进程中的所有服务定义值, 而Service Installer用于服务的配制, 因此, 每个服务都需要Service Installer类的一个实例。如果进程中有3个服务, 则必须添加额外的Service Installer对象。

在属性窗口中将Service Installer组件的Start Type属性设置为Automatic, 该属性的作用是设置服务的启动方式, 在这里将其设置为自动启动。将Service Process Installer的Account属性设置为Local System。Acount属性的作用是用于配制安装服务时, 使用的权限, 在这里我们使用了本地系统上的用户账户。

配制完安装相关的属性后, 在生成菜单中选择生成解决方案子项, 这时将在项目的目录中生成服务的EXE文件, 注意, Windows服务与普通应用程序不一样, 在操作系统中安装注册以前无法直接进行调试运行, 所有不要直接使用F5运行。

4 编写批处理文件, 安装运行Windows服务

在项目中添加2个文件如下 (必须是ANSI或者UTF-8无BOM格式) :

1) 安装脚本Install.bat

2) 卸载脚本Uninstall.bat

这两个脚本文件使用了installutil.exe使用程序来安装和卸载服务, 这个使用程序可以用于安装包含Installer类的所有程序集。Installuntil.exe使用程序调用派生自Install类的Installer () 方法进行安装, 调用Un Installer () 方法进行卸载。该程序在安装Framework时安装到系统目录下。

5 结语

本文研究了在.NET环境下使用C#语言开发Windows服务的一般方法, 并使用一个简单的案例阐述了Windows服务的开发步骤。在阐述过程中介绍了.NET中实现Windows服务的相关类的使用方法, 以及在开发Windows服务时应注意的的一些细节。通过阅读本文让读者能够轻松的开发自己的Windows服务项目。

参考文献

[1]内格尔, 埃夫琴等著.C#高级编程[M].北京:清华大学出版社, 2010.11.

[2]Mc Connell.代码大全.电子工业出版社[M], 2006.3.

基于.NET的Web服务开发 篇10

网络技术的逐步成熟、开发技术和开发工具的逐步完善, 使得分布式应用软件系统的开发与应用越来越普及。这里的"分布"是指通过网络支持, 将数据和处理分散到不同的系统或平台上, 达到简化客户端需求、整合处理资源、实现数据和处理共享、方便开发和维护等目的。现在已经获得广泛应用的网站发布与浏览系统、MSN/QQ及时通信系统、Email收发系统、移动通信中的短消息系统等等, 都是典型的分布式应用系统类别。

在.NET下进行程序的开发, 运用三层架构可以让代码的可读性和功能的扩展性有着很好的提高。三层架构分别是数据访问层DAL (Database Access Layer) , 业务逻辑层BLL (Business Logic Layer) , 用户表现层 (用户接口层) UIL (User Interface Layer) 。

数据访问层:有时候也称为是持久层, 其功能主要是负责数据库的访问。简单的说法就是实现对数据表的Select, Insert, Update, Delete的操作。

业务逻辑层:是整个系统的核心, 它与这个系统的业务 (领域) 有关。业务逻辑层的相关设计, 均和项目特有的逻辑相关, 例如查询XX, 下订单XX, 添加宠物到购物车XX等等。如果涉及到数据库的访问, 则调用数据访问层。

表示层:有时候也称为用户接口层, 是系统的UI部分, 负责使用者与整个系统的交互。在这一层中, 理想的状态是不应包括系统的业务逻辑。表示层中的逻辑代码, 仅与界面元素有关。

图1中的 (1) 和 (2) 就是三层结构大体的样子。它的好处是结构清楚, 功能模块清晰, 出现异常能迅速定位排除。这种模式开发出来的代码非常美观, 简洁, 阅读方便。

二、Web服务

Web服务 (Web Service) 是一种可以用来解决跨网络应用集成问题的开发模式, 这种模式为实现"软件作为服务"提供了技术保障。而"软件作为服务"实质上是一种提供软件服务的机制, 这种机制可以在网络上开放可编程接口, 并通过这些接口来共享站点开放出来的功能。

通俗的讲, Web服务就是一个应用程序, 它向外界开放出一些能够通过Web进行调用的API, 使开发者能够通过用编程的方法调用这些接口, 来实现一些特定的软件功能, 从而简化开发。

有了Web服务, 只需要在自己的程序中通过访问某个服务的URL地址, 得到一个接口文件。然后, 在实际编程中, 只需要通过这个接口文件来访问服务就可以了。一定要注意, 这个服务既可以运行在我们本地的机器上 (Local host) , 如图1中的 (3) 就是建立在本机上的Web服务的开发;也可以是运行在上互联网上URL地址所指向的地方, 如图1中的 (4) , 尤其以后一种方式居多。

如果项目需要更多的功能, 如查询城市的天气预报或查询股票信息, 而这些功能在一些网站上已经被开发出来, 并以各种方式 (免费或收费) 公开出来供所有需要它们的开发人员来使用, 那么, 尽量使用它们好了。当然, 如果开发人员所在的公司, 也想成为Web服务提供者的话, 同样可以轻松地将他们编写的Web服务在网络上公布出来, 供大家使用。

三、开发环境

Visual Studio 2008 (简称VS2008) 是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具, 代号"Orcas", 经历了大约18个月的开发, 是对Visual Studio 2005一次及时、全面的升级。

VS2008引入了250多个新特性, 整合了对象、关系型数据、XML的访问方式, 语言更加简洁。使用VS2008可以高效开发Windows应用。设计器中可以实时反映变更, XAML中智能感知功能可以提高开发效率;同时支持项目模板、调试器和部署程序。VS2008可以高效开发Web应用, 集成了ASP.NET、AJAX 10, 包含ASP.NET AJAX项目模板, 它还可以高效开发Office应用和Mobile应用。

四、基于本地Web服务的应用程序设计

使用VS2008设计基于本地Web服务的应用程序, 是指用户表示层调用的不是本地的三层架构中的业务逻辑层, 而是引用Web服务来实现相关的功能。这里我们使用上面建立的解决方案来进行开发, 主要用到表示层Web UI和Win Form UI两个项目。具体步骤如下:

建立本地Web服务。打开解决方案资源管理器, 右键单击解决方案"Web App", 选择"添加"--"新建网站"。

在"新建网站"对话框中, 选择模板"ASP.NET Web服务", 语言选择"Visual C#", 位置选择"文件系统", 并将后面的地址信息由"D:ProjectWeb AppWeb Site1"更改为"D:ProjectWeb AppWeb Server"。点击"确定"按钮, 新增Web服务完毕。

VS2008在网站"Web Server"中的默认服务文件"Service.cs"中, 已自动添加一个Web方法Hello World () , 我们在Hello World (方法后面可以继续新增方法。

添加对本地Web服务的引用。在解决方案资源管理器中, 右键单击想要引用Web服务的项目, 比如用户表示层项目"Web UI", 选择"添加Web引用"。

在出现的"添加Web引用"对话框中点击"此解决方案中的Web服务" (也可以在URL输入框中输入本地机器的Web服务地址, 然后点击"前往") 。

单击本解决方案中可用的Web服务"Service"。

图2列出了此服务中定义的所有Web方法。上方的URL下拉框中列出了此Web服务所在的地址, "Web引用名"使用默认引用名即可, 单击"添加引用"按钮。

五、基于Internet远程Web服务的程序设计

和第四部分"基于本地Web服务的应用程序设计"类似, 也可以使用VS2008设计基于Internet的远程Web服务的应用程序。这里使用上面建立的解决方案来进行开发, 实现全国各大城市的天气预报查询功能。主要用到表示层Web UI项目。具体步骤如下:

(1) 查找可使用的稳定的远程Web服务。通过"Google"或者"百度"可以搜索到互联网上很多免费的Web服务, 根据自己的需要进行选择。这里选择一个天气预报的Web服务, Web服务的地址为:http://www.webxml.com.cn/Web Services/Weather WebService.asmx。

(2) 在解决方案资源管理器中, 右键单击"Web UI"项目, 选择"添加Web引用"。

在弹出的"添加Web引用"对话框中的URL输入框中输入上面的Web服务地址:http://www.webxml.com.cn/Web Services Weather Web Service.asmx, 单击"前往"按钮。

对话框列出了此服务中所有定义的所有Web方法和相关的说明, 如图3所示, 这里我们选择调用get Weatherby City Name方法来实现根据城市名称获取该城市的天气情况。"Web引用名"使用默认引用名即可, 单击"添加引用"按钮, 会在"Web UI"项目中添加一个"App_Web References"文件夹, 并加入了所有相关的资源。

get Weatherby City Name方法:根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数。

五、总结

通过对于分布式软件开发体系的介绍, 我们了解了常见的分布式软件开发模型和分布式开发的强大功能和优势, 并在此基础上介绍了Web服务开发, 通过一个具体实例的演示可以看出, 在VS2008环境中, 实现基于分布式的Web服务开发是非常简捷的。对于初学者提供了很大的方便。

摘要:本文介绍了分布式系统和Web服务的概念, 并分析了分布式系统的开发模式, 并通过基于本地的和基于Internet的两种Web服务的开发进一步体现了分布式开发和Web服务的优越性。

关键词:分布式开发,Web服务

参考文献

[1]《Web服务:原理和技术》, (荷兰) 帕派佐格罗 (Michael P.Papazoglou) 译者:龚玲张云涛, 机械工业出版社, 2010年01月

[2]《C#与.NET 3.5高级程序设计 (第4版) 》, (美国) 特罗尔森 (Andrewtroelsen) 译者:朱晔肖逵张大磊, 人民邮电出版社, 2009年03月

[3]《Visual C#2008从入门到精通》, (英国) 夏普 (John sharp) 译者:周靖, 清华大学出版社, 2009年01月

.NET开发平台 篇11

[关键词]辅助教学;C#.net ;SQL Server; Visual studio.net;

目前已经有一些类似的辅助教学系统,这些系统只是简单的将评价内容以网页的形式展现出来,让同学们选择,然后将结果统一的保存提交到服务器。这样做有很大的弊端,教评内容难于更新;教评结果的可信度有待提高;同时有多个用户登录时,系统的运行状况不好等诸多问题。针对上述这些问题,该教学系统将得到很好的解决:首先,通过读取数据库的内容,按管理员的要求,智能生成教评内容,可以随着数据库内容的不同随时更新,甚至可以做到不同的学科,有不同的教评内容;其次,系统智能的判断出其中非法的评价结果进行区别处理,提高教评结果的可信度;对每个参与教评的学生,只记录教评提交的结果,并不与学号相对应,做到保密;智能列出所登录的学生的任课教师,确保每个学生只允许对自己的任课教师进行教评,而且对每个教师只能评一次,提高教评结果的可信度;

1 教学辅助系统需求

对于本系统主要包括用户的需求。管理员需求,系统可以指定教评的对象,即学生信息;可以指定被教评的对象,即教师信息;指定教评的内容,即学生通过哪些方面对教师进行评价;对教评结果的查看,即查看所有教师的教评结果。教师需求,在教评结束后,通过登录,查看自己的教评结果。学生需求,在教评活动开始后,登录系统,对自己的任课教师评价。

当管理员登录时,可以对学生信息表、教师信息表以及教评表的修改、更新;可以对教评结果进行查询。学生登录,对教评表查询,做出某些判断,根据判断更新教评结果表,教师登录,查看教评结果表中对应自己的记录。

1.1功能模块设计

图1系统主要功能模块

管理员登录,主要是对系统进行后台设置,具体包括对教师和学生的信息进行设置,对教评的项目进行设置,对非法数据特征进行设置,查看所有被评的教师的教评结果。学生登录,个人信息的修改,对自己的任课教师教评。教师登录,查看自己的教评结果以及学生的留言。学生信息管理模块:添加、删除、修改学生信息。教师信息管理模块:添加、删除、修改教师信息。教评信息管理模块:添加、删除、修改教评信息。非法数据设置模块:对教评结果中有可能出现的非法数据的特征进行设置。学生教评提交模块:对教师进行教评,并把结果提交到服务器的数据库中。教评结果查看模块:查看所有的教师的教评结果。

1.2 页面设计流程图

通过上述的需求分析和总体设计,我们已经大致了解了整个教评系统的流程,基本上可以概括为,管理员登录,对系统做具体设置,包括设置哪些人参与教评,通过哪些标准来教评,用这些标准对谁教评;接下来,参与教评的人对被教评的人依据教评标准教评;管理员查看所有的教评结果;被教评人查看自己的教评结果。

这些只是给出了系统的大致流程,而要真正的实现这个系统,解决我们所列出的问题,还需要很多附加的设置与操作。下面我们给出了整个系统较为详细的页面流程图,在详细设计过程中,我们将逐步地给予详细的介绍,对实现智能性方面做重点介绍:

2.智能辅教系统模块开发

2.1用户登录模块

系统根据选择用户的不同,到相应的数据库中进行检索,验证正在登录的用户的身份是否合法,把用户名和密码设置为要查询的条件,在数据库中执行,如果相应的数据库中有这一条记录,则认为此用户存在,被认为是合法的用户;对于合法的用户,根据用户类型的不同,跳转到不同的页面;对于非法的用户给出错误提示,要求重新输入。该模块设计的关键保证合法用户正常登录,非法用户即使通过正确的地址也不能跳转,这主要是通过Session变量来判断,以保证系统的安全性。

2.2人员信息管理模块

此模块的设计主要是对学生、教师及其它人员数据库的修改,如:学生模块在系统中是通过mainStu.aspx页面来实现,页面中使用DataGrid控件和数据库中的学生信息表进行绑定,对其中记录的修改都将影响到学生数据库。包括对学生信息的添加、删除、修改等操作。

2.3教评信息管理模块

此模块为整个系统比较核心的模块,该模块只能由系统管理员来操作,通过该模块系统管理员可以很方便的设置教评选项,生成教评页面;对于已经生成的评选项目,还可以即时的修改,形成新的教评页面。

根据上面的流程图,我们从中分析:首先要判断登录的是否为合法的管理员,通过查询数据库判断的方法,前面已经说过,这里不再多说;主要是验证是否通过正确的途径跳转到本页面。在我们这个系统中,所有的跳转判断都是通过juge.aspx来实现,在juge.aspx的Page_Load事件中添加以下的代码:If ( Session["flag"]==null ) {Response.Redirect ("loginFail.aspx"); }然后,在各个页面中只需要调用就可以了。

2.4用户教评提交模块

此模块为学生登录后,再选择自己的任课教师,然后展现给学生的页面,在系统中命名为mainPj.aspx,该模块为整个系统的核心模块,也是被浏览次数最多的页面,其它的所有模块的设计都是为该模块服务的,都要靠该模块来实现,所以这个模块设计的好坏,将直接影响到整个教评系统运行的好坏。以下代码为对教评界面的优化:

Private void clear ()//去掉datagrid中前面相同的列

{string pjNum=this.dgMainPj .Items [0].Cells [0].Text ;

string pj=this.dgMainPj .Items [0].Cells [1].Text ;

for(int i=1;i

{if(pjNum==this.dgMainPj .Items [i].Cells[0].Text)

{this.dgMainPj .Items [i].Cells [0].Text ="";

this.dgMainPj .Items [i].Cells [1].Text ="";}

else{pjNum=this.dgMainPj .Items [i].Cells [0].Text ;

pj=this.dgMainPj .Items [i].Cells [1].Text ;}}}

在用户进入该模块后,首选系统将检索数据库中的教评类别表和教评项目表,并按照类别将教评项目以表格的形式列出来;对于教评项目中的选项,将在选项的前面添加单选按钮,用来供用户选择。系统对教评类别和教评项目没有任何的限制,完全可以由管理员按照实际情况或自己的意愿来设置,只要是按照正常的方式添加的,都可以很好的生成美观的教评页面。在这里,我们需要说明一点,如果还想增加系统的智能性,使系统更为合理。我们还可以在点击开始教评后,记录下来被教评的教师编号和课程编号,根据教师所属系的不同和所教课程的不同,连接不同的教评类别表和教评项目表,以便做到对不同学科的教师进行不同标准的教评,这样可以使得教评更为合理,教评结果更为真实可靠。

当用户对教评项目选择完成后,点击提交按钮后,系统将准备把用户的选择结果保存到数据库中。在保存期间,系统首选会判断一下,是否每一个教评项目用户都做出了选择,对于没有完成所有选择的情况,系统将给出智能提示,让用户做出选择。直至所有的选项用户都做出了选择。

2.5教评结果查看模块

本系统提供了两种不同方式的查询,管理员可以在教评的整个过程中,对所有教师的教评结果进行查询,实时掌握教评活动的最新进展,方便控制整个活动的进度;教师可以在整个教评活动结束后,查询教评的结果,但是只可以查看学生对自己的教评结果,不可以查看别的教师的教评结果。

3 结 论

本文用较为详细的文字,介绍了教学辅助系统的设计与实现。系统除了具有普遍意义上的网上教评功能外,重点在系统的智能性、灵活性、提高教评结果的可信度等方面进行了深入的研究,取得了一定的成果。但是系统刚刚开发成功,还需要相当长时间的运行测试,系统的智能性还有待于进一步提高。

参考文献

[1] 方面.个性化的智能网络教学系统研究[D]。西安:西安石油大学

[2] 明日科技 编著《C#数据库系统开发完全手册》人民邮电出版社

[3] 罗理辉.基于人工智能的计算机辅助教学[J].科技资讯,2006.

[4] 马林艺.在线辅助教学系统的开发与设计[D].天津:天津大学,2008.

.NET平台的分层架构设计研究 篇12

“在传统的系统设计中,通常对数据库的访问、业务逻辑及可视元素等代码混编,这样不但代码风格不美观,所写的程序更是可读性差,耦合度高,不容易维护,灵活性差,不容易扩展,更谈不上复用。为了解决这个问题,有人提出了N层架构思想,即将各个功能块明确分开,放置在独立的层中,各层之间通过协作来完成整体功能。所以,分层架构可以说是以牺牲系统性能换取可维护性的手段。

2 分层架构设计的关键性原则

2.1 分层架构逐渐调用原则及单向调用原则

约定将N层架构的各层依次编号为1、2、…、K、…、N-1、N,其中层的编号越大,则越处在上层。那么,架构设计应该满足以下两个原则:

(1)第K(1<K<=N)层只准依赖第K-1层,而不可依赖其他底层。(2)如果P层依赖Q层,则P的编号一定大于Q。

其中第一个原则,保证了依赖的逐层性,及整个架构的依赖是逐层向下的,而不能跨层依赖。第一个原则,则保证了依赖的单向性,及只能上层依赖底层,而不能底层反过来依赖上层[1]。

2.2 单一职责原则

就一个类而言,应该仅有一个引起它变化的原因。软件设计工作的关键在于发现职责并把那些职责相互分离。如果设计者能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生是,设计会遭受到意想不到的破坏[2]。

2.3 开放-封闭原则

开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展(Open for extension),但是不可修改(Closed for modification)[3]。开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。具体到N层架构中,可以描述为:当K-1层有了一个新的具体实现时,它应该可以在不修改K层的情况下,与K层无缝连接,顺利交互。

2.4 依赖倒转原则

依赖倒转原则:A.高层模块不应该依赖底层模块。两个都应该依赖抽象;B.抽象不应该依赖细节,细节应该依赖抽象[4]。如果不管高层模块还是底层模块都依赖于抽象,具体一点就是借口或抽象类,只要接口是稳定的,那么任何一个的更改都不用担心其他收到影响,这就使得无论高层模块还是底层模块都可以很容易地被复用。

3 图书馆管理系统的架构设计

3.1 架构设计的选择

3.1.1 表示层设计及对应框架的选择原则

在系统架构设计的框架选择方向,比较稳妥的方法是选择主流的、已得到证明了的Web应用框架,而不是开发者自行设计和开发新的框架。在本项目中,选择比较成熟并广为人知的Apache Struts框架。

3.1.2 业务逻辑层中的具体技术实现

本项目系统是一个典型的不需要远程访问功能支持的普通Web应用系统,因此选用普通的Java Bean组件技术,并充分利用Spring框架中Io C(Inversion of Control)和AOP(Aspect-Oriented Programming)的特性,将是实现业务逻辑层的更好选择。

3.1.3 持久层设计

由于需要利用关系型数据库实现项目数据的持久化,但在目前的应用系统中可以选择以下形式的持久层技术来加以实现。

(1)标准的JDBC技术。这是最为灵活和通用的实现方法和技术,然而低级、复杂的JDBC API难以使用,而且质量差的JDBC代码很难运转良好和满足企业级项目数据访问的要求。

(2)EJB的实体Bean(EJB Entity Beans)。J2EE平台中的容器管理持久化技术(Container-Managed Persistence,CMP)形式的实体组件(Entity Bean)是一种分离数据访问代码和实现O/R Mapping功能的重量级解决方案,它是以应用服务器为中心的方法,并受到EJB容器的约束。

(3)轻量级的O/R Mapping框架。一个对象关系映射(O/R Mapping)框架采用以面向对象为中心的方法实现应用系统中数据的持久化,一个以对象为中心的应用是易于开发并具有高度的可移植性的。本项目选用功能比较强大的Hibernate O/R Mapping框架,主要是基于Hibernate框架的技术成熟性并广为人知,这将有利于组建满足项目技术要求的开发团队。

3.2 系统的层次划分

因此,本系统的整体架构设计由DWR+Struts+Spring+Hibernate框架构成,同时整个系统被分为5层———表示层、处理层、服务层、数据访问层和数据层。

3.2.1 表示层设计

经过与客户的交流后,对客户的需求进行分析,然后将程序的使用者划分成不同的类,为不同类别的用户提供相应的Web服务的调用接口界面。Web服务的调用对用户来说是完全透明的,用户只需根据界面提供的接口和功能说明提供相应的参数即可,Web服务执行结束后,结果将自动返回。由JSP,HTML等技术实现,通过浏览器向用户显示,并通过对服务层各服务的调用来实现其相应功能。

3.2.2 请求处理层设计

处理层也可以称为业务流程层,关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,业务逻辑层处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。处理层负责响应用户界面层的请求,通过在服务层中调用数据访问层与数据库进行交互。处理层中的业务流程通过调用一个或者多个Web服务来实现。

3.2.3 服务层设计

服务层是图书馆管理系统中最重要的一层,在这层中将运用底层功能组件来构建系统所需要的不同功能的服务。在服务层中,服务被划分为公有的和私有的服务。公有服务是指那些在系统外部可用的服务,也可能是企业外部的,它们是一些典型的、有业务意义的服务。私有服务没有任何的业务意义,它们的存在是用来支持业务服务的并且对于其他系统来说没有一点可用性。

本系统选取的是ASP.NET MVC,同时为了和系统分层架构相结合,对模型和控制器部分做了相应的逻辑分析,具体如下:

View:Taylor Web项目下View文件夹,视图资源文件夹Content。

Model:转换成业务实体即Taylor Entity,模型的行为被分离到Taylor BLL进行处理。

Controller:Taylor Web项目下Controllers文件夹。

3.2.4 数据访问层和数据层设计

数据访问层中包含了对数据层的数据访问的逻辑,与业务逻辑分开,此层的重复利用的可能性非常大,因为几乎所有的系统都要与数据库进行交互,而且对数据库的操作基本上相同。数据访问层中数据访问逻辑调用相应的Web服务来实现对数据库的操作。数据层中存放了与图书馆管理相关的业务数据和历史数据,这些数据存放在一个或者多个数据库中。数据层对数据库的操作命令完全来自于数据访问层,执行结束后将结果返回到数据访问层。

4 结束语

架构并非一种绝对的解决方案,而是充分整合现有的资源以达到相对的最佳的平衡的解决方案。在系统开发过程中,通过使用多层架构模型,可以规避开发初期出现的大量重复工作,有效降低开发成本。通过开发先行单元,还能够在后续单元的开发过程中使用了其相似的特点复用了先行单元,从而达到优化代码和代码重构的效果。

摘要:随着互联网技术的不断发展,传统的软件设计方法已无法继续满足用户的需求。软件设计逐渐开始将重心转移到系统架构的设计上来,耦合度低且具有良好可维护性及扩展性的系统备受青睐。文章以图书馆管理系统为例,结合分层架构中常用的设计模式对.NET平台上的分层架构进行深入的研究和探讨。

关键词:分层架构,架构设计模型,分布式架构

参考文献

[1]章立民.ASP.NET开发实战范例宝典[M].科学出版社.2010.10.

[2]Chang-Sup Park,Soyeon Park.Efficient execution of composite Web services exchanging intensional data[J].Information Sciences178(.2008)317-339.

[3]Andrew N.K.Chen,Sagnika Sen,Benjamin B.M.Shao.Strategies for effective Web services adoption for dynamic e-businesses[J].Decision Support Systems,(2006)789-809.

上一篇:宁夏西海固下一篇:经费投入差异