基于.NET 与SQL2005的网络记事本的设计与实现.doc

上传人:sccc 文档编号:4851158 上传时间:2023-05-19 格式:DOC 页数:53 大小:1.43MB
返回 下载 相关 举报
基于.NET 与SQL2005的网络记事本的设计与实现.doc_第1页
第1页 / 共53页
基于.NET 与SQL2005的网络记事本的设计与实现.doc_第2页
第2页 / 共53页
基于.NET 与SQL2005的网络记事本的设计与实现.doc_第3页
第3页 / 共53页
基于.NET 与SQL2005的网络记事本的设计与实现.doc_第4页
第4页 / 共53页
基于.NET 与SQL2005的网络记事本的设计与实现.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《基于.NET 与SQL2005的网络记事本的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于.NET 与SQL2005的网络记事本的设计与实现.doc(53页珍藏版)》请在三一办公上搜索。

1、 JIANGXI NORMAL UNIVERSITY 学 士 学 位 论 文THESIS OF BACHELOR(2005 2009年)题目:基于.NET 3.5+MSSQL2005的网络记事本系统的分析、设计与实现Topic: The Analysis、Design and Implement of WebNote System Based on .NET Framework 3.5And Microsoft SQL Server 2005姓 名: 宋海根 学 号: 0567110147 学 院: 软件学院 专 业: 软件工程 完成时间:2009年4月31日 指导老师: 戴丽萍 I摘要摘要在

2、学习生活工作中,需要存储记忆许多的个人信息。例如博友信息,一些好的文摘 ,某些网站的帐号密码等,这些信息往往是临时性的,也很少记在日记本或者实体上 ,随着时间的流失 ,需要的时候往往又都忘记了,不免给我们带来麻烦与损失 。为了弥补这种遗憾,网络记事本正是基于这种需求产生的,期望它能成为生活小管家,帮助管理需要的各种信息,留下生活的痕迹。本系统主要提供网络日记,图片存储,文摘存储,收藏,通信录主要功能。在网络日记上,可以记录你的心情,同时也可以把日记共享,系统其它用户也能够分享你的心情。图片存储主要是存储你的图片,可以是照片,也可以是网上你喜欢的图片,可以把这些图片存储在这里,同时也可以分享图片

3、,与他人一起欣赏。网摘主要是看到的一些好的文章,例如一些优美的散文,可以把这些文章存储于此,分享与别人一起品尝。收藏主要是遇到的一些好的网站或网页的收藏,可以通过分享告知他人。期望通过本系统,能免于一些生活琐事 ,让它成为真正的生活小管家。本篇论文主要通过网络记事本来阐述如何设计出有弹性和可复用性的软件,其中主要是通过七层架构将整个项目进行分离,对七层架构中的物理数据层,数据访问层,实体层,业务逻辑层,页面结构层,逻辑控制层,页面呈现层分别做详细的介绍,并对每一层的定义,每一层所工作的内容,存在的意义进行分析。并描述分层开发的优势。最后通过设计模式中的工厂模式,抽象工厂模式,适配器模式,生成器

4、模式,外观模式,模板模式,状态模式来阐述该项目中的设计模式的运用,以及企业级的软件所必须具备的低耦合和高内聚的特点。在这个软件日新月异的时代,一些没有弹性的软件即将被淘汰,而生存下来的便是具有弹性和可维护性的软件。关键词:七层架构 ,.NET3.5,高内聚,低耦合,设计模式AbstractIn our daily life, We need a lot of memory storage of personal information。For example,Friends Information,Some good abstracts,Web site Account Password。Th

5、is information is often temporary,We are also rarely recorded in the diaries,With the loss of time,When necessary, we are often forgotten,We can not help but to cause trouble and loss。To make up for this sorry,Notepad is generated based on this demand,Expecting to become a steward of your life, Help

6、ing you manage all kinds of information needed , Leaving traces of your life!The system is mainly provided by the network for your diary, photo storage, abstracts storage, collection, recorded in the main function of communication. you can record your feelings, at the same time you can share your di

7、ary, the system can also be other users to share your feelings. Image storage is storage of your pictures, can be your photo, it could be a line you like the picture, you can put these pictures are stored in here, at the same time you can share your pictures. Pick your network is mainly to see some

