《基于.net平台下的电子商务系统的研究与实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
基于.NET平台下的电子商务系统的研究与实现TheResearchandImplementationoftheE-CommerceSystemBasedon.NETPlatform作者姓名陈纪霞学位类型高校教师学科、专业计算机应用技术研究方向电子商务导师及职称欧阳一鸣副教授2011年5月 合肥工业大学本论文经答辩委员会全体委员审查,确认符合合肥工业大学硕士学位论文质量要求。答辩委员会签名:(工作单位、职称)主席:吴坚安徽科力信息产业有限责任公司高工委员:梁华国合肥工业大学教授谢涛圣地亚哥州立大学副教授周国祥合肥工业大学教授王伟合肥工业大学副教授导师:欧阳一鸣合肥工业大学副教授 独创性声明本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标志和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得合肥工业大学或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。学位论文作者签字:陈纪霞签字日期:2011年6月19日学位论文版权使用授权书本学位论文作者完全了解合肥工业大学有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅或借阅。本人授权合肥工业大学可以将学位论文的全部或部分论文内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。(保密的学位论文在解密后适用本授权书)学位论文作者签名:陈纪霞导师签名:欧阳一鸣签字日期:2011年6月19日签字日期:2011年6月19日学位论文作者毕业后去向:工作单位:安徽财贸职业学院电话:18956007601通讯地址:皖、合肥市、翡翠路900号邮编:230601 基于.NET平台下的电子商务系统的研究与实现摘要上世纪90年代以来,随着互联网的发展,电子商务在社会经济领域发展迅速,电子商务推动了商业、贸易、营销、金融、广告运输、教育等社会经济领域的创新,给企业带来许多新的机会。现在电子商务正由起步迈入繁荣阶段,己呈现燎原之势,是二十一世纪经济发展的又一新增长点,这为我国的每一个企业带来了新的机遇和挑战。在网上发展商务为我们打开了一个崭新的世界,诸如改善服务水平,提高效率,降低费用,增进合作者之间的联系,缩短进入市场的时间以及更广泛的开拓市场。从而大大节约生产的成本,提高管理的水平,增强企业的市场竞争实力。网上书店就是一种典型的电子商务应用。如何设计开发出功能强大,费用低廉,通用性强,适合我国国情的购物网站系统,这将是我们急需解决的一个重要课题。本论文将通过一个网上书店零售网站的开发实例,对基于.NET技术的B2C模式网上书店零售网站的研究与开发进行了深入的探讨。本论文的主要工作如下:(1)介绍了电子商务的概念、发展现状及电子商务网站的实现技术,结合一个具体的电子商务站点,对网站进行了网站规划、概要设计、详细设计及编码开发,对电子商务系统开发过程中如何增强系统的复用性、可维护性、安全性、高效性和先进性作出了探讨。(2)深入分析了电子商务系统的特点,采用当前流行的B/S设计模式,基于Windows.NET开发平台,运用全新的面向对象语言C#,以ASP.NET为工具,运用Web服务和XML,利用SQLServer2005做后台,利用ADO.NET作为接口,设计和实现网上书店电子商务,构建了3层B/S模式系统架构。(3)针对电子商务系统的安全性问题,提出了较为完整的安全性解决方案。安全问题是电子商务推广过程中最大的障碍,本文对系统中的用户密码等敏感数据,采用了以其散列值在数据库中进行存储,避免直接存储敏感数据的明文;在用户权限管理方面:根据用户使用功能划分角色,采用窗体身份验证方式,编程运用基于角色的授权;在信息安全和身份认证方面:系统应用了.NET编程技术下数据加密技术、数字签名和身份认证技术。该方案最大程度上保障了电子商务系统的安全。关键词:电子商务;三层结构;角色;Web服务;安全 TheResearchandImplementationoftheE-CommerceSystemBasedon.NETPlatformAbstractSincethe90soflastcentury,withthedevelopmentoftheInternet,E-commercehasdevelopedrapidlyinthesocialandeconomicfields,promotee-commercebusiness,trade,marketing,finance,advertising,transportation,educationandothersocialandeconomicinnovationinthefield,manynewtotheenterpriseopportunities.E-commerceisnowenteringtheinitialboomphase,hasbeenpresentedLiaoyuanzhishi,economicdevelopmentinthetwenty-firstcenturymarksanewgrowthpoint,whichforeachofourbusinesshasbroughtnewopportunitiesandchallenges.Webdevelopmentbusinessforustoopenanewworld,suchasimprovingservicelevels,improveefficiency,reducecosts,enhancethelinksbetweenthepartners,reducetimetomarketandthebroadermarketdevelopment.Thussavingproductioncosts,improvemanagement,andenhancetheirmarketcompetitiveness.Onlinebookstoreisatypicale-commerceapplications.Howtodesignanddevelopapowerful,lowcost,versatility,suitableforChina'sshoppingsitesystem,whichwillbeoururgentneedtoaddressanimportantissue.Thisthesiswillbeonlinebookstoreretailsitesthroughadevelopmentinstance,basedon.NETtechnologyB2Cmodeofresearchanddevelopmentofretailsitesonlinebookstoreconductedin-depthstudy.Themainworkisasfollows:(1)ThisthesisintroducestheconceptoftheE-commerce,thedevelopmentofpresentsituationandtheimplementationofE-commercewebsitetechnology.Intermsofaspecifice-commercewebsite,thethesismakestherequirementanalysis,theoutlinedesign,detaileddesignandcodingdevelopment.Thethesisdiscusseshowtoimprovethereusability,maintainability,security,efficiencyandadvancedcharacteristicsoftheE-commercesystemduringthedevelopmentprocess.(2)DepthanalysisofthecharacteristicsoftheE-commerceSystem,ThesystemusesthecurrentpopularB/Sdesignmodel,basedonWindows.NETasdevelopmentplatform,takingASP.NETandanewobject-orientedlanguageC#.NETasthetools,utilizingtheWebservice,XML,SQLServer2000,andADO.NETforconnection,thesystemdesignsandimplementsanon-linebookstoreE-commerce,andfinallyconstrrctathree-tierdistributedframework.(3)Itproposesamorecomprehensivesolutiontothesystemsecurity.E-commercesecurityisthebiggestobstacleinthepromotionprocess,thesystem userpasswordsandothersensitivedata,usingitshashvaluestoredinthedatabase,toavoidstoringsensitivedataincleartextdirectly.Inuseraccesscontrol:usingWindowsidentityauthenticationaccordingtothefunctionalroleofusersandprogrammingbasedontheauthorizationoftherole.Ininformationsecurityandidentityauthentication:appliingthesystem.NETprogrammingtechnologiessuchasdatahash,dataencrypt,digitalsignatureandidentityauthentication.Theprogramguaranteesthemaximumextentpossiblethesafetyofe-commercesystems.Keywords:E-commerce;Three-tierArchitecture;Roles;WebService;Security 致谢在这里,首先我要真诚感谢我的导师欧阳一鸣副教授!欧阳老师严谨细致、一丝不苟的作风一直是我学习的榜样;他循循善诱的教导和不拘一格的思路给予我无尽的启迪。从本文的选题、研究设计到初稿的审阅修改,欧阳老师都倾注了很多心血,提出了很多有益意见。欧阳老师在学术和科研上严谨态度和勇于探索的精神深深地感染了我,将使我终身受益。谨向欧阳老师致以崇高的敬意和衷心的感谢!同时,我还要感谢计算机与信息学院的全体老师,正是他们辛勤的教诲,我的学识和能力才得以很大的提高。也非常感谢在完成论文过程中关心和帮助过我的同学、朋友们;在与他们交流的过程中,我获得了相当大的启发。感谢我的父母和家人,正是你们的关心和支持才使我顺利地完成了学业。感谢在百忙之中评阅本论文的专家、教授,感谢你们对本论文提出的宝贵意见和建议。最后,再次请所有关心、帮助过我的老师和同学接受我诚挚的谢意!作者:陈纪霞2011年5月 目录第一章绪论.....................................................................................................11.1系统研究开发背景..............................................................................11.2电子商务概述......................................................................................11.3电子商务的发展与现状.......................................................................11.4电子商务的相关技术...........................................................................21.5Microsoft.NET概述.............................................................................41.6本文研究的目标、内容和意义............................................................6第二章系统的总体规划和概要设计................................................................82.1系统总体目标......................................................................................82.2系统工作流程......................................................................................82.3系统的逻辑体系结构...........................................................................92.4系统开发及运行环境.........................................................................112.5系统功能模块....................................................................................112.6系统解决方案项目构成.....................................................................13第三章数据层的设计与实现.........................................................................153.1数据库设计原则................................................................................153.2数据库逻辑结构设计.........................................................................153.3数据库表结构设计............................................................................173.4索引设计...........................................................................................173.5视图设计...........................................................................................183.6存储过程设计....................................................................................193.7事务处理设计....................................................................................193.8数据库安全设计................................................................................19第四章业务逻辑层设计与实现.....................................................................214.1设计规划...........................................................................................214.2类的设计和业务功能的提取.............................................................224.3代码设计...........................................................................................23第五章表示层设计与实现.............................................................................255.1服务器端用户控件和母板设计..........................................................255.2前台子系统设计................................................................................265.3后台子系统设计................................................................................32第六章电子商务系统的安全.........................................................................386.1安全认证协议....................................................................................386.2单向散列算法及应用.........................................................................406.3RSA数据加密技术及应用.................................................................416.4RSA数字签名技术及应用.................................................................45结论..............................................................................................................49参考文献...........................................................................................................51研究生期间撰写的论文.............................................53 插图清单图1-1.NET平台体系结构..................................................................5图2-3系统功能模块图......................................................................11图2-4解决方案项目构成图..............................................................14图3-1数据库表主外键约束关系图....................................................17图3-2表结构图.................................................................................17图5-1首页效果图.............................................................................28图5-2购物车界面效果图..................................................................30图5-3结账页面.................................................................................31图5-4模拟虚拟网上支付界面..........................................................32图5-5基于窗体身份验证的工作原理................................................35图6-1模拟虚拟网上支付界面..........................................................44图6-2数字签名技术原理示意图.......................................................45图6-3结账页面数据签名..................................................................46图6-4发货时验证收货地址的数字签名验证....................................47 第一章绪论1.1系统研究开发背景上世纪90年代以来,随着互联网的发展,电子商务在社会经济领域发展迅速,电子商务推动了商业、贸易、营销、金融、广告运输、教育等社会经济领域的创新,并因此形成了一个又一个新产业,给企业带来许多新的机会。现在电子商务正由起步迈入繁荣阶段,己呈现燎原之势,是二十一世纪经济发展的又一新增长点,这为我国的每一个企业带来了新的机遇和挑战。企业从事电子商务就是通过网络来实现从原料的查询、采购、产品展示、定购到销售、储运以及电子支付等一系列商务活动。在网上发展商务为我们打开了一个崭新的世界,诸如改善服务水平,提高效率,降低费用,增进合作者之间的联系,缩短进入市场的时间以及更广泛的开拓市场。从而大大节约生产的成本,提高管理的水平,增强企业的市场竞争实力。电子商务常见的模式有:商家与消费者(B2C)、商家与商家(B2B)等模式。本论文将通过一个网上书店零售网站的开发实例,对基于.NET技术的B2C模式网上书店零售网站的研究与开发进行了深入的探讨。1.2电子商务概述一般来讲,电子商务通常是指在全球各地广泛的商业贸易活动中,在因特网开放的网络环境下,基于浏览器/服务器应用方式,买卖双方不谋面地进行各种商贸活动,实现消费者的网上购物、商户之间的网上交易和在线电子支付以及各种商务活动、交易活动、金融活动和相关的综合服务活动的一种新型的商业运营模式。电子商务从广义上讲,泛指企业用电子技术手段实现商务及运作管理的整个过程;从狭义上讲,即通过Internet或电子数据交换进行的交易活动。电子商务包括信息流、资金流和物流3大要素。电子商务网站如同其他的Web网站一样,一般情况下,不外乎以下4个目的,即网上宣传、信息反馈、技术支持和产品销售,通过它,电子商务才能得以实施和运作。与普通的Web网站相比,电子商务网站的主要区别体现在数据处理和数据传输要求更高、数据流程更复杂,在网上进行商品交易时要保证数据及信息传输的安全性。1.3电子商务的发展与现状从惠普公司、IBM公司等相继宣布1998年为“电子商务年”以后,电子商务在全球迅速发展,一些发达国家将电子商务视为国民经济发展的重要动力,采取积极措施,建立符合本国利益的电子商务保障体系,发布电子商务的发展战1 略,制定电子商务市场准入和税收政策,支持和促进电子商务的技术开发和应用开发。电子商务已成为发达国家发展战略的重要要素之一的。世界贸易组织,联合国经合组织,国际商会等机构积极参与协调法规及管理电子商务框架,并讨论了统一的电子商业全球或区域贸易规则,法律框架和标准。一些跨国公司基于互联网的采购,生产,配送,物流,网络管理,通过企业之间的信息共享和交流,信息流,资金流和物流的全面集成应用,大大降低了生产成本,提高了竞争力。目前国际电子商务发展的现状和趋势是:全球电子商务,美国独占鳌头,占有绝对的主导地位。另外,亚洲电子商务也处于蓬勃发展阶段。电子商务在国内情况是:我国电子商务是从20世纪90年代初开始起动的,电子商务随着计算机技术、网络技术、通信技术、多媒体技术的发展以及互联网的普及而产生并不断地发展和完善。1998年我国电子商务框架、政策法规与标准、组织结构以及认证中心、网上银行等机构逐步正式开始筹建,为全面开展电子商务积极做好准备。一些部门与企业也纷纷建立了自己的网站,设计了各自精美的门户网站,开展了网上广告、网上销售、网上信息查询、电子支付等业务。但与发达国家相比,我国的电子商务起步较晚,尚处于初级阶段。必须加快推进企业电子商务的发展,这是企业尤其是大企业集团提高核心竞争力、参与国际市场竞争的重要条件。近年来,我国制定了互联网管理的一些条例,如2004年十届人大正式通过了《电子签名法》,并将于2005年4月1日起施行。这将为无形的网上交易树立一道有形的法律保障,将为我国电子商务写下新的篇章。别外,我国的网络基础设施、安全认证、在线支付、物流等电子商务运行环境正在逐步完善,这些都将大大推动电子商务的发展,开展电子商务可谓大势所趋,电子商务的发展必将成为经济发展的一个重要推动力。1.4电子商务的相关技术电子商务是一个集成的新领域,集成商务管理、市场营销、供需链、计算机应用、计算机网络技术、软件工程、密码学等多个学科,需要很多技术作为这个新领域支撑。1.4.1数据库技术在电子商务业务中,诸如商家提供的商品信息、用户信息、商品销售信息、认证中心储存的用户信息、配送中心需要使用的信息等等,这些大量的信息均需要有好的数据库技术作为支持。该技术应包括数据模型、数据库系统(Oracle,SQLServer等)、数据仓库、联机分析处理和数据挖掘技术等。这些数据库技术主要完成:数据的收集、存储和组织、数据分析和决策支持。2 1.4.2微软.Net架构.NET框架是创建、部署和运行Web应用程序的一个环境。它包括如下主要部分:公共语言运行时(CLR)、框架类库(.NetFrameworkClass)、应用程序开发技术(如ASP.NET、WebService等),详细介绍见1.51.4.3XML(可扩展的标记语言)电子商务应用程序开发时常见的一些问题如下:(1)异构应用程序的集成。公司之间要共享数据,那么这些数据就必须适用于不同操作系统平台的应用程序。应用程序之间要互相交换数据,这些数据就必须是适用于不同的应用程序。(2)数据格式的转换。通过Internet进行的电子商务活动,所面临的问题之一是应用程序使用的数据类型没有统一。电子商务应用程序开发遇到的这些问题,都可以使用面向.NET框架的XML和WebService来解决。XML文档是文本格式,能够被任何系统读取和理解。XML天生具备分布性而且通常是面向Web的,XML以自我描述方式定义数据结构,独立于平台和语言。XML为结构化数据的描述和交换提供了统一的方法。利用XML和WebServices,程序员就可以把数据和自身已有的业务系统以及商业伙伴的业务系统整合到一起。W3C(WordWideWebConsortium)组织在1998年公布了XML标准,它是电子商务中信息表示的一种语言。它能够更好地描述结构化数据,以一种开放的自我描述方式定义数据结构;从而体现出数据之间的关系,具有可扩展性、开放性、跨平台性,支持多种语言等优点,从而能较好地解决异构系统之间的数据交换,更适合在网络环境下使用。2000年10月6日,W3C正式颁布了XML1.0的标准版(第二版)。XML作为电子商务的语言,被越来越多的应用软件、中间件以及数据库厂商所支持。1.4.4组件技术组件又称构件或控件,是封装特定功能,提供透明服务、可重用的软件模块。一个组件同一个微型应用程序类似,它是己经编译、链接好并可以使用的,应用程序就是由多个这样的组件打包而成的。在需要对应用程序进行修改或改进时,只需将构成此应用程序的某个组件用新版本的组件替换掉即可。应用组件思想开发系统可以归纳为以下几点特点:(1)便于软件的升级:组件化的思想从一开始提出就是为了便于软件的升级和更新。(2)快速应用程序开发:组件最引人注目的优点之一是快速应用程序开发。开发人员从某个组件库中取出所需的组件并将其快速地组装到一块以构造所需的应用程序。3 目前软件行业出现了两种主要的基于组件技术的分布式技术:Microsoft.NET的COM+技术、SUN的EJB技术。Microsoft的COM+思想先进,技术成熟,开发方便,深受众多分布式开发人员的青睐。本系统通过调用组件类中的外在功能方法接口完成与上层表示层及底层数据库的交互,从而来实现整个软件系统的集成,组件技术提高了代码的复用率和系统的模块化程度,便于维护和升级。1.4.5电子支付技术电子支付技术是为客户提供网上在线付款的技术,电子支付技术涉及到很多的技术问题。这些问题包括:(1)电子货币(电子支票、银行卡、电子现金)的表示形式。电子货币的表现形式主要由金融机构来制定,标准比较复杂,包括一些电子支票和电子现金的形式。(2)发放和管理技术。(3)电子支付模式。目前银行界普通使用的电子支付模式有SSL(SecureSocketLayer安全套接层)和SET(SecurityElectronicTransaction安全电子交易)两种。SSL是在进行支付的双方建立一条安全会话通道。在该安全通道中传送支付信息以确保信息安全。SET是以信用卡支付为基础的网上电子支付协议,SET协议保证了电子交易的机密性、数据完整性、身份的合法性和不可抵赖性。SET协议对一些敏感信息(如信用卡号,收货地址等)进行加密或数字签名。SET协议使用了如下一些安全措施:加密技术,数字签名技术和数字认证技术。1.4.6加密解密和数字签名技术安全问题解决好坏直接影响到电子商务是否可以迅速发展。为此在网络上进行商务活动需要一个商务活动所涉及的各方均信任的第三方机构来完成商务活动各方的身份认证。目前普通使用的身份认证方式是证书认证方式,每一个证书与一个密钥相对应。现在最为流行的证书格式是由ITU-T建议的X.509中所规定的。其他标准化组织也采用了X.509作为公共密钥认证的基础。在认证体系的实现中的技术包括号簿管理技术(证书的格式、证书的发放及证书的认证),以及一些加密技术,如对称式加密法(私密钥加密法)、非对称式加密法(公开钥加密法)等。1.5Microsoft.NET概述1.5.1.NET开发平台的简介2001年微软正式发布.NET开发平台,标志着近十年来微软开发平台一次重大的转变。.NET开发平台使得开发者创建运行IISWeb服务器上的Web应用4 程序更为容易,它也使创建稳定、可靠而又安全的Windows桌面型应用程序更为容易。.NET框架实现了语言开发、代码编译、组件配置、程序运行、对象交互等各个层面的功能,为Web服务及普通应用程序提供了一个托管、安全、高效的执行环境。.NET开发平台的组成如图3-1所示。图1-1.NET平台体系结构VisualStudio.NET提供了一个用于在该平台上创建应用程序的图形界面集成开发环境。程序员可以使用一种或多种.NET编程语言来编写他们的代码,例如微软自己的VC#,VB.NET,VC++.NET等。其它的.NET编程语言可以从第三方厂商获得。1.5.2.NETFramework.NETFramework是支持生成和运行下一代应用程序和XMLWebServices的内部Windows组件。.NETFramework具有两个主要组件:CLR(通用语言运行环境)和.NETFramework类库。CLR是.NETFramework的基础。CLR提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性检查。CLR允许并列安装多个版本的组件,它可以避免在一台机器上安装相冲突的软件组件时发生的问题,CLR减少了不同版本组件间的冲突。当CLR加载一个应用程序时,它使用元数据来确保它加载了所有组件的正确版本。CLR中的自动拉圾收集器来负责.NET应用程序运行时的内存管理问题,彻底解决了多年来困扰程序员的内存泄漏问题,大大增强了应用程序的健壮性。1.5.3ASP.NETASP.NET是.NET开发平台的一个部件,用来开发驻留在微软的IIS上并且使用诸如HTTP和SOAP等Internet协议的Web应用程序。ASP.NET使Web应用程序和WebServices这两种类型的Web应用程序的开发和部署更为容易。这两种Web应用程序体现了超出传统应用程序的一个主要的优点:它们使用基于5 Internet的协议使信息可以轻易地穿过组织边界(如防火墙)移动,如同在一个组织内移动一样。1.5.4ADO.NET.NET中的数据访问技术是ADO.NET。ADO.NET的对象模型中有5个主要的组件,分别是Connection对象、Command对象、DateReader对象、DateAdapter对象和DataSet对象。这些组件中负责建立联机和数据操作的部分称为数据操作组件。数据操作组件最主要的用途是当作DateSet对象以及数据源之间的桥梁,负责将数据源中的数据取出后植入DateSet对象中,以及将数据存回数据源的工作。ADO.NET为应用程序提供了两种数据访问的模式:连接模式(ConnectedMode)和非连接模式(DisconnectedMode)。相对于传统的数据库访问模式,非连接的模式为应用程序提供了更大灵活性。在该模式下,一旦应用程序从数据源中获得所需的数据,它就断开与原数据源的连接,并将获得的数据以XML的形式存放在主存中。在应用程序处理完数据后,它再取得与原数据源的连接,并完成数据的更新工作。1.6本文研究的目标、内容和意义本文研究内容属于支持电子商务的技术开发领域,这是计算机学科应用的新兴领域和当前热点领域。本文首先对电子商务的概念、发展现状及电子商务网站的实现技术进行了介绍,然后结合一个具体的电子商务站点,对网站进行了网站规划、概要设计、详细设计及编码开发,最后又对站点的安全进行了分析,规划和处理。本文对电子商务系统开发中增强系统的复用性、可靠性、可维护性、高效性和先进性作出探讨。对电子商务中的安全,也提出并实现了较为完整的解决方案。选择以电子商务作论文,因为它有很大的应用价值,而且其涉及的计算机技术也非常全面。本文的研究目标和内容如下:系统采用当前流行的B/S设计模式,基于Windows.NET平台构建Web应用程序,把系统划分为数据层、业务逻辑层和表示层。然后分别从数据层,业务逻辑层和表示层这三层体系的角度阐述了基于.NET平台下的电子商务系统的设计与实现,提出了基于.NET架构的总体设计方案。研究.NET环境的体系结构和建立在此基础之上的电子商务开发技术,运用全新的面向对象语言C#,采用ASP.NET,运用Web服务和XML,利用SQLServer2005做后台,利用ADO.NET作为接口,在VS2008环境下设计和实现网上书店电子商务系统,构建了3层B/S模式架构,使得数据处理逻辑与它的表现形式分离,保证了系统的可扩展性和可复用性。安全性是设计和实现基于Web技术的电子商务系统要解决的关键性问题之一,本文对电子商务系统的安全性做出了深入的探索。在用户权限管理方面:6 根据用户使用功能划分角色,采用窗体身份验证方式,运用基于角色的授权;在信息安全和身份认证方面:应用了.NET编程技术下的数据加密技术、数字签名和身份认证技术。对系统的安全性设计了一个较为全面的安全解决方案。为了实现数据库的安全,防止SQL注入式攻击,以及代码复用和提高系统性能,系统中使用了SQL存储过程。为了系统的可扩展性和代码的复用性,在业务逻辑层中采用组件编程,把各种业务逻辑功能封装到组件的类的方法中。7 第二章系统的总体规划和概要设计2.1系统总体目标本系统的总体目标就是通过学习、研究和运用微软的.NET平台,开发实现一个B2C模式的电子商务系统,具体是研究和实现一个网上书店的B2C电子商务系统,让用户更便利地实现网上的电子交易,同时让开发者更高效地开发,让商家的数据维护和更新成本更低。充分利用.NET环境的优势,来高效地实现电子商务是本项目的总体目标。为此系统应该达到以下要求:1、运行效率高。优化逻辑设计与物理设计,使系统运行效率高,反应速度快。2、便于理解和操作。用户容易理解和使用该系统。系统运行后,不需要专业人员的介入就能方便的进行管理和维护:3、便于维护性和扩充。系统应易于修改、扩充、维护,能够适应业务发展变化的需要。4、功能完备。目标系统功能齐全,能够完全满足业务需求。5、安全保密。保证系统的物理安全、数据存储和存取的安全与保密、数据传输的安全与保密,做好使用人员的授权管理。6、用户界面友好,便于商家和用户之间的沟通。2.2系统工作流程系统分为前台普通用户界面和后台管理界面。在前台子系统用户可以登录,注册,更新用户信息;可以浏览商品,搜索商品,购买商品,查看商品的评论,会员用户还可以对商品发表评论以及登记所缺的商品等。后台子系统供电子商务公司内部管理人员使用,可以进行新品上传,商品修改和调整,商品种类维护,所缺商品管理及回复;可以对用户进行管理;对用户的订单进行管理等等。系统工作流程可以用图2-1形象描述如下:8 图2-1系统运行流程示意图2.3系统的逻辑体系结构系统采用当前流行的B/S设计模式,基于Windows.NET平台构建Web应用程序,把系统划分为数据层、业务逻辑层和表示层。逻辑体系结构如图2-2所示:图2-2系统体系结构图2.3.1三层结构(1)表示层:即用户界面层,是由ASP.NET技术的Web窗体组合起来构成的。表示层运行在客户端浏览器上,产生用户视图。在业务逻辑层发生变化时通过改变表示层的组合以及做一些简单的调整就可以很好地适应新的业务逻辑层。9 (2)业务逻辑层:该层从整个系统功能设计中抽取大量具有共性的模块,把它们统一设计成系统公共的可重用的组件,表示层来调用组件中这些类的功能。(3)数据层:用来管理和存储数据,实现数据访问功能,设计数据库,定义数据表结构、表的索引、数据表之间的关联,定义数据库中的视图以及操作数据的存储过程,设计数据库的安全等等。层与层之间的通信方式为:表示层的ASP.NETWeb窗体,对业务逻辑层组件中的类进行实例化并调用其功能。业务逻辑层通过ADO.NET访问后台数据库SQLServe。系统运行时是通过客户端和Web服务器和数据库服务器之间请求响应的会话模式完成。运行时客户端通过浏览器提交HTTP请求到Web服务器的ASP.NET应用程序。ASP.NET应用程序接收客户端传来的参数,进行相应的处理,访问数据库,将通过ADO.NET方式向数据库提出请求,数据库服务器对请求进行处理,并将处理结果主要以实体类泛型数组形式返回到Web服务器。Web服务器对实体类泛型数组进行处理,再将结果传送到客户机的浏览器。浏览器在收到结果后,再将结果动态显示出来。2.3.2B/S设计模式信息技术的高速发展推动了设计模式不断更新。从单机时代的主机/终端模式、文件服务器时代的Client/Server(客户机/服务器)模式,到互联网时代的Browser/Server(浏览器/服务器)网络模式。B/S模式是基于Web技术对传统C/S模式进行改进而形成的一种新型模式。该模式采用三层结构,它是以Web服务器为中心,采用TCP/IP和HTTP为传输协议,前端采用通用浏览器(如IE)以HTTP协议方式访问Web服务器,后端采用ADO.NET访问数据库,将结果返回浏览器。本系统采用B/S设计模式,有其特殊的优点:(1)复杂度降低,可靠性提高B/S是一种瘦客户机模式,客户端软件只需安装Web浏览器,无须开发客户端软件,Web浏览器简单易用。所有的代码和配置信息都在Web服务器上集中存储和管理,大幅度降低了客户端的复杂度。(2)系统的维护、升级和部署简单B/S模式的系统升级、维护和部署主要在Web服务器和数据库服务器端,减少了整个系统的维护和部署工作量成本。客户端、Web服务器和数据库服务器的升级可以独立进行,使系统升级工作量减少、系统的升级更加方便。由于上述优点导致了现在应用系统的体系结构从C/S模式的体系结构向B/S模式的体系结构演变,使得软件系统的网络体系结构跨入一个新阶段。10 2.4系统开发及运行环境本电子商务系统的开发及运行环境为:操作系统平台:WindowsXP/Windows2003Server。Web服务器:MS-IIS6.0(InternetInformationServer)及以上。数据库管理系统:以SQLServer2005为后台数据库,通过ADO.NET来访问后台数据库系统。集成开发环境、开发工具及语言:在VisualStudio.NET2008之上以ASP.NET作为开发工具,充分利用.NET框架,利用C#作为主要开发语言进行开发。运行平台SQLServer2005数据库服务器+WindowsWebIIS服务器+WebBrower浏览器2.5系统功能模块根据本电子商务系统网站的功能和业务流程,我把此商务网站分为以下模块,如图2-3所示:图2-3系统功能模块图前台子系统模块的主要功能是引导客户(网站访问者)完成网上购物的过程,主要由商品浏览检索模块、用户模块、购物车模块和用户订单模块等组成。后台管理子系统模块主要是对电子商务系统进行管理,一般由客户管理模11 块、订单管理模块、商品管理模块和后台管理人员权限分配等功能模块组成。下面对部分模块进行解释。2.5.1前台功能模块图书类别功能模块用户可以通过预先分类好的图书类别来浏览相关的图书目录以至详细的图书信息,从中发现自己感兴趣的书。图书搜索功能模块让用户通过书名、作者、出版社、ISBN等为条件,通过搜索的功能来快速找到自己想要买的书。图书展示功能模块对图书商品进行详细展示,包含图书封面图片,图书简介等,若想购买单击“加入购物车”即可。购书车功能模块当用户找到自己想购买的书时,单击“加入购书车”的图标,将图书加入到购书车中。在购物车页面中,可以修改商品数量,移出某图书商品,可以清空购物车,可以继续购物。等到用户找到所有想买的书之后,单击“结帐”的功能,进入结帐的网页。用户订单功能模块浏览客户已下的所有订单、查看订单详情,也可取消尚未付款、发货的订单。缺书报告功能模块当用户在此网站想购买某本图书但发生缺书时,可以在此功能模块中向网站管理人员报告。结账功能模块在购物车模块,当用户找到所有想买的书之后,单击“结帐”的功能,进入结帐的网页。在结账页,会显示用户的个人资料信息,订单的明细商品信息,订单金额,及默认的收货地址及收货人。这里可以更改收货地址和收货人,可以根据实际情况决定是否要对收货地址进行数字签名以防黑客修改。然后选择支付方式是邮局汇款还是网上支付,单击“提交订单”,即产生订单,并进入付款页面。在付款页面,显示产生的订单号,若是网上付款,这里可以在用WebService摸拟的银行网关中输入你的银行卡号和密码。为了防止明文传输泄密,接着按提示导入银行网关的公钥对银行卡号进行加密,单击“提交”付款成功,同时把此订单的状态修改为“已付款”,为防止提交的中途出现故障,提交过程中采用了事务处理功能。2.5.2后台管理功能模块图书管理功能模块12 其下的子模块分别负责对图书信息进行添加、修改和删除,以及对缺书的回复和管理,利用图书类别管理,还可以增加和修改图书类别,但由于受到外键约束的作用,被使用过的图书类别不能删除。图书修改结果会同步在网站上更新,客户可以在第一时间浏览到最新的商品信息。订单管理功能模块管理员可以通过该模块实时对客户的订单进行处理。管理员可以对订单进行浏览、查询,可以管理订单的付款和发货。用户管理功能模块管理员可以通过该模块对客户信息进行查找、浏览和删除。管理人员权限分配功能模块后台管理应用程序对管理人员采用窗体身份验证方式和基于角色的授权,此模块用于对管理人员进行了角色分配,从而实现管理人员权限分配,基于角色的授权管理简化了权限分配工作。2.6系统解决方案项目构成为了用B/S模式的三层架构实现本电子商务系统的设计,本人用VisualStudio2008简体中文企业版设计了一个名为“BookShopOnNet”的电子商务系统解决方案,用C#语言在该解决方案中建立了五个项目,这五个项目的有机结合,构成了本电子商务系统。这五个项目分别和B/S设计模式的三层体系结构中的某个层或某个层中的一个子层相对应,每个项目都有各自独立的功能,在三层体系结构中扮演相应的角色。这样解决方案可以方便地管理各个应用程序。在解决方案中之所以设置若干个项目,是因为它更符合模块化程序设计的思想,便于在软件开发中进行分工协作,各项目小组各自独立创建并完成自己的项目,便于进行团体协作。同时这种设计思想也便于系统调试、维护、升级和集成。这些项目的名称和作用分别如下:BookShopModel项目:此项目对应于三层体系结构数据层的实体子层,此层中的每一个实体类,与数据库的一个基本表的结构相对应,不过,表中的外键字段,根据需要,要把大部分外键字段在实体类中设计成外键类。此项目进行编译后得到组件的程序集文件BookShopModel.dll。BookShopDAL项目:此项目对应三层体系结构的业务逻辑层的数据访问子层,在此项目中,把ADO.NET数据访问的四种形态,封装到DBHelper类的四个静态方法中,项目中其他类的方法,都是通过调用DBHelper类的四个静态方法来访问数据库。这样做是进一步进行代码复用,减少代码量,便于维护。BookShopBLL:13 此项目对应三层体系结构的业务逻辑层的功能业务逻辑子层,界面表示层的所有功能,都体现为这里类的方法,表示层调用这里类的方法完成其功能操作,这里的方法是调用BookShopDAL项目中相应的方法来完成对数据库的操作。WebSite项目:此项目对应三层体系结构的表示层,这个层就是系统应用的前台和后台,这个项目中的“Admin”子文件夹对应后台子系统,其他文件对应前台子系统。BankWebService项目:为了模拟电子网上支付时要用到的银行网关,在银行网关中进行支付时对银行卡号进行公钥加密,在系统中添加了此项目,该项目用WebService来虚拟模拟实现电子支付时的银行网关。实际编写电子商务系统时,不需要此项目,而是调用真正的银行网关接口。上述几个项目的抓图示意如下:图2-4解决方案项目构成图14 第三章数据层的设计与实现3.1数据库设计原则SQLServer数据库管理系统具有完备的大中型数据库管理系统的功能,充分运用它所提供的功能,可以保证系统的科学性、高效性、安全性、可靠性。数据库的设计要遵循以下一些原则:E-R图:首先用全局E-R图(实体关系图)对数据库进行概念设计,组织原始数据,实现全局数据规划。规划设计数据的主键、外键、唯一性、非空性、缺省值、域值等。主键:对每个数据库表定义主键(自动设置成聚簇索引并具备唯一性控制),通过指定表的主键,保证每一行的唯一性,进而实现实体完整性。参照完整性:参照完整性(又称引用完整性)定义主表与辅表之间的主键与外键的关系,保证辅表外键对主表主键具有从属关系的一致性。索引和查询策略:在对具有大数据集合的字段进行查询时,必须在此字段上设置索引,以保证查询的速度性能,从而对于绝大部分常用查询,能够加快查询速度,实现系统的性能要求。安全性:设置用户访问数据库系统的帐号和口令,然后根据电子商务系统中的实际需求,分配各用户对各数据库及其对象的权限,来实现数据库系统的安全性。视图:为了简化用户的操作,以及对数据库表进行一定程度的重构,也是为了对数据库表中部分数据进行保护,可以在数据库中设计了视图。视图可以屏蔽掉用户不该访问的数据库对象,实现一定程度的安全功能。存储过程:为了加快数据库服务器的运行,确保数据库的安全,可以考虑尽量使用存储过程,尽量少地直接使用SQL语句。事务处理:在系统中为了保证系统中数据的一致性,实现操作的原子性,避免数据操作的相互影响以达到操作的隔离性等,系统在对数据库进行非查询式的多表编辑操作时,以事务的方式进行操作。3.2数据库逻辑结构设计逻辑结构设计的任务是将概念设计阶段设计的E-R图转换为恰当的关系模型逻辑结构的过程,就是进行关系模式的设计。在转换过程中,最基本的要求是保证每个关系至少有一个码,每个属性都是不可分的数据项。在进行关系模式的设计时,一定要遵循关系模式的指导理论,每个关系都应满足一定的规范。本系统中我们要求满足第三范式(3NF),这样能使关系模式设计合理,达到减少数据冗余、提高查询效率的目的,同时还能满足数据的一致性、完整性要求。15 通过数据库逻辑设计,得到下列十个基本关系表。表中用户的口令都是以口令明文的Hash散列值形式存储的,以避免泄露口令,提高安生性。UserInfo(用户表):用来存储用户的详细信息,主键为用户序号UserId,另外还有用户名,口令,E_mail,用户姓名,性别,电话,家庭地址等字段。ManageUser(后台管理人员表):用来存储后台管理人员信息,主键为管理人员序号ManageUserId,另外还有管理人员用户名,口令,角色号,E_mail等字段。Book(图书信息表):用来存储图书信息,主键为图书序号BookId,还有图书类别序号,书名,作者,ISBN,译者,出版社,价格,折扣率,封面图片,简介,点击数,销量,库存量,是否缺货等,其中折扣率和是否缺货字段默认值都为1。BookType(图书类别表):用来存储图书类别,主键为图书类别序号BookTypeId,还有图书类别名,说明等字段。ShoppingCart(购物车表):用来存储购物车信息,主键为购物车序号ShoppingCartId,还有用户名或临时用户名,图书号,购买图书数量,购物日期(默认值为getdate())等字段。Orders(订单表表):用来存储订单信息,主键为订单序号OrderId,另外还有用户号,订单金额,订单日期,付款状态,发货状态,发货日期,收货地址,收货人,收货地址是否被签名,收货地址的用户数字签名值,用户公钥等字段。OrderDetails(订单细节表):用来存储订单细节信息,主键为订单细节序号OrderDetailsId,还有订单号,图书号,购买数量等。Comment(图书评论表):用来存储图书评论信息,主键为评论序号CommentId,还有图书号,用户名,Email,评论标题,评论内容,评论日期(默认值为getdate())等字段。LackRecord(缺书表):用来存储缺书信息,主键为缺书序号LackRecordId,还有用户号,书名,出版社,回复等字段。这九个表的关系图如图3-1:16 图3-1数据库表主外键约束关系图3.3数据库表结构设计以用户表UserInfo为例,其他表就不一一介绍了。图3-2表结构图3.4索引设计索引是根据数据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表,根据多个列组合创建的索引称为复合索引。在数据库系统中建立索引主要有以下作用:快速存取数据;保证数据的惟一性;实现表与表之间的参照完整性;在使用ORDERBY,GROUPBY子句时,索引可以加快排序和分组。17 按索引的组织方式,可将索引分为聚簇索引和非聚簇索引两类。1、聚簇索引聚簇索引将数据行的键值在表内排序并存储对应的数据记录,使得数据表物理顺序与索引顺序一致。SQLServer2000是按B树组织聚簇索引的,B树的叶结点存放数据页信息。一个表只能有一个聚簇索引。SQLServer2000中主键字段默认情况下自动创建为聚簇索引。2、非聚簇索引非聚簇索引是完全独立于数据行的结构。SQLServer2000也是按B树组织非聚簇索引的,与聚簇索引不同之处在于:B树的叶结点不存放数据页信息,而是存放非聚簇索引的键值,并且每个键值项都有指针指向包含该键值的数据行。对于非聚簇索引,表中的数据行不按非聚簇索引的次序存储。一个表能有若干个非聚簇索引。本系统中的索引设计:在本系统中,用户浏览网站时由于经常要按书名,ISBN,出版社,作者搜索书籍,经常要按图书类别分类显示图书,以及其他情况下要按某字段排序,还有经常要对两个表按主键-外键进行连接,所以在数据库中,都按主键建立了聚簇索引,对前面所列出的字段和外键都建立了非聚簇索引,以改善数据库系统性能,提高系统效率。但是表中索引数目太多,也会影响到性能甚至降低性能。如Update,Delete和Insert等,当进行这些操作时要对索引或表进行调整。所以本系统没创建SQLServer不常使用的索引,也没建立过多的索引,否则也会在数据更新时产生不必要的开销。3.5视图设计视图是从一个或几个基本表或视图导出的表,它是一个虚表,数据库中只存储视图的定义,并不存储视图所对应的数据,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关的基本表。使用视图具有许多好处:当用户需要的数据分散在多个表中时,定义视图可以为用户集中数据,简化用户的数据查询和处理。视图可以使不同用户能以多种角度看待同一数据,重构数据库。可以屏蔽掉不愿让某些用户看到的机密信息。简化了用户权限的管理,授予用户使用视图的权限,尽量减少用户直接使用基本表,增强安全性。但是本系统中,由于在实体子层和数据访问层使用了外键类,因而本系统中,几乎没有使用视图,把视图可以实现的功能,在中间层通过外键实体类代替了。18 3.6存储过程设计数据库中的存储过程对应高级语言中的子程序,存储过程的内容是SQL语句,与高级语言的子程序一样,存储过程也有输入输出形参。在本系统进行数据层设计时,采用了存储过程,之所以使用存储过程,是因为:存储过程在服务器端运行,存储过程执行一次后,就被编译为二进制代码且驻留在高速缓冲存储器中,在以后的操作中,只需从高速缓冲中调用已编译好的二进制代码,提高了系统性能。而且存储过程中也便于使用事务处理。简化了用户权限分配,确保了数据库安全。用户分配权限时,可以尽量分配存储过程的执行权,少分配对基本表的权限。使用存储过程,可通过存储过程一次发送多个请求,避免数据库服务器和请求端的多次往返传输,减轻数据库服务器的负担。业务逻辑层对存储过程进行调用,可以在不改动或少改动业务逻辑层代码的情况下,对存储过程中的SQL语句进行修改、升级。为以后系统的维护和升级提高了极大的方便。使用存储过程也可以避免数据库SQL注入式攻击等,增强健壮性。3.7事务处理设计用户在电子商务网站上购物时,经常要向后台数据库写入各种数据,比如用户产生订单时,要向订单表和订单细节表同时写入数据,后台数据库也经常遇到这种情况,比如订单发货时,即要把订单发货状态改为已发货,同时又要把图书的销量增加,库存量减少。但我们知道,系统运行过程中,不可避免地会发生各种异常情况,从而导致后台数据库在更新过程中发生中断,导致数据的不一致性。如何解决这一问题呢?我的解决方法———事务对这一问题本系统采用的解决方法时引入事务处理功能。所有的数据更新处理过程都要保证其事务性,保证整个事务要么完全执行,要么不执行,当事务执行未完成,如果发生异常或出现错误而中断,系统回退到事务开始前的状态,这样就能保证数据的一致性。.NET环境下,事务分为基于存储过程事务和基于连接的事务。本系统主要采用存储过程事务,把事务放在存储过程之中。3.8数据库安全设计在一般的计算机系统中,安全措施是一级一级层层设置的,可以有以下的模型:19 用户标识和鉴别:是指在数据库服务器系统中为用户建立用户账号,只有正确输入了口令的合法用户才准许进行数据库服务器系统,防止非法用户进入。存取权限控制:是指为用户定义相应的权限,用户只能在权限允许的范围内进行操作。数据密码保护:是指对重要的敏感数据进行加密,以密文而非明文方式存储数据。本系统所进行的数据库安全设计:针对上述可采用的数据库安全策略,本系统采用了下述方法进行安全处理。针对前台进行网上购物的普通客户用户,在数据库服务器SQLServer2005系统中统一定义一个用户名叫BookUser的用户账号,给此用户账号分配对基本表、视图、存储过程的相应权限。普通客户用户都是通过ADO.NET以BookUser用户账号的身份对后台数据库进行连接并访问。针对后台管理人员用户,按照他们在数据管理中所处的角色,在数据库服务器SQLServer2005系统中分别定义了用户名为BookManager的用户账号,给这个用户账号按照在实际工作中的权限分配对基本表、视图、存储过程的相应权限。这些后台管理人员用户也通过ADO.NET以相应的用户账号的身份对后台数据库进行连接并访问。具体权限的分配这里不详述。另外,对系统中的敏感数据,我不是直接以明文方式进行保存,而是以用户密码散列值的方式保存,大大提高了安全性。由于客户订单的收货地址是极重要的,但可能发生客户订单的收货地址被黑客篡改,而使订单的商品发往篡改后地址而被黑客所窃取,所以在进行数据库表设计时,对订单表Orders增设了收货地址的“是否签名”字段、“数字签名值”字段和“客户公钥”字段。当用户希望对收货地址进行保护时,可对收货地址进行签名,并把签名值和客户公钥一同写入订单表Orders的相应字段,管理人员进行发货时,就可以利用“数字签名值”字段和“客户公钥”字段验证签名是否正确,从而保证客户收货地址的完整性,避免被篡改,提高了数据的安全性。20 第四章业务逻辑层设计与实现4.1设计规划软件开发要体现软件复用,便于以后进行升级和维护,构成软件的模块应当高内聚,模块间应当松耦合。遵循这一思想,在这个电子商务系统开发过程中,采用了组件技术。组件技术也是目前流行的编程思想。下面对组件技术进行简介。组件(Component)又称构件,是封装特定功能,提供透明服务、可重用的软件模块。组件是对数据和方法的简单封装,组件有时被认为是类库的同义词,类有自己的属性和方法。类的属性是用set或get访问器来定义的,类的方法可用类的成员函数(或用static修饰的静态成员函数)来定义的。应用程序就是由多个这样的组件类打包而成的,在需要对应用程序进行修改或改进时,只需将构成此应用程序中的某些组件用新版本的组件替换即可。应用组件的思想进行系统开发的优越之处我归纳为以下两点:(1)便于软件的复用和升级:组件技术提高了代码的复用率和系统的模块化程度,组件化的思想从一开始提出就是为了可复用性,就是为便于软件的升级和更新。(2)快速应用程序开发:组件最引人注目的优点之一是快速应用程序开发。开发人员从组件库中取出所需的组件,并将它们快速地组装到一起,以构造所需的应用程序。目前软件行业出现了两种主要的组件技术:Microsoft的.NET技术、SUN的EJB技术。Microsoft的.NET思想先进,技术成熟,开发方便,深受众多开发人员的青睐。业务逻辑层,也叫中间层或组件层,对应文件的扩展名一般是为.dll。在.NET的三层架构中,前端用户层为HTML,ASP.NET等网页,中间层为用C#语言编写的组件,后端数据层为数据库管理系统。表示层通过中间层来连接以及操作数据层,给中间层传递参数,并接收中间层返回的结果。在以前的WindowsDNA平台上,组件的使用需要安装,安装时注册注册表,注册后又要重启动,非常麻烦。而在.NET平台上,微软做了很大的改进,应用程序的部署采用Xcopy方式,这样组件拷贝后即可使用,不用考虑注册的问题,也就不存在重启动的问题,即插即用,是一种绿色软件。在业务逻辑层设计时,采用了组件设计的思想。在本系统规划时,在解决方案中共设计了四个项目,把业务逻辑层作为解决方案中两个单独的组件项目,项目名分别为BookShopDAL和BookShopBLL,这两个项目分别是业务逻辑层21 的两个子层。需要使用该组件项目的,只需对此组件项目添加一个引用即可。以后对组件进行升级和更新后,只需重新编译此组件项目,其他使用该组件的项目只需对此组件项目重新刷新引用即可。业务逻辑层要对数据层进行访问,这自然就涉及到对数据库的访问,在归纳了本系统中ADO.NET对数据库访问的几种形态后,设计了一个SQLDbHelper数据访问类,专门进行数据访问处理,其他的类进行数据访问时,只需调用其方法即可。SQLDbHelper数据访问类设计:为减少代码的编写量,也为了便于维护,在BookShopDAL数据访问子层项目中,设计了一个SQLDbHelper数据访问类,专门负责ADO.NET数据访问。由于这个类的方法和使用的连接对象使用频繁,把它们都做成静态static成员,整个类也设计成表态类,这样它就常驻内存,无需反复实例化,从而提高系统的运行效率。4.2类的设计和业务功能的提取按照面向对象的设计思想,对网上书店的业务进行分析后,将整个逻辑抽象为几个类,所有的业务操作被附加到这些类中,以类的方法的形态来实现。这些类设计好以后,就可以供表示层的应用程序调用。下面只介绍数据访问子层中设计的几个类。在这些类的定义中,用get和set访问器自定义组件属性,用成员函数定义组件的方法,因为是用C#语言编写的,所以文件的扩展名是.cs。这此类及类中主要方法的功能简介如下:BookDAL类的Book_GetList方法返回所有图书的信息;Book_GetTop10ListBySales方法获取销售排行榜前十位信息;Book_Add方法用于上传新书信息到数据库中;Book_DeleteById方法用于按书号BookId删除图书;Book_GetTop10NewBookList方法用于获取新书前十位;Book_GetModelById方法以实体类的方式获取指定的图书详细信息;Book_SearchList方法用于搜索图书。Book_UpdateById方法用于更新图书。上述方法的参数多以实体类的形态,返回结果一般是实体类或实体类泛型数组。BookTypeDAL类的BookType_GetList方法用于获取图书类别;BookType_Add方法用于增加图书类别;BookType_DeleteById方法用于删除图书类别;BookType_UpdateById方法用于更新图书类别。CommentDAL类的Comment_GetListByBookId方法返回数据库中关于某种图书的所有评论信息;Comment_Add方法可以让用户添加对某种图书的评论。Functions类主要用于对字符串进行Hash散列,其GetHashOfMD5Format方法用于将一个字符串用MD5算法散列进行散列,得到一个散列字符串;其GetHashOfSHA1Format方法用于将一个字符串用SHA1算法散列进行散列,得到一个散列字符串。22 ShoppingCart类可以在数据库存储的购书车中添加、删除、更新和购买图书,它是系统中非常重要的一个组件。ShoppingCart类的ShoppingCart_GetListByShopUserId方法用于获取某一用户购书车内所有图书的清单;ShoppingCart_Add方法用于添加一种图书到购书车中;ShoppingCart_UpdateById方法更新当前购书车中某种图书的数量;ShoppingCart_DeleteById方法将购书车中某种用户不想购买的图书删除掉;ShoppingCart_SumByShopUserId返回当前用户购书车内所有图书的总的类别数目;ShoppingCart_TotalMoneyByShopUserId方法计算当前购书车中所有图书的总金额;ShoppingCart_ClearByShopUserId方法将当前购书车内的所有图书信息全部清空。ManageUserDAL类可以添加、删除、更新和查询用户,并进行用户登录验证。ManageUser_Add方法用于插入一条新的客户用户记录到数据库;ManageUser_ChangePassword方法用于用户进行口令更改;ManageUser_DeleteById用于删除用户;ManageUser_Login方法,通过与数据库中的用户记录对比来验证用户的身份进行登录;ManageUser_GetRolesByManageUserNameAndPwd方法用于获取管理员用户的角色;ManageUser_GetModelById方法以实体类返回指定用户的所有信息;ManageUser_UpdateById方法用于更新用户信息;ManageUser_UpdateRolesById方法用于更新管理员角色。UserDAL类可以添加、删除、更新和查询用户,并进行用户登录验证,其方法与类ManageUserDAL相似,不再详述。OrdersDAL.cs文件中包含了OrdersDAL和OrderDetailsDAL两个类的定义。OrderDetailsDAL类只有一个OrdersDetails_GetOrderDetailsByOrderId方法,它是根据订单号获取订单详情实体类泛型数组。OrdersDAL类的Orders_GetAllOrdersListByUserId方法用于显示指定用户所有订单清单;Orders_GetModelById方法返回一个指定订单的订单详情;Orders_CreateOrderToOrdersAndOrderDetails方法把订单写入数据库的订单表和订单细节表中;Orders_CreateOrderWithSignToOrdersAndOrderDetails方法把订单写入数据库的订单表和订单细节表的同时,把订单收货地址的数字签名也写入订单表的相应字段中;Orders_DealPaymentStatusForGoods方法用于对订单进行付款处理;Orders_DealCarryGoodsStatusForGoods方法用于对订单进行发货处理并更新销售量;Orders_DeleteOrderByOrderId方法用于删除订单等,其他方法的功能这里就不介绍了。4.3代码设计在每个方法中都使用了语句:try....catch......finally.....,使用这种语句在try子句中执行操作,在catch子句中捕捉try子句执行中的异常现象,在finally子句中对资源进行了释放。这种语句比以往任何语言中的错误捕捉语句的功能都强大,并增加了在finally子句中对资源进行释放的可选子句。数据访问子层中,每个通过ADO.NET访问数据库的类,都是通过调用23 SQLDbHelper类的相应方法来操作数据库的。并以整型、实体类或实体泛型数组的相应的形式返回结果。当需要传递较多数据到方法中时,一般都把数据包装成实体类,以实体类的形式做为参数。业务逻辑子层,一般是对数据访问子层的类进行进一步封装。24 第五章表示层设计与实现本网站分为前台客户子系统和后台管理子系统。表示层页面通过业务逻辑层的组件,来操作数据库,实现相应的功能。本系统开发过程中,设计了三十多Web页面,本章只对其中一部分有代表性的Web页面的设计思想和实现方法进行介绍。下面首先来介绍一下本系统开发时用户界面设计的方法。用户界面的设计工作主要就是静态HTML和ASP.NET服务器控件的布局和外观设计,利用VisualStudio.NET集成开发环境可以非常方便地进行设计。对于系统的界面设计,采用了目前流行的CSS+DIV设计,并且把CSS做成外部样式,使用时链接进去,外部样式便于复用,格式统一,便于以后的调整。用DIV进行布局,比以前的TABLE方式,功能更强大,界面更美化,操作更灵活。界面美化设计总结如下:菜单设计:利用CSS+HTML来实现,具体的CSS代码,放置于一个外部样式文件menu.css中,这样做复用性强,以后便于维护,代码简洁。超链接效果设计:超链接效果设计全部用CSS来实现,并且把CSS效果做成外部样式文件,没有使用内置CSS样式,外部CSS样式文件为:hyperlink.css,这样做,若以后想更换超链接效果,只需更新hyperlink.css中样式即可,体现组件化思想。界面框架布局采用DIV,网页内局部的布局,可以使用TABLE,框架布局使用DIV时,所使用的外部样式文件为StyleSheet.css。5.1服务器端用户控件和母板设计服务器端用户控件技术,是一种将代码和内容分离、实现代码重用的新技术。不仅可以重用代码,还可以重用用户界面。Web动态网页设计中,一般把导航条部分和各个页面都重复的部分做成用户控件,然后在各个页面中引用用户控件。可以使用Web服务器端控件甚至第三方控件,包装出可重用的自定义用户控件。控件的开发者可以将内部的实现隐藏起来,只暴露出必要的属性、方法和事件,而控件的使用者只需和控件的有限的几个属性、方法和事件打交道。另外对网页中的公共部分,采用母板技术,把公共部分做到母板,各网页只需关注非公共部分的开发。本系统中所开发的用户控件:本人以为,软件开发就要体现软件复用,便于以后进行升级和维护,构成软件的模块应当高内聚,模块间应当松耦合。遵循这一思想,本电子商务系统的前台子系统和后台管理子系统都使用了用户控件,所使用的几个用户控件设25 计如下:top.ascx用户控件,它包含几个导航按钮,分别是首页、购物车、用户订单记录、搜索、缺书报告、后台管理等几个超链接控件。top.ascx用户控件会出现在整个前台子系统每个页面的顶部的导航部分,它的代码比较简单,主要是几个相关的链接,在此不详述。Managetop.ascx用户控件:它包含几个导航按钮,分别是首页、图书入库、图书管理、图书种类管理、缺书管理、订单付款管理、订单发货管理、客户管理、管理员角色分配、管理员注册和退出等几个超链接控件,此用户控件会出现在整个后台子系统每个页面的顶部的导航部分。leftType和LoginRegist.ascx用户控件:它出现在前台子系统每个页面的左侧,含有客户登录和退出、注册、更改信息、更改密码、以及在下方显示图书种类和最新十大畅销书。此用户控件在显示图书种类和最新十大畅销书时,采用GridView控件来实现,由于此用户控件在前台每个页面都出现,为了提高系统的性能和效率,GridView控件的数据源DataSource,首先设定为高速缓存Cache中相应项,当Cache中没有相应项时,才从后台数据库中提取数据,并把此数据填入Cache中。限于篇幅这里就不附HTML代码和后台编码了。有关高速缓存Cache的内容在首页设计中详述。5.2前台子系统设计在前台,用户可以登录,注册,更新用户信息;可以浏览商品,搜索商品,购买商品,查看商品的评论,会员用户还可以对商品发表评论以及登记所缺的商品;前台网站还进行新商品宣传展示,热销商品推荐。下面介绍一下部分页网的设计5.2.1前台子系统客户登录设计客户通过注册把用户名、口令、E_mail、姓名、地址、性别、电话等信息写入后台数据库的UserInfo表中,其中口令以MD5散列值存放,用户注册等页面使用了验证控件。在电子商务系统中,安全是很重要的,其中敏感数据的保密尤显重要。我认为:把敏感数据以其散列值的形式保存在数据库中才是比较安全的。所以在业务逻辑层,设计了一个类“Function”,它有两个方法:GetHashOfMD5Format(stringstr)和GetHashOfSHA1Format(stringstr),这两个方法用于将字符串str用MD5或SHA1算法进行散列,得到一个散列值。在本系统中,采用的是MD5散列法。在表示层的用户注册和登录等模块中,对用户密码,用“Function”类的GetHashOfMD5Format(stringstr)方法进行散列,来保护敏感数据。登录的过程就是拿登录时输入的用户名和口令与后台数据库ShopUserInfo表中相应记录的用户名和口令相比较,若匹配就是合法用户,成功登录,否则登录不成功。26 那么,前台子系统中,如何表示用户是否登录?登录后用户信息存放在哪里?本系统是这样实现的:会话对象Session的生存期就是一个用户浏览一个站点的全部时间,所以在前台子系统设计时,采用了会话对象Session,用它来保存登录用户信息。当用户成功登录后,把用户号UserID和用户名UserName等信息以用户实体类方式存入会话对象Session的Session["userModel"]中,以后此用户购物及发表书评时,就使用Session["userModel"]中存储的用户号和用户名来标记此用户。当Session中没有这个元素时,说明用户未登录,是游客,当游客访问结账等禁止匿名用户访问的网页时,拒绝访问这些页面,并重定向到“错误页”并提示用户尚未登录。下面对会话对象Session进行简介:会话对象Session:会话可以看着一个用户浏览一个站点的全部时间。Session是局部的,当用户与一个Web服务器建立连接时,他就在此Web服务器上建立了一个Session,每个用户各有各自的Session,Session在ASP.NET应用程序中专用于为每个用户进行数据存储。其生存周期从用浏览器打开一个站点一直到关闭此站点的全部时间。由于用户信息存储在Session,所以不需要用户在浏览当前站点的每个页面时都进行登录。只要会话处于激活状态,站点中的任何页面都可以访问会话键/值对中存储的信息。用户关闭此站点后,会话对象Session被释放,其中存储的所有信息相应地也丢失。另外,若用户未登录时就已购物,其所购商品是放在临时购物车中的,当用户登录时,还要把商品从临时购物车中转到自己的购物车上来。5.2.2网站首页设计首页非常重要,用户通过首页应当能到达网站的任何地方。首页是用户访问的第一个页面,它给用户对网站的第一印象,一个好的首页可以引起用户的极大兴趣,因此,设计一个友好的首页非常重要。我认为设计网站首页应遵循以下原则:1、要有各功能的链接,如注册、登录、用户信息、搜索图书、购书及查看购书车等。2、首页应尽量简洁,不要有太多内容;要有图书的分类链接,便于用户查找图书商品;要有最近新书推荐;另外还要有销售排行榜,提高用户的购买欲望。3、首页的运行速度要快,首页尽量是静态的,或者引入缓存,以便提高运行速度。图5-1就是本电子商务系统的首页,下面简要介绍一下其设计:27 图5-1首页效果图首页的上部和左部是使用用户控件设计的,上部的用户控件是由若干个超级链接标准控件组成的,是静态的元素;左侧下方是图书分类和畅销书,它们是用GridView控件构成的。当用户在网站上浏览信息时,在一定的时间内图书分类和畅销书的信息是不会变化的,为了提高系统的速度性能,系统中采用把它的数据源设为首先从高速缓存Cache中提取,当高速缓存Cache中没有相应项时才从后台数据库中提取,并把相应数据填入Cache中。高速缓存Cache:Cache是ASP.NET中一个对象,它能以“键/值”对形式存储任何对象,与Application对象一样,也是位于服务器端,但Application的生命周期与Web应用程序的生命周期相同,存储在Application的“键/值”中的内容在移除或替换之前是不会自动释放的。而Cache中存储的“键/值”对是一个易失项,这些“键/值”对,一则可以与外部的对象建立依赖关系,当外部的对象改变或消亡时,相应的“键/值”对就自动释放;二则可以设定“键/值”对的过期时间,当过了一定时间,相应的“键/值”对就自动释放。高速缓存Cache即是一个提高系统运行速度的工具,也是一个存储应用程序数据的方式。只要发现要频繁访问不经常发生变化的数据,就应在Cache对象中高速缓存它,提高系统的运行性能。高速缓存Cache存在于Web服务器中,所以也不能设置过多,以免占用过多的服务器内存,并且要恰当地设置Cache28 项的到期策略。首页中的“最新书籍”和“最新书评”是用GridView控件制作的,其GridView主要就是由一个超级链接列构成,并设定了相应超级链接的URL。“点击排行榜”是用GridView控件制作的,其布局采用模板来控制,由于前两个组成部分即时更新的要求不是很高,所以为了加快运行速度,采用了Cache。设定Cache中相应“键/值”对的过期时间为绝对时间3分钟,没有设定依赖关系(设为null)。5.2.3购物车、订单及结账页面设计5.2.3.1购物车功能设计作为电子商务系统中的购物车,它必须具有下述功能:一是帮助用户选购商品并立即计算购物车中商品的金额;二是用户可以随时查看购书车,更新购书车中商品数量以及增减商品;三是在用户购物过程中出现异常时,重新登录该网站后,原来的购物应仍然存在,完成购物、结账并产生订单后,购物车中内容应能自动清除。本系统的购物车,是这样设计的:在BookShopOnNet数据库中,设计一个购物车数据表ShoppingCart,当用户购买一种商品后,就向此表中写入相应含有用户号的记录,当用户结账时,把此表中该用户的所有购物记录以一个订单的形式分别写入订单表Orders和订单细节表OrderDetails中,同时从ShoppingCart表中删除该用户的所有相应记录,等等。为了实现购物车功能,设计了购物车类ShoppingCartDAL,在购物车类ShoppingCartDAL中设计了七个方法,这些方法调用数据层的相应存储过程,这七个方法如下:ShoppingCart_GetListByShopUserId(ShopUserId)获取购物车图书列表。ShoppingCart_Add(UserId,BookId,Quantity)添加图书到购物车。ShoppingCart_UpdateById(ShopingCartRecordId,Quantity)更新用户购买数量。ShoppingCart_DeleteById(ShopingCartRecordId)移除购物车上某种图书。ShoppingCart_TotalMoneyByShopUserId(ShopUserId)返回购物车中图书总金额。ShoppingCart_SumByShopUserId(ShopUserId)计算购物车中图书总数。ShoppingCart_ClearByShopUserId(ShopUserId)移除购物车上的图书。这里的是购物车号,在用户已登录时,购物车号CartID的值就使用用户号UserID值,未登录时CartID是临时购物车号,是一个用Guid产生的随机数。5.2.3.2购物车页面设计图书详情显示页面ShowBook.aspx用来显示图书的详细信息。该页面中有一个“放入购物车”的链接按钮(LinkButton),当该链接按钮被单击后,图书会29 被添加到购物车中。所购买图书的书号BookId是通过URL中相应的参数传递到页面中。为了完善购物车的功能,在ShoppingCart.aspx页面显示购物车内容的GridView控件中,加入了修改商品数量的“编辑”按钮和移除某商品的“删除”按钮,以及“清空购物车”和“结账”等按钮。修改商品数量是用购物车类的方法ShoppingCartUpdate()来完成,移除某商品是用购物车类的方法ShoppingCartRemoveItem()来完成,清空购物车是用购物车类的方法ShoppingCartEmpty()来完成。ShoppingCart.aspx页面运行时的效果如图5-2如示:图5-2购物车界面效果图5.2.3.3订单及结账页面设计在ShoppingCart.aspx页面单击“结账”进入CheckOut.aspx结账页面。结账页面不允许未登录用户浏览,若未登录用户访问它,就会弹出消息框被重定向到首页的登录中。在结账页面,首先显示欢迎用户在本站进行购物,并显示用户的信息,然后把当前购物车的明细情况以及购物总金额以只读方式再次显示出来。收货地址文本框中,默认显示的是用户在本站注册时的地址,可以在此文本框中重新输入收货地址。为了防止黑客拦截信息并修改收货地址,在结账页用户可以选择是否对收货地址进行数据签名,若进行数据签名,可以导入用户私钥并进行签名,同时导入公钥以便把公钥内容传入订单表Orders中相应字段,以备电子商务系统后台管理人员使用此公钥进行验证签名,导入公/私钥采用FileUpload控件。若不选进行数字签名,则数字签名相关的控件不会显示出来。接着选择付款方式,最后单击“提交订单”,产生订单,把此订单的信息分别写入订单表Orders和订单细节表OrdersDetail中。接着进入PaymentForOrder.aspx付款页面,调用付款页面的代码为:Response.Redirect("PaymentForOrder.aspx?orderId="+orderID.ToString()+"&"+"PaymentMethod="+paymentMethod.ToString()+"&"+"orderMoney="+sumMoney.To30 String());在上述页面间传递数据,采用的是利用URL参数在页面间传递信息。进入付款页面时,利用URL中的参数把需要的订单号orderID、选择的付款方式paymentMethod、订单总金额orderMoney等数据传入付款页的。付款可以使用邮局汇款,也可以进入银行网关,进行网上支付。由于现在没有一个现实的银行网关,所以本系统用Web服务模拟了一个虚拟银行网关进行网上支付。虚拟支付时对银行卡号进行RSA公钥加密。关于网上支付中的加密和数字签名,在第六章中详细介绍。结账页面CheckOut.aspx运行时的界面如图5-3所示。图5-3结账页面从CheckOut.aspx页面中单击“提交订单”进入PaymentForOrder.aspx付款页时,利用了URL中的参数把订单号orderID,付款方式paymentMethod和订单金额orderMoney传入到付款页。在付款页,首先显示订单号和订单金额,然后根据URL中传递进来的参数paymentMethod中携带的付款方式信息,确定在付款页PaymentForOrder.aspx中是显示邮局汇款相关控件还是显示模拟的银行网关网上支付的相关控件。若是采用邮局汇款,相关控件上会显示汇款地址和收款人,并提示在汇款单的附言处写上订单号和用户名。若是模拟的银行网关网上支付方式,会提示输入卡号和密码,并要求导入银行网关的公钥,以便用公钥对输入的卡号进行加密。单击“网上支付提交”则支付成功,这时系统显示一个消息框,可以看到支付结果。同时就把此订单的付款状态改为“已付款”,单击“查看此订单详情”可看到包含付款状态的订单详细情况,加密的实现及31 该页面的后台代码放在第六章研究。PaymentForOrder.aspx页面运行时的界面如图5-4所示。图5-4模拟虚拟网上支付界面5.3后台子系统设计后台子系统供电子商务公司内部管理人员使用,可以进行新品上传,商品修改和调整,商品种类维护,所缺商品管理及回复。可以对用户进行管理,对用户的订单进行管理,管理订单的付款和订单的发货,以及对后台管理人员权限的分配等等。后台子系统的设计方法与前台没有多大区别。但后后台子系统的权限管理比较复杂,一个公司内部,人员是有分工的,不同的人员有不同的权限,只能处理自己份内的事情。所以后台管理子系统设计这一部分,本文只就后台管理人员权限管理这部分进行论述。在解决方案中本人把后台子系统单独做在一个单独的文件夹Admin中。基于窗体的身份验证和基于角色的授权的观点的提出:电子商务公司的员工,人员众多,但人员是有分工的,不同岗位的人员有不同的权限,只能处理自己份内的事情。在第二章本人讲过,本系统后台功能模块分为“图书管理”,“客户管理”,“订单管理”(又细分为订单付款管理和订单发货管理),“管理人员权限分配”等模块,从中分析后得出结论,后台人员按岗位是分为几大类的。如果以每个人员为单位分配权限,则系统工作量太大,32 而且管理人员经常变更岗位,增加人员,减少人员,很难进行有效的权限管理。为便于管理,本系统把后台管理人员按岗位分为四种角色:图书管理、用户管理、订单付款管理、订单发货管理。所以本人提出在后台子系统中,采用基于窗体的身份验证和基于角色的授权。下面对后台管理子系统的基于窗体的身份验证和基于角色的授权进行介绍。首先对其中用到的两个文件Global.asax和Web.Config进行简介:5.3.1ASP.NET全局应用程序文件Global.asax全局应用程序文件Global.asax文件是ASP.NET为每个Web应用程序支持的全局文件,它是可选的,用作Web应用程序中全局事件,对象或变量的实现地点。它包含应用程序级别事件的代码,这些事件代码不是用来响应具体的某个页面的请求,它是用来处理应用程序级别的通用事件。一个Web站点可以包含若干个Web应用程序,在站点中创建应用程序是在IIS管理控制台中进行的。Global.asax文件驻留在ASP.NET应用程序的根目录中。Global.asax文件本身被配置为自动拒绝对它的任何直接URL请求,外部用户无法下载或查看在该文件中编写的代码。Global.asax中定义了十八个应用程序事件,很多情况下引入这些事件可以大大简化处理。如使用下面前四个就可以统计网站在线人数,使用1和3可以统计网站总访问人次,后两个在本系统基于角色的授权中有用等。下面简介部分事件如下:Application_Start:ASP.NET应用程序第一次启动时引发。Application_end:ASP.NET应用程序结束时引发。Session_Start:会话开始时引发此事件,在这里是设置会话级变量的最好地方。Session_end:会话结束时引发此事件。Application_BeginRequest:在每个Web请求开始时引发。Application_EndRequest:在每个Web请求结束时引发。Application_AuthenticateRequest:在ASP.NET对请求执行身份认证时引发。在身份验证时可以使用它。本系统用到此事件,它从身份验证Cookie中的身份验证票证中提取角色填充当前安全上下文GenericPrincipal,再填充Context.User,基于角色的授权开始。Application_AuthorizeRequest:在ASP.NET对一个请求授予资源的访问权限时引发。5.3.2ASP.NET应用程序配置文件Web.Config与ASP不同,ASP.NET提供了强大的应用程序配置机制,可帮助开发人员轻松快速地建立自己的Web应用环境。ASP.NET提供的配置系统是一个层次配33 置架构,整个.NET系统只有一个叫machine.config的机器配置文件,但可能有许多个应用程序配置文件Web.Config。machine.config中的配置对整个机器系统中所有.NET应用程序都有效,而Web.Config包含特定的Web应用程序的配置信息,并且可以重写machine.config中定义的默认配置,为每个应用程序提供定制的应用程序环境。Web.Config决定了所在目录及其子目录的配置,并且子目录下Web.Config的配置信息覆盖其父目录的配置。配置文件以纯文本格式存储为XML文档,这种格式易读易改,而且在ASP.NET应用程序运行期间修改了配置文件后,新的设置马上生效,不用重启Web服务器。配置文件本身被配置为自动拒绝对它的任何直接URL请求,外部用户无法下载或查看在该文件中编写的代码。配置文件是文本格式XML文档,它的根元素总为
此文档下载收益归作者所有