8、good articles, such as some beautiful prose, you can store them in this article, you can also enjoy sharing with others. The main collection is that you encountered some good collection of web sites or web pages, you can inform others through the sharing. Hope that through this system, you can live

9、free from chores and let it become your life in small housekeeper.In this paper,We describe WebNote project to expoundhow to work out a flexibility and reused Enterprise Software. We use Seven Tier Framework to separate the whole project. We introduce the Seven Structure Tier, Physics Data Tier, Vis

10、it Data Tier , Entity Tier, Business Method Tier, Logical Control layer Tier, Cascading Style Sheets very particularly. We analyze every Tier on definitions and what we should do on every Tier, and what is the meaning for every Tier .We talk about the advantages with Multilayer Develops .In the end

11、we use Design Pattern to explain our project, and shows what Design Pattern we have use in our project, there are Factory, Abstract Factory , Builder , Adapter , Facade , Template Method Mode, State Mode used in our project, We introduce how to put Design Pattern into a project , we said high cohesi

12、on and low coupling is very important for a project. Now Software update with the needs, the software without flexibility will be wash out. Only flexibility and reuse software will be stay.Keywords:Seven Tier Framework, highly connection, low coupling, Design Pattern目录目录第1章 引言11.1 项目背景11.2 项目目标及意义11

13、.3 任务概述1第2章 项目关键技术介绍32.1 C# 面向对象技术32.1.1 泛型32.1.2 抽象类32.1.3 接口32.1.4 动态反射42.1.5 方法重载52.2 技术52.2.1母板的使用52.2.2 LISTVIEW的使用62.3建模62.3.1 面向对象需求建模62.3.2 面向对象设计建模72.3.3 数据库建模72.4 设计模式82.4.1 工厂模式82.4.2 生成器模式模式92.4.3 适配器模式92.4.4 外观模式92.4.5 模板方法模式92.4.6 状态模式92.5 七层架构102.5.1 七层架构的定义102.5.2 物理数据层112.5.3 数据访问层1

14、22.5.4 实体层132.5.5 业务逻辑层142.5.6 页面结构层152.5.7 逻辑控制层152.5.8 页面呈现层17第3章 项目分析与设计193.1 项目需求分析193.1.2 用例图193.1.3 域模型类图203.2 项目设计203.2.1 项目开发环境203.2.2 项目架构213.2.3 用例实现213.2.4 设计项目类图233.3 数据库设计243.3.1 数据库设计原则253.3.2 项目数据库模型图253.3.3 项目各个表的设计26第4章 项目编码实现314.1 七层架构的实现原理315.2 物理数据层的实现325.3 数据访问层345.4 实体层的实现365.5

15、 业务逻辑层的实现375.6 用户界面层实现:38第5章 总结446.1 对项目多层开发的分析446.1.1 需求的波动以及应对模式446.1.2 传统三层架构的弊端446.2 对项目的弱耦合和高内聚的讨论446.2.1 对柔耦合的讨论446.2.2 对高内聚的讨论456.2.3 总结456.3 总结项目中的技术点456.3.1 七层架构中让我最满意的三层456.3.2 收获和总结46致谢47参考文献4848第1章 引言第1章 引言1.1 项目背景随着社会的发展,互联网网已经成为我们生活中的不可缺少的一部分,人们开始网上购物、网上交友、网上阅读新闻、网上查阅资料等 。伴随着信息化得发展,我们需

16、要记忆存储许多的信息 。也许你会把要记忆的信息存在笔记里,电脑上,又或者是你的头脑里。随着时间流逝 ,往往那些需要的东西已经回忆不起来或者找不到,因此我们迫切需要一个我们网上的生活小管家 ,帮助我们打理这些信息。网络记事本正是在这种需求下产生!1.2 项目目标及意义在互联网上,虽然存在一定一些网络记事本系统,但没有专门专业的网络记事本,通过本系统,用户可以再系统网站上写网络日记,保存各种图片,保存文摘,保存收藏,同时本系统也将打造一定得互动功能,用户可以分享自己的日记,图片,文摘,收藏,别的用户可以查看,评论,同时还可以跟你交流发站内信。期望通过本网络记事本系统,拥有免于生活中的一些小事,让它

17、来帮你管理,分享自己的生活,让别人一起参与进来,实现信息,思想的交流。本系统初步具有上述的5个基本功能,在系统后期,可以根据用户需要,拓展一些功能,完善系统。当系统足够强大的时候,可以根据系统 ,公布自己的API,让更多的人参与进来,成为一个真正的交流平台。网络记事本解决了现实需要的问题,通过网络记事本,能够真正方便你的网上生活,提高你的学习,生活,工作效率,让它真正成为你的生活小管家,成为你生活得一部分。在系统开发过程中,深入了解如果使用ASP.Net3.0开发基于W3C标准的WEB项目,并且深入体验高级的多层开发技术,符合企业WEB开发的要求,能够通过此项目真正了解面向对象的开发方式。1.

18、3 任务概述网络记事本系统主要功能模块及描述如下:1)日记模块 负责日记的增删改查,日记种类的增删改查,日记的分享管理以及日记浏览评论管理。2)相册模块 负责图片的增删改查,相册的增删改查,图片的分享管理以及图片浏览评论管理。3)文摘模块 负责文摘的增删改查,文摘种类的增删改查,文摘的分享管理以及日记浏览评论管理。4)收藏模块 负责收藏的增删改查,收藏种类的增删改查,日记的分享管理。5)生活帮手模块 一些生活中常用工具的管理6)今日焦点模块 今日新闻焦点的管理7)用户模块 用户注册,登录等的管理第2章 项目关键技术介绍第2章 项目关键技术介绍2.1 C# 面向对象技术2.1.1 泛型1)泛型的

19、定义 泛型指的是该类型在父类中定义后,继承该类的子类可以将父类的泛型转换成自己的类型,从而在继承父类的方法或属性时能够将其中的泛型类型,转换成子类的类型来使用,极大的减少了代码的重复度,属于在继承中相当灵活的方法。2)泛型的作用 巧妙有效的使用泛型,配合反射可以编写非常优雅和高效的实体类。这种类可以在原先没有泛型时更体现出面向对象的威力,并且提供更有效的约束和封装。2.1.2 抽象类1)抽象类简介抽象类的用途是提供多个派生类可共享的基类的公共定义,并使用abstract关键字定义。使用abstract关键字不仅可以创建仅用于继承用途的类,也可以定义类成员,即定义派生的非抽象类的功能。2)抽象类

20、的使用我们写的基类就是定义为抽象类。在实现接口时,我们也常写一个抽象类,来实现接口中的某些子类所需的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰。2.1.3 接口1)接口的简介从面向对象的观点来看,接口就是对象的外观,而对象实际的工作方式就是实现。和类一样,接口也可以定义属性、方法和事件。与类不同的是,接口并不提供实现。现在的接口,是由类来实现的,并从类中被定义为单独的实体。我们可以这样来理解,接口表示的是一种约定。实现接口的类必须严格按其定义来实现接口的每个方面。有了接口,就可以将功能定义为一些紧密相关成员的小组。可以在不危害现有代码的情况下,开

21、发接口的增强型实现,从而使兼容性问题最小化。也可以在任何时候通过开发附加接口和实现来添加新的功能。虽然接口实现可以进化,但接口本身一旦被发布就不能再更改。对已发布的接口进行更改会破坏现有的代码。若把接口视为约定,很明显约定双方都各有其承担的义务。接口的发布者同意不再更改该接口,接口的实现者则同意严格按设计来实现接口。接口的实现可以是类,也可以是结构。接口的定义用的是Interface关键字。通过接口,我们可以定义下某种对象的基本外观,然后可以自由地进行实现与扩展,却不涉及对原型的直接修改。我们在定义数据提供者的方法时就使用到了接口的方法。2)接口的使用在封装Ado.Net,书写数据提供者时,我

22、们就用到了接口,在此处使用接口的目的是在使用不同数据库时,如果不调用来访问数据提供者时,如果数据库更换的话,调用数据库的代码也需要改变,不满足软件开发中低耦合的要求,如果使用接口的话,可以让不同的数据库实现该接口,使用访问数据库的代码不需要做更改,体现了低耦合的要求。2.1.4 动态反射1)反射的定义程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。2)反射的作用a.使用 Assembly 定义和加载程序集,加载在程序集清单中列出

23、的模块,以及从此程序集中查找类型并创建该类型的实例。 b.使用 Module 了解如下的类似信息:包含模块的程序集以及模块中的类等。您还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 c.使用 ConstructorInfo 了解如下的类似信息:构造函数的名称、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。d.使用 Type 的 GetConstructors 或 GetConstructor 方法来调用特定的构造函数。 e.使用 MethodInfo 来了解如下的类似信息:方法的名称、返回类型、参数、访问修饰

24、符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法来调用特定的方法。 f.使用 FieldInfo 来了解如下的类似信息:字段的名称、访问修饰符(如 public 或 private)和实现详细信息(如 static)等;并获取或设置字段值。 g.使用 EventInfo 来了解如下的类似信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。 h.使用 PropertyInfo 来了解如下的类似信息:属性的名称、数据类型、声明

25、类型、反射类型和只读或可写状态等;并获取或设置属性值。 j.使用 ParameterInfo 来了解如下的类似信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等。2.1.5 方法重载1)什么是重载所谓函数重载是指同一个函数名可以对应着多个函数的实现。函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。2)为什么要重载重载函数的目的很简单,就是要满足调用时不同的需求,使函数可以满足

26、各种参数类型,而不需要对参数进行类型转换,大大方便了函数使用者。在我们的项目中大量的使用了方法重载 。2.2 技术2.2.1母板的使用1)母板的定义母板(MotherBoard)就是一种可以被重复利用的页面格式。它是一种特殊的节点形式,它形成的页面格式可以被其它的节点套用,甚至是被其它的母板节点套用。一个母板中,应该有且只有一个替代因子。有效的替代因子节点可以是母板节点下任意层次的子节点。设计过程中你会发现,其实母板设计就是将引用该母板的那些页面的固定的页面组件制作出来,页面内容变化的位置由替代因子取代。母板是WebTea最具活力的特色之一,它使网站的开发效率大大提高。因为页面形式需要变化时,

27、只需要修改母板,而数据是不需要重新编辑的。一个母板发生变化,使用该母板的所有节点的形式都将随之发生相应变化。2)母板的使用设计页面必须要有大局观,一般先预设计所有页面的功能,然后将整个系统结合起来观察,检查有哪些部分的结构是所有(或部分)页面的共性元素。在这个层面上可以从面向对象的角度来思考,页面从具有共性元素的页面继承扩展。2.2.2 LISTVIEW的使用1)ListView控件的定义ListView是Microsoft Visual Studio 2008新提供的数据控件,该控件结合了以往控件的各不足,即提供了内置的编辑、添加、删除、选择和分页数据控制功能,也提供了用户完全自定义的格式控

28、制。可以以您使用模板定义的格式来显示来自数据源的数据。该模板包含有用于设置数据布局的格式、控件和绑定表达式。2)模板的灵活性和结构化每一层模板的存在都有其意义,虽然在某一时刻部分模板不呈现在界面上,用户不清楚该模板是否存在,因为用户不需要知道该模板的存在,当用户需要执行某些功能时该功能的模板便会体现。模板的交替使用使界面更具动感,满足客户对界面功能的需求,方便业务的控制,是业务能够有条不紊的进行。ListView充分体现了模板的灵活性和结构化,灵活性体现在ListView模板的显示灵活多变,在适当的时间显示适当的模板,满足客户在理解业务上的需求。结构化体现在ListView对插入,更新,删除都

29、提供了不同的模板,把页面的结构分离的很彻底。满足了结构的需求。2.3建模 一个模型代表了当前系统的某个方面。由于系统很复杂,需要建立多个模型来涵盖细节信息,还需要使用许多不同类型的模型在不同细节上表现系统。建立模型的过程能帮助软件开发人员澄清和改良设计。它能描述信息系统的复杂性,便于对系统的交流,同时还能作为维护和升级系统的文档。2.3.1 面向对象需求建模面向对象方法中有一整套的图表集合,一起用来记录用户的需要和系统的需求,这些需求可以用以下的模型来说明:a.域模型类图:在定义系统需求的时,开发人员仅仅关注问题域类,问题域类是以后设计软件类的基石,同时也驱动了所有其他类的定义。定义这些系统需

30、求而建立起来的类成为域模型类图,因为它显示的类是永恒问题域中的一部分。使用问题域类有两个重要的目的。第一,它描述了必须由面向对象的编程方法运行的泪的基本结构。第二,它被当做一种概念上的数据模型,描述用于数据库定义的类。b.用例图:一种可以显示不同的用户角色和这些用户角色如何使用系统的图。用例图目的是识别系统的用例,换句话说,就是识别如何使用系统,用户记录系统必须支持的所有功能的一种简便方法。c.用例详细模型:每个用例必须详细描述。一种方法是详细记录下用户和系统共同完成用例的步骤。另一方面,也可以用来描述包括手动和自动系统活动的过程,所有活动图可以用来定义用例。d.系统顺序图:提供了用例处理需求

31、的更详细的说明,记录了系统的输入和输出,每个系统顺序图的应用范围通常是一个用例或者用例的一个场景,系统顺序图有参与者和系统两部分组成,系统被看成是一个黑盒子,因为它无需记录内部处理。2.3.2 面向对象设计建模面向对象设计主要关注三个面向对象模型,既设计类图,交互图和包图。设计是用例来驱动,也就是说设计师在用例的基础上完成的。在设计过程中,两个主要模型是设计类图和顺序图。通过添加属性类型,可见性信息以及方法特征,域模型类图被转化成设计图。顺序图是系统顺序图的扩展,通过驱动执行用例所需的内部进程来创建。顺序图具体化了相互协作的类,以及他们协作的方式,具体化了他们之间为了完成用例进程互相传递的信息

32、。在分层设计中,包图是用来将设计类图分割成相关的功能。2.3.3 数据库建模数据建模指的是对现实世界各类数据的抽象组织,确定数据库需管辖的范围、数据的组织形式等直至转化成现实的数据库。 将经过系统分析后抽象出来的概念模型转化为物理模型后,在Visio或Erwin等工具建立数据库实体以及各实体之间关系的过程。应用程序和数据建模是为应用程序确定、记录和实现数据和进程要求的过程。这包括查看现有的数据模型和进程,以确定它们是否可被重复使用,并创建新数据模型和进程,以满足应用程序的独特要求。建模过程中的主要活动包括: a.确定数据及其相关过程(如实地销售人员需要查看在线产品目录并提交新客户订单)。 b.

33、定义数据(如数据类型、大小和默认值)。 c.确保数据的完整性(使用业务规则和验证检查)。 d.定义操作过程(如安全检查和备份)。 e.选择数据存储技术(如关系、分层或索引存储技术)。 一定要知道建模通常会以意想不到的方式涉及公司的管理。例如,当对哪些数据元素应由哪些组织来维护有新的见解时,数据所有权(以及数据维护、准确性和及时性的隐含责任)通常会遭到质疑。数据设计常常促使公司认识到企业数据系统是如何相互依存的,并且鼓励公司抓住协调后的数据规划所带来的效率提高、成本节约和战略性机遇。在结束建模时,您已经完全定义了应用程序的要求,确定了可能被其他企业级应用程序重复使用的数据和服务,并为将来扩展奠定

34、了强有力的基础。2.4 设计模式2.4.1 工厂模式在我们实例化对象时,我们就要考虑到使用工厂模式,工厂模式是通过定义一个类,在该类中定义一个静态的供外部调用的方法,该方法返回所需实例化的对象,于是当我们要实例化对象是只需调用该方法就可以了,当所需调用的对象发生变化时外部的代码就不需要修改。在项目的实体层的基类中的提供创建实例方法时,我们就用到了工厂设计模式,在每次创建实例时,我们都要工厂化一个对象,于是我们把实例化对象放到方法中去完成。当对象包含有参数的构造函数时,外部也不需要添加,可以在工厂内部将参数赋给构造函数,返回该对象,而外部只需要调用该工厂的方法,满足了开闭原则。工厂模式的另一个特

35、点是可以通过条件判断来约束是否返回对象实例,如果不满足条件则返回空值。大大提高了安全性和对对象的控制能力。2.4.2 生成器模式模式当接受一连串复杂的字符串时,我们就会考虑将该字符串进行分离,在我们的项目中,数据提供者将要接受一条数据库连接字符串,该字符串比较复杂,包括了服务器名,数据库名,以及是否设置安全保护的功能,于是我们就将该字符串进行分离,将变化的和不变的分离出来,服务器名和数据库名是变化的,于是我们就将其分离出来,生成器模式的使用大大方便了使用者,也体现了低耦合的需要,更大大减小了程序出错的几率。2.4.3 适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使

36、得原本由于接口不兼容而不能一起工作的那些类可以一起工作。在我们的项目中在数据库类型和C#类型转换是就使用到了适配器模式,该模式的使用使我们在数据提供者中进行类型匹配时,可以让其自动匹配,而不用担心类型无法匹配的问题。2.4.4 外观模式外观模式的使用是为了让外部通过调用一个类来完成所有所需的方法,得到所需的字段,所有需要的内容都通过一个类来访问。这种方法也是一种高内聚的体现,把所有的类都内聚到一个外观类中,因为外部调用的是同一个类,所以在用户的需求发生变化时,外部就不需要修改对某个类的访问,只要在外观类中添加修要访问的类,并提供该类的实例化方法就可以了。在我们的项目中,我们在数据提供者中将AD

37、O的不同层面通过一个类来实现。2.4.5 模板方法模式我们在页面结构层中使用的List View控件便是使用了模板的方法,List View中有7个模板,每一层模板的存在都有其意义,虽然在某一时刻部分模板不呈现在界面上,用户不清楚该模板是否存在,因为用户不需要知道该模板的存在,当用户需要执行某些功能时该功能的模板便会体现。模板的交替使用使界面更具动感,满足客户对界面功能的需求,方便业务的控制,是业务能够有条不紊的进行。2.4.6 状态模式状态模式的意图是允许一个对象在其内部状态改变时改变它的行为。状态模式的原理是封装状态相关的行为到状态对象中,每一个状态对象属于抽象状态类的子类。状态模式的特征

38、是a.抽象状态角(State)色:定义一个接口,用以封装语境(Context)对象的一个特定的状态所对应的行为。 b.具体状态(Concrete State)角色:一个具体状态类,实现了语境(Context)对象的一个状态所对应的行为。c.语境(Context)角色:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例,这个具体状态类的实例给出此环境对象的现有状态。 通过使用多态,可以动态地改变语境(Context)对象的属性State的内容,使其从指向一个具体状态类到指向另外一个具体状态类,从而改变语境(Context)对象的行为。多态原则是状态模式的核心。在我们的项目中的List Vie

39、w中的增加删除修改查询方法,就用到了状态模式,状态模式体现在对语境对象的行为,在List View中体现在对事件的处理上,List View中的事件就意味着状态发生了变化。 2.5 七层架构2.5.1 七层架构的定义1)七层架构背景三层架构的基础上,我们对数据访问层以及表示层进行了更细致的划分。将数据访问层分成了物理数据层,数据访问层和实体层。将表示层分为了页面结构层,逻辑控制层,和表现层。该分层方法是三层架构的一种优化。2)七层的定义物理数据层主要包括业务的建模和数据库的设计。数据访问层主要包括数据访问组件(ADO.NET)的设计和实现。实体层类对数据库的映射。业务逻辑层根据客户需求所定义的

40、方法,包括,增加,删除,修改,查询的方法,这些方法的提供是保证项目功能实现的基础。页面结构层包括HTML元素等页面元素,但不包括样式,也就是页面要呈现的数据内容。逻辑控制层逻辑控制层控制页面要呈现的内容,也就是对页面结构层进行控制,并且访问业务逻辑层,在结构上起到承上启下的作用。表现层对(div+css)的使用,满足客户对页面外观的需求,和页面结构层分离。3)七层架构意义在使用七层架构之后,程序出错之后我们可以轻松的找到错误是发生在哪一层,并能很快找到错误的位置予以修正,因为采用七层架构之后,我们对项目进行了更好的封装。可复用性体现在对于一些和项目无关的工具类进行封装,这些工具类和项目无关,可

41、以提供给其他项目使用,比如封装好的数据提供者。七层架构的弹性体现在可扩展性和可维护性,对七层架构的扩展不需要对原有程序进行修改,而由于七层架构的低耦合性,修改会变的很简便。2.5.2 物理数据层1)基础数据表的建立我们将原先三层架构中的数据访问层分成了物理数据库层,数据访问层和实体层。在本项目的物理数据库层中,建立了21张数据表,详细见第三章数据库设计。2)数据完整性的物理实现a.主键和外键的关系主键是数据表中的具有唯一性,且不可为空,我们为每一个数据表设置一个主键Id,而如果公共关键字在一个关系中是主键,那么这个公共关键字被称为另一个关系的外键。我们通过外键约束将数据表联系起来,使数据表之间

42、建立联系。b.数据类型所有的字段都应该定义数据类型,数据类型使我们明确我们所获得的数据的类型,用来约束类型不相符的数据的插入。c.检查约束进一步使用户在进行数据插入或数据更新的时候能够保证数据的准确性,也保证的数据库数据的完整型和有效性。如果不进行检查约束,用户很有可能看到不符合逻辑的数据呈现在数据表上,导致数据的准确性降低。d.空将字段设为非空的目的是保证数据库数据的完整性,防止数据库中数据的丢失。e.触发器触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触

43、发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义的错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。3)封装复杂业务的数据实现a.视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。b.存储过程Sql语句执行的时候

44、要先编译,然后执行。存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。c.自定义函数通过编写一系列的自定义函数来封装一些数据库的复杂操作,在物理数据层完成一些数据的操作。2.5.3 数据访问层1)数据访问层的必要性用户通过数据访问层来访问数据库要比直接访问数据库的安全性提高很多,在数据访问层可以设计很多对数据库访问的约束条件,以及将C#类型和数据库类型做转换,方便了在访问数据库时的类

45、型匹配。并且数据访问层提供了更多对数据库访问的功能,调用更加方便,查询数据,删除数据,插入数据,更新数据的操作都会变的更加安全和方便。2)设计数据提供者组件的思考1接口的定义和设计思路在数据提供者中定义接口的目的是为了满足切换多种不同的数据库,是一种设计模式的中工厂模式的体现。2映射SQL数据类型和C#数据类型Sql中的数据类型Char, NChar, NText, NVarChar, Text, VarChar在C#类型中都是string类型,Sql中的DateTime, SmallDateTime, Date, Time, DateTime2, DateTimeOffset在C#中都是Da

46、teTime类型,sql中的,Binary, Image, Timestamp, VarBinary类型在c#中都是byte数组类型。为了将C#和SQL数据类型转换的方便,我们使用适配器模式对c#类型和数据库类型进行转换。3使用DataTable替代DataReader使用DATATABLE来获取数据表比用DataReader获取字段更加方便快捷。并且DATATABLE可以用适配器来填充数据,并且在后期能提供反射的功能。反射使封装更为完善,彻底。2.5.4 实体层1)实体层的必要性通过数据访问层与数据库进行交流,其中一般会用到代码生成器。直接将数据库中的表名、字段映射到实体层。实体层作用,一般

47、用到批量增加、修改时候用实体会比较好,因为不用将数据直接与数据库打交道。1.弱耦合参数的传递在传递参数时,我们通过实体来传递,封装了实体中所包含的字段,当实体中的字段发生变化时,我们只需要修改实体中的字段就可以了,外部代码都可以保持原样,体现了弱耦合的作用。2.内聚函数的返回值当返回一连串的参数时,如果不使用实体,返回大量参数会变的很麻烦,如果我们把参数放到实体中,通过返回实体来返回实体中的参数,返回参数就会变的很轻松,出错的概率也大大降低,体现了高内聚的作用。2)封装实体的共同属性和方法1.公共属性我们把所有实体的公共字段在基类中定义,并添加get,set方法,以便于子类的继承,减少代码的重复度。2.公共方法3)实体的构造方式1.传统的构造方式普通的通过dataReader构造实体的方式。需要构造一个读写器,从中读取数据。表 2.1 dataReader构造实体while(dr.Read() City city=new City(); city.Id = (int)drCityID; city.PostalCode = dr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号