YJ智能框架--面向对象方面编程

                中文摘要

摘要:面向对象编程做为主流编程范型,在Web系统设计实现中获得了很好的应用,但同时也早已暴露出不足,针对面向对象编程思想的不足人们提出了面向方
面编程。面向方面编程很好地解决了横切关注点的问题,从一个更高的角度对系统进行了分解。本博客较深刻地分析研究了面向方面编程与面向对象编程之间的关系,探讨了面向方面编程的技术实现原理,对基于面向方面需求分析、设计、开发相关理论作了进一步的探讨和研究,着重研究了面向方面编程在Web系统中的应用。java

  针对Web应用系统特色,本文分析设计了一种基于MVC的多层系统架构,并着重分析了系统中具备共性的一些系统级横切关注点,对象持久化、数据库链接维护、缓存和权限认证,及它们与Web系统各层之间的关系。YJ智能框架针对这些横切关注点设计出了具体的解决方案。本文最后对比分析了面向方面编程与面向对象编程,总结了面向方面编程的优缺点结合实践应用提出了一些基于面向方面编程的最佳实践程序员

第一章 绪论

1.1选题背景及其意义

  基于B/S多层架构的Web系统,因为更高的安全性、可维护性等特色已经取代C/S架构成为企业应用的主流,随着社会的发展,各行各业信息化程度愈来愈高,企业应用需求不断发展变化,软件应用系统须要实现的业务操做愈来愈复杂庞大,同时也对软件各方面性能,可扩展性、可维护性、安全、稳定等提出了愈来愈高的要求。应用需求的发展不停地挑战着计算机软件技术的发展,软件编程方式经历了从最初的面向机器、到面向过程、再到面向对象,每一种新的编程方法学的发展,都为人们提供了一种更为自的方式,能够将系统需求映射为计算机语言的编程结构。这些编程方法学的不断发展可让人们建立更加复杂的软件系统。面向对象编程(Object-Oriented Programming简称OOP)相比传统编程模式在构建Web系统时显出了它的强大功能,成为了当前主流的编程范型。OOP经过分析、抽象出一系列具备必定属性与行为的实例,并经过这些实例之间的协做完成系统的功能,按照功能或行为对软件系统进行分割,架构整个系统,很好地解决了数据与操做模块化编程,相比之前面向过程编程大大解耦了软件系统。OOP发展到如今出现了不少优秀的面向对象语言,如java它是一种纯面向对象语言,并且java在针对企业应用web系统中提供了一整套基于面向对象的解决方案和技术规范包括有、、、、、等等愈来愈多的系统采用基于技术的实现也成为人们主要的选择。然而随着软件系统的用户需求的不断发展日益显出了自身的不足。技术中最重要的概念是类和对象。类对数据及其相关操做进行了封装封装带来了隐藏实现细节的好处但同时也限制了设计开发的灵活性和系统的扩展性。只能从业务流程的单一方向设计和实现系统而实际应用系统中业务繁多不少业务都须要执行共同的操做。日志就是一个典型的例子基于传统实现的系统会出现日志相似操做的相关调用代码分散在程序中多处引发代码混乱对系统维护和理解形成较大困难同时也增长了开发人员额外的负担。这种www.docin.com北京交通大学硕士学位论文第一章绪论编程模式还使得在多个类的方法中扩展相似操做变得很是困难丧失良好的扩展性。针对编程模式的不足人们提出了面向方面编程简称它把实现相似日志这样的操做看做一个横切面利用能够很好地解决这种横切问题被不少人看好认为是继以后计算机编程学上又一场重大的革命力求站在一个更高的角度分解应用系统更接近真实世界架构系统解决所处的困境。研究及其应用现状概念最早是由领导的施乐公司帕洛阿尔托研究中心即屺一个研究小组于年提出并随后又申请了的专利。可是思想产生已经有至关长的时间了早在年开始觚屺的研究人员就对面向对象思想的局限性进行了分析造成了概念的雏形甚至还有其余人声明更早的时候就作过与相似思想和方法论的研究如于年发表的论文中提到不修改已有代码如何扩展已有系统功能。随着研究的深刻被愈来愈多的人关注一个项目组近年来也一直花大力量研究还有不少关于的开源项目获得了的支持如目前最成熟技术—一语言也获得了相关项且组的支持公司也推出了他们的框架。目前和合并成了。也引发了微软公司至关大的关注他们也正在加大力量对进行研究甚至在体系中已经不一样程度应用了相似的思想。正在逐渐造成一套完整的程序设计思想各类平台的技术也应运而生。平台是应用最先的也是目前运用最为成熟的出现了不少支持的框架如、、和基于的扩展语言这里列举的四种工具都是基于的实现它们被公认为是走在的最前列。然而做为一种新的编程思想和模式仍有待进一步探讨web

研究基于设计开发的相关理论目前也很欠缺的具体实现技术还有不少不成熟的地方更没有一个真正的语言全部这些致使距离普遍应用仍然有至关大的距离。www.docin.com北京交通大学硕士学位论文第一章绪论大多数应用仍然处在实验研究阶段仅仅是做为一个辅助工具在被使用在系统开发中的应用也很是有限大多数系统都只是应用工具提供的框架实现解决了某些特定的功能。如企业项目中普遍采用的框架利用框架中提供的功能实现了事务处理与商业业务逻辑的分离。本文研究重点本文将与思想进行对比研究分析它们之间的关系对基于思想的设计和开发作进一步的探讨和研究并分析了系统的特色基于模式从新设计架构系统研究系统中具备共性的一些横切关注点利用语言设计实现基于模式处理这些横切关注点的方案。本文结构安排本文共分为如下五章第一章是绪论部分主要介绍了选题背景及其意义分析了当前主流编程范型模式的局限性介绍本文的研究对象及其研究和应用现状并提出了本文的研究重点和研究方向。第二章是本文对的理论探讨研究部分主要阐述了思想及其相关概念分析了模式与模式的关系探讨了技术实现原理对设计开发理论作了进一步的探讨和研究。第三章基于技术设计分析系统架构的特色遵循多层架构、设计了一种系统架构分析了系统中一些具备共性的、重要的横切关注点数据库链接维护、对象持久化、缓存、权限认证及它们与系统各层之间的关系。第四章是本文的设计实现部分结合第二章对理论的研究基于第三章架构设计和横切关注点的分析采用基于的扩展语言——对缓存、对象持久化、数据库链接维护包含事务处理和权限认证几个横切关注点给出了模式的设计实现方案。第五章与传统模式的系统架构进行对比分析了基于模式架构系统的特色突出显示了在耦合性、可读性、可扩展性三个方面的www.docin.com北京交通大学硕士学位论文第一章绪论优越性同时也提出了基于设计开发中一些不足的地方结合本身实验体会列举了一些最佳编程实践条款。最后是本文的总结总结一些优点而且提出了进一步研究工做www.docin.com北京交通大学硕士学位论文第二章设计、开发研究第二章设计、开发研究基本概念发展至今并无在业界造成统一的认识目前也没有一个确切的定义尽管如此已经显示出了它强大的优越性。的目的是克服的不足实现系统更好的解耦从一个更高层次更天然地构建系统提升开发效率增长系统的可维护性和可扩展性。的不足就在于类对数据方法的绝对封装性所带来的限制针对实际应用系统中存在着大量的相似于日志这样的横切面这种限制使得很难为多个方法统一进行维护和扩展。而利用一种“横切”的技术剖开类中封装的多个方法能够灵活地对这些方法进行切入新的业务代码、扩展新功能点同时在具体开发实现时不须要对原有的类代码做修改正如所提到的从外部往类中的方法批量扩展新的功能点而不用修改原有的程序代码。以日志操做为例能够用图表明面向对象编程的实现图表明的实现方法包含日志操做调用日志操做方法核心业务逻辑里查墨堡图面向对象编程实现模式日志操做方法厂———经过相关技术日志逻辑二百而牙西痉一方法方法包含日志操做调用核心业务逻辑图面向方面编程实现模式从两图的对比能够看出面向对象编程从单一纵向构建系统图中方法和方法代码中须要显式地包含对日志逻辑操做方法的调用一旦相似业务方法数量庞大将致使日志调用相关代码分散在程序中各处产生混乱而在面向方面www.docin.com北京交通大学硕士学位论文第二章设计、开发研究编程模式中增长了一个横切面从纵横两个方向分解系统图方法和方法再也不须要显式地调用日志操做日志操做由相关技术自动织入其内能够认为面向方面不只仅封装了日志操做的实现逻辑并且也封装了对日志实现逻辑操做的调用相比之下面向方面划分系统更加天然系统耦合性进一步下降。在概念产生和发展的同时产生了一些新的术语关注点如图中所示日志逻辑和核心业务逻辑等这些功能点称之为关注点每个关注点都是咱们须要关心实现的一个逻辑功能点。其中核心业务逻辑这些关注点是实现主要业务逻辑的核心操做称之为核心关注点而相似日志逻辑这些关注点它经过相关技术“横切”织入程序中各个须要它的地方称之为横切关注点。链接点图中方法和方法须要切入日志操做的地方都是链接点它是程序中一个精确的执行点。方法体调用或者执行、对属性赋值或者读取等代码处均可以看做链接点可供织入横切关注业务逻辑链接点为提供了系统功能扩展的空间。通知包含横切关注点的业务逻辑模块能够定义为一个通知通知中还定义了横切关注点和核心关注点切入关系、如何组合实现完整的商业业务逻辑。从不一样的角度对通知能够做出不一样的分类一般根据切入方式和切入位置分为如下三种前通知、后通知和周围通知在本文第四章中都有具体的应用。切入点就是定义一个由此点切入一些具备共同特征链接点所组成的集合横切面这些链接点都须要切入同一个横切关注点的业务逻辑。一个大的软件系统中一般有不少不一样的横切关注点分别对应不一样的横切面面向方面编程须要为每个横切面定义一个切入点定义切入点的关键就是精确捕获横切面对应的全部链接点。方面切入点和对应的通知结合在一块儿就是方面面向方面中方面的概念和面向对象中类的概念很相似类是封装模块化了属性及属性相关操做而方面是封装模块化切入点及切入点处被切入的通知。甚至在语言中方面实现代码形式也跟类的很类似但方面是从类外面实现对类中方法的扩展在方面内部实现对横切关注点业务逻辑的调用同时描述了横切关注点与核心关注点的www.docin.com北京交通大学硕士学位论文第二章设计、开发研究切入关系。另外∞还容许方面跟类同样定义属性和方法在本文第四章的具体实现中将会看到不少这样的应用。织入将横切关注点与核心关注点按照方面的定义进行组合成完整的业务逻辑这一过程在中称为织入。不一样实现技术和不一样织入需求织入过程能够在不一样的阶段完成编译以前、编译之时、运行之时。上下文主要是指核心关注点方面链接点处一些信息一般指核心关注点业务方法的调用实例、方法名、调用执行的实参等这些信息一般会被横切关注点切入时得到以供在通知中实现横切关注点的业务逻辑。图术语示意图以上术语基本获得业界的认同基于这些术语的技术特征组成了最基本的技术当前绝大多数具都实现了这些技术。语言对语言作了一些扩展在新的语法要素中几乎能够找到与这些术语一一对应的的元素。与关系的介绍面向对象编程是当前主流编程范型是编程学上的一次意义重大的革命面向对象技术将现实世界问题领域与软件编程中对象进行映射对现实世界中的www.docin.com北京交通大学硕士学位论文第二章设计、开发研究问题进行分解、简单化使之符合人类的思惟习惯可以天然的表现现实世界中的实体和问题面向对象编程在软件编程学上具备重要的意义。相比之前面向过程语言面向对象语言具有不少新的特色人们利用面向对象的封装、继承、多态思想能够更加有效、天然地构建复杂的软件系统。的优点相比传统编程方法主要体如今如下几个方面高度重用性。面向对象语言利用类封装了数据和相关业务操做实现了良好的模块化提升了系统代码的重用性“对象模型的使用不只鼓励软件的复用并且还鼓励整个设计的复用同时也致使可复用应用框架的创建”。面向对象编程使得系统带来很大的灵活性。代码结构的改良。因为类的高度模块化和良好的封装性“类是理想的模块化机制它的独立性好修改一个类一般不会引发软件的总体变化每每只需对局部做一些修改”。由此带来一系列的好处耦合性下降、代码易于理解、可维护性和可扩展性加强、易于测试和调试。、较易开发大型软件产品。面向对象编程不只有利于实现复杂系统的细化并且也有利于团队分工、共同合做许多软件开发公司的经验都代表当面向对象方法学用于大型软件开发时软件成本明显地下降软件的总体质量得以提升。然而发展至今也暴露出了思想的局限性因为类固有封装特性忽略了类与类之间、方法与方法之间一些共同的实现细节横切关注点在面临这些问
题时会致使相同的代码片断分散在程序中各处形成代码纠结在大型的企业应用系统中尤其明显。面向对象编程的发展归纳起来经历了三个阶段第一阶段以类为中心设计开发利用类的封装性和继承性很好地实现了系统代码复用性第二阶段以接口为中心能够称为面向接口的开发更注重系统的耦合性第三阶段以设计模式为
中心基于组件的开发进一步提升整个系统设计的复用性。尽管如此面向对象语言仍然没法完全摆脱在解决横切关注点时的困境。是的补充和发展就是针对的思想局限性设计出的一种新的编程模式是对技术的补充和发展。它与追求的共同目标都是实现软件进一步解耦、提升软件
复用性、增长软件的可扩展性减轻开发者负担、提升开发效率。注意到软www.docin.com北京交通大学硕士学位论文第二章设计、开发研究件系统需求中存在大量的横切关注点而解决横切关注点问题时却陷入代码
混乱的尴尬处境只能封装横切关注点的业务逻辑实现而有关横切关注点的调用代码却会分散在程序中各处分散了核心业务开发人员的精力和注意力不只增长了开发人员的负担并且对系统各类性能也形成较大的损伤。不只仅封装了横切关注点的业务逻辑实现并且还封装了对它的调用有效地实现横切关注点与核心关注点的解耦提升了程序的模块化程度。与现有技术不是一种竞争关系而以及相关技术为基础才能实现的开发模式。有了这一新的思想工具并不意味着对开发人员的面向对象编程要求能够下降相反很是依赖于编程模式中良好的编程习惯这比如在开发模式中实现类的方法时仍然须要遵照结构化编程模式。思想模式并非万能的它并不能解决开发中全部的问题可以很好解决的问题强行追求的实现每每只能是弄巧成拙。对的发展着重体如今对软件系统需求层次上的划分是从单一的纵方向构建软件系统“一切皆为对象”开发者用一组实例以及这些实例之间的关系组合构建软件系统实例的组合按照业务流水单一方向进行。而注意到了系统中另外还存在不少“横切面”增长了从横方向构建系统这不只大大下降了系统耦合性并且能够很是方便开发人员对系统功能进行扩展在不影响现有代码的状况下经过增长新的横切面就能够实现。将使得开发者能够将应用需求更天然地映射到编程模式之中。对封装性的影响经过定义类来增强系统的封装性隐藏实现细节就是为了对系统进行更好的解耦而横切关注点是模式中被封装的实现细节中共同的部分模式的封装致使放弃了对这些横切关注点的模块化。采用“横切”技术切入中类的方法为开发人员提供了破坏面向对象中类固有封装性的机会然而开发人员利用切入方法内部时只要运用恰当相反能够带来更好的封装性正如所言“我相信应该作的是给程序员提供能写更漂亮的程序的工具而不是施加足够的安全机制让他们不能编写糟糕的程序”。模式就是这种提供更好的模块化程序的工具。应该注意到模式中多个方法都封
装包含对横切关注点的调用并不合适这样的封装会引发代码混乱的目的www.docin.com北京交通大学硕士学位论文第二章设计、开发研究正是打破这种不合适的封装将对横切关注点的调用封装在“方面”里面将被封装的实现细节的共同部分抽离出来实现更好的模块化下降系统耦合性。从某种意义上来讲封装了系统的静态部分封装了系统的动态部分。所以单纯讨论是否破坏的封装性并无什么意义中方法的绝对封装有着它固有的思想局限性而加入却能够使系统的封装性作得更好。与设计模式的关系设计模式是面向对象语言开发经验的积累各类不一样的设计模式都定义了解决某一类问题的一种较好的策略著名的《设计模式》对设计模式作了概括和总结它不只提供了更好的设计方案并且还提供了基于面向对象软件设计交流的工具。设计模式经过最大程度地利用面向对象的特性诸如利用继承、多态对责任进行分离、对依赖进行倒置面向抽象、面向接口最终设计出灵活、可
扩展、可重用的类库、组件乃至于整个系统的架构。在设计的过程当中经过各类模式体现对象的行为、暴露的接口、对象间关系、以及对象分别在不一样层次中表现出来的形态。然而鉴于对象封装的特殊性“设计模式”的触角始终在接口与抽象中大作文章而对于对象内部则无能为力。并且因为设计模式过于依赖接口和追求抽象与实现的分离有时会给人带来设计的两难抉择简单实现或者灵活设计。是对设计模式的延续突破了对象的封装将系统中不一样的关注点分为核心关注点与横切关注点并将之映射成面向方面的一种编程方式。并不须要借助接口和抽象而是利用横切技术直接深刻到对象内部截取方法之间传递的消息能够随意织入各类通知在不改变原有类的代码基础上实现该类功能的扩展。之因此较设计模式功能更增强大使用更加简单关键就是在于设计模式是对面向对象编程语言的一种编程技巧而面向方面思想是对面向对象思想的进一步发展模式更接近现实世界构建系统。技术实现原理目前没有纯粹的语言绝大多数的工具和扩展语言都是基于面向对www.docin.com北京交通大学硕士学位论文第二章设计开发研究象语言的扩充在领域实现主要有两种方式动态代理实现和基于面向对象语言的扩展。动态代理实现标准类库包中有代理类和调用处理柄接口类中提供了方法。该方法能够产生一个代理实例而且代理实例与被代理实例具有相同接口被代理实例就是核心业务方面的实例所以动态代理实现都要求为全部核心业务类定义相应的接口。二者的代理关系经过实现接口的方法来肯定在核心业务实例被代理的时候能够实现切入横切业务逻辑还能够拦截核心业务逻辑的执行同时方法中的参数也为切入时捕获核心业务方面上下文提供了条件。这些具体实现一般封装在一个工厂类中程序中须要新建核心业务实例时由该工厂提供一个代理实例。厂的实现代码示例以下利用的代理机制获取代理对象。代理对象与被代理对象具有相同的接口其中实现了接口示例代码以下】恤www.docin.com北京交通大学硕士学位论文第二章设计、开发研究。脏方法调用前能够切入相应横切业务逻辑还可拦截核心业务逻辑地执行”核心业务方法执行以前能够切入横切业务逻辑”调用核心业务逻辑方法在方法调用后能够切入相应横切业务逻辑乱“舯”核心业务方法以后能够切入横切业务逻辑”
动态代理实现时捕获上下文能够在方法中进行方法有三个参数】分别暴露了核心关注点被调用方法的信息被调用方法所在的实例被调用方法被调用方法的行参列表。经过语句“”的调用执行核心业务中被捕获的方法在该语句先后就能够切入相应的横切业务逻辑甚至不执行该语句实现拦截核心业务方法的执行。假定程序中有这样的核心业务类及其对应的接口以下蛔”执行核心业务方法”测试代码以下执行结果以下核心业务方法执行以前能够切入横切业务逻辑执行核心业务方法核心业务方法以后能够切入横切业务逻辑下图描述了动态代理机制实现原理www.docin.com北京交通大学硕士学位论文第二章设计、开发研究核心豁垂务盍一一一一一一一一…一…一一一‘经过获取接口类型的代理对象被代理实例为类的实例■………………一图动态代理实现原理图动态代理实现机制基本上都利用了这一原理并配合文件的使用同时利用的反射机制提供了一个框架。这种实现机制最大优势在于不须要额外的编译器和新的语法学习、、这几种工具都是基于动态代理机制的实现然而在实际应用中存在如下问题因为代理实例的引入增长了额外的类加载和对象的建立虽然各类框架都采起不少措施进行优化但对性能产生的影响仍是比较大。因为大量反射机制的应用对程序的容错和效率也形成了较大的影响。动态代理实例的产生须要为原始类定义接口而且对象的产生必须经过特定的工厂产生同时还须要配置一些文件在文件中定义链接点的捕获、横切方式和切入粒度等等增长了开发者负担在使用上不够灵活功能也不够强大。动态代理因为利用反射机制方法来调用核心关注点方法没法支持基于静态方法的链接点捕获。动态代理主要是对方法的代理没法支持对基于属性的链接点捕获www.docin.com北京交通大学硕士学位论文第二章设计、开发研究在动态代理框架应用中框架是其中杰出的表明在企业应用中被普遍采用提供了一个轻量级的容器能够用来管理业务对象在框架内能够很方便地实现面向方面事务管理使其与核心业务逻辑分离。另外还有一种实现的方法就是利用班库利用它的代码加强功能能够动态地为中的类生成子类实现原理基本相似只是这种实现方式能够再也不依赖接库在框架中实现对象持久化操做有不少应用在后续章节将做进一步的介绍。。基于面向对象语言的扩展语言是基于面向对象语言的扩展在语言基础上增长新的关键字来实现技术如方面、切入点、前通知、后通知、周围通知等等提供专用的编译器来时识别这
些新语法要素在生成字节码前编译器修改须要被切入方法的相关源代码从而实现“横切织入”而后进行正常面向对象语言的编译生成字节码。的优势很是突出这种相似预编译的静态织入方式彻底消除了动态代理机制对性能的影响。与代理机制实现相比不只能够捕获基于方法的链接点并且还能够捕获基于类属性的链接点甚至还能够很好支持基于静态方法链接点的捕获。同时因为新语言要素的加入能够很方便地定义切入点、通知等与思想术语相对应的语言成分利用新的关键字捕获上下文也变得很是容易、天然可读性也更好更加灵活地发挥了思想的功能特性。同时保持着原始语言的编码风格开发人员很容易就能够运用自如充分将面向方面编程思想应用到实际编码中来。本文认为是目前最接近将来纯粹的语言已经被愈来愈多的人看做是事实上的标准也获得愈来愈多技术的支持例如以上版本已经彻底集成了。固然也有它不足的地方因为静态式的织入每每一个横切关注点横切了多个类的方法程序中只要对代码作一点点修改全部相关的源文件都须要从新编译在实际应用中也会带来一些不便。有关的一些语法特色在本文后续章节具体设计实现中还有进一步的介绍。须要说明的是的技术实现并非本文的研究的重点可是任何一种新的www.docin.com北京交通大学硕士学位论文第二章设计开发研究理念在其产生早期技术实现都很是重要。做为一种新的编程思想理念非
常须要技术实现的支持好的技术实现有利于理念的推广“理论与实践相结合”使其在实践中不断地发展和完善。设计开发探讨与研究基于面向方面需求分析面向方面编程核心思想就是分离核心关注点与横切关注点实现分别专一这两个方面编程对软件需求的深刻理解是软件开发得到成功的前提条件面向方面的需求分析重点是对用户所关注的逻辑功能进行分类并分别映射到中的核心关注点和横切关注点。如何将业务流程中主要业务流程同它的分支流程、非核
心业务功能分离开来分别做为核心方面和横切方面并明确它们之间的横切关系。有关这方面的理论目前正在不断的发展和完善之中和合著的—提出了基于用例图分析和合著的—提出了一种方法进行分析与设计。基于的设计开发权限认证、事务、日志等等已经广泛被认为是软件系统中横切粒度很大的系统级横切关注点根据系统实现的具体业务功能每每还
存在各类粒度不一的业务级横切关注点面向方面需求分析关键就是在需求阶段
尽量地识别出各类关注点分离系统的横切方面和核心方面将整个应用系统进行面向方面的模块划分下降整个系统耦合性减小设计开发的难度。将原始需求信息比做一束光束那么识别关注点识别过程能够用三棱镜法则来形容穿越三棱镜的光束需求信息通过三棱镜折射关注点识别照射出来不一样颜色的光束关注点实现基于面向方面的需求分析以下图所示www.docin.com北京交通大学硕士学位论文第二章设计开发研究图关注点识别三棱镜法则设计层次良好的架构实现核心业务流程分离出去横切关注点业务逻辑后能够专一核心业务流程进行架构设计和编码架构设计的层次性和编码的规范性很大程度上影响“横切织入”的复杂度。核心关注点方面业务流程仍然是系统设计的重点在系统中一般采起基于模型一视图一控制多层架构在业务层根据业务的复杂度还可能再分层这种多层的架构不只下降了系统的耦合性和复杂度并且也很是有利于对不一样层的代码切入不一样的横切关注点通常来讲不一样的层都有它不一样的“横切面”如权限认证一般做为控制层的横切面而事务处理做为业务层的横切面。传统的面向对象设计一般还会增长不少接口来进一步解耦层与层之间的关系、增长系统的灵活性和扩展性思想并不依赖接口它提供了新的开发模式和语言工具使系统设计和开发更加灵活同时能够在不改变原有代码的基础上增长横切面利用“横切”技术自动将新的功能切入系统中提供一种全新的系统扩展方法。所以能够对传统的接口设计做必定的简化力求系统架构清晰简洁。定义切入点切入点定义了供通知切入的一批链接点链接点的数量决定了横切粒度每个链接点都是系统的功能扩展点针对某一个横切关注点如何准确的捕捉须要将其切入的全部链接点是定义切入点的关键。中同时支持基于方法和属性的链接点捕获一般主要根据如下几种方式进行捕获。在中主要是根据方法和属性原型定义的特征定位相应的方法或者属性。方法原型名称格式为“访问修饰【】返回值类型包名类名方法名形参www.docin.com北京交通大学硕士学位论文第二章设计开发研究列表”属性的原型格式“访问修饰【】类型包名类名属性名”。经过对它们的匹配捕捉方法的调用、执行和属性的读取不一样的具可能采用不一样的匹配技术中使用了正则表达式进行匹配而语言中定义了三种专用的通配符’表明了除‘’以外任意字符串‘’表明了任意字符串包括‘’字符‘’表明了该类及其全部的子类Ⅱ中还提供了特殊的关键字来匹配构造函数。面向对象中的方法有两种状态方法的定义和方法的被调用根据这两种状态分别定义了两种链接点在方法体的首尾进行切入编译器能够直接批量修改被捕获的方法体代码该方法一旦执行就会自动调用横切业务逻辑在方法被调用的时候在调用处前、后进行切入横切业务逻辑编译器会在被捕获的调用处先后加入相应横切代码。这两种切入方式均可以拦截被捕获业务方法的执行。面向对象中对属性的操做有两种读取和赋值根据这两种操做也分别的定义了两种链接点捕获对属性的读取操做捕获对属性的赋值操做。方法、属性被调用处所在代码即方法被调用或者被定义、属性被读取或者赋值时所在类名含包名或所在方法名中提供了和两种关键字分别定义这种匹配。一般和配合使用。中提供关键字和定义调用流程之间的关系所谓流程关系例如方法的方法体中有调用方法就认为执行的流程中存在对的调用不只类的方法中存在流程关系方面各个切入点也存在流程关系。和的区别在于链接点自身是否处在本身的流程中。利用切入点的流程关系能够定义当同一链接点被不一样切入点捕获时的横切业务逻辑的切入顺序还能够控制嵌套切入。将以上各类匹配特征进行逻辑组合实现更加灵活的匹配方式语言中利用与、或、非三种逻辑操做符进行组合匹配。一个好的编码规范对链接点的捕获颇有做用特别是系统架构层次的划分和类www.docin.com北京交通大学硕士学位论文第二章设计、开发研究所在包的组织及各类包名、类名、方法名的命名方式。组织核心关注点与横切关注点的上下文横切关注点与核心关注点业务逻辑在代码实现形式上彻底分离经过“横切织入”将它们组合在一块儿实现完整的业务流程因此横切关注点方面就须要得到核心关注点方面上下文才能共同处理流程中的数据信息。方法调用的链接点上下文主要为被调用方法所在的实例、方法的参数、方法名和方法返回值等等。通知中实现横切关注点业务逻辑处理的数据都是正对这些上下文信息在中提供了和关键字能够在定义切入点的时候将方法的实例和参数显示的暴露给横切方面在通知实现代码中还能够得到函数返回值另外在通知体中还提供了关键字该关键字的两个方法和能够分别获取被调用方法的名称和全部实参列表。另外还能够利用模式在横切方面和核心方面之间传递上下文信息。中类实现了模式定义一个变量就能够实现以当前线程为关键值保存各自的数据信息。在系统中用户每一次请求提交服务器端都须要完成一个完整的流程控制层接收请求、调用业务层处理相关业务、业务层链接后台数据库进行处理返回处理结果给控制层、控制层将
处理结果交予显示层对用户做出响应。流程之中存在各类链接点须要切入横切业
务逻辑而在用户的一次会话期间整个完整业务流程中无论系统执行核心业务逻辑仍是横切业务逻辑绝大多数都是在一个线程之中根据这一特色利用变量就能够很方便在核心方面与横切方面之间进行数据传递在本文的设计实现中多处使用了该类型变量在横切方面中实现上下文的捕获。www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析第三章系统架构设计与分析系统架构设计原则在基于的系统架构设计中有许多好的原则可供遵循在本文的设计中一样遵循着如下一些设计原则多层架构原则。将业务与数据、现实分离下降系统的耦合性系统一般都采用基于的多层架构各层都对其余层隐藏本身的实现细节尽量隔离复杂性。简单原则。若是能用的工做完成的工做则选择较简单的解决方案。系统分层的过多也会带来实现的复杂性一些重量级的组件不加选择地使用也会增长系统实现难度、减小系统的可维护性没有充足的理由就不要使用。模块化原则。“模块化是被分解成具备内聚性但松散耦合的模块的系统特性”模块化对提升系统重用性的具备重要意义能够加强系统的可读性和可维护性。在设计和实现中咱们会做不少工做来达到更好的模块化。总体架构设计系统愈来愈多地应用于大型商业领域中业务复杂系统极为庞大人们更加注重追求系统进一步解耦、提升系统的可维护性和可扩展性。系统的运行模式通常为基于客户端向服务器提交请求由服务器端负责全部业务处理、访问后台数据库而后对用户做出响应服务器端集中了几乎全部的业务逻辑客户端一般只负责显示功能习惯称之为瘦客户端所以系统架构设计集中在服务器端逻辑设计。本文基于技术探讨设计系统的架构是针对在企业应用系统的一套完整的技术规范图是标准模型。www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析图标准模型标准模型规定使用作为业务处理组件充分体现了在并发、分布式计算上的能力但自己使用过于复杂用作业务处理过于死板定义的标准确实很强大不少子标准制定得很是出色可是同时也很复杂总
是显得过于臃肿结构笨拙实用性也较差反却是非标准的模型比较有影响力这一领域一些开源项目占据了主流位置。面向对象技术已经至关成熟并且稳定人们在面向对象编程开发实践中积累了不少宝贵的经验总结出了大量实用性很强的设计模式本文基于技术构建的系统遵循的多层结构进行架构系统如图所示图系统多层架构其中页面负责客户端浏览器显示全部来自于客户端的请求统一交由相应的控制器处理收集请求数据并调用业务层业务操做进行相应处理而后将处理结果数据经过对象转发至待显示的页面页面最后在客户端浏览器进行显示以响应客户的请求。其中服务器端应用程序须要经过链接数据库而业务层业务对象简记为并不直接访问数据库而是先由封装数据库链接在中www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析获取数据库链接实现读取数据库的各类基本操做实例读取数据库时先获取一个实例经过该实例访闯后台数据库。整个架构中核心方面流程如图顺序图所示圈圉圈图系统核心方面顺序图详细设计分析数据层在数据层须要解决面向对象语言访问关系型数据库的问题创建映射是有必要的将对象语言访问关系型一些复杂、繁琐的操做封装隐藏起来。映射就是创建起“关系数据库中的表”与“面向对象语言中的值对象类”之间的对应关系值对象类∞简记为就是一个普通的类它只有属性及属性相应的和方法数据库中每一条记录都映射成一个实例数据库中表的字段一般都对应到实例中相应的属性。基于映射思想访问数据库时将针对记录的基本操做增长、删除、修改、查询映射为针对的相应操做传统的语言使用也会做些改变表名由类名代替、字段名由属性名代替。在的开源项目中已经有不少优秀的框架、工具实现了映射其中以框架应用最为普遍很好地实现了映射封装了数据库链接提供了与相似的语言。能够在等框架基础上封www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析装的实现除了封装基本操做访问数据库之外还须要提供一些有关事务和数据库链接维护的方法以下手断是否拥有数据库链接胴矢取数据库链接关闭数据库链接开启事务提交事务回滚事务经过的封装解决面向对象语言访问关系型数据库的问题隐藏了实现细节使得业务层与后台数据库迸一步解耦。中的这些基本操做方法供业务层实例调用简化了业务层对数据库的访问。而在业务层集中了全部具体商业业务逻辑实现能够对实例的各属性值进行修改这些修改操做都须要对应到中对相应数据库记录的更新操做这一操做称为对象持久化操做。在中提供了方法由该方法封装持久化操做逻辑。在业务层调用实例的方法修改实例的属性值时就须要调用方法将修改后的值持久化到数据库中传统的实现代码示例以下经过∞方法修改产品的名称脯修改后的信息保存在数据库中很明显这样作听任了一个横切关注点——对象持久化逻辑分散在程序中多处致使程序员会屡次调用这一操做同时还须要开发人员本身判断是否须要进行持久化程序中有些实例并非由数据库记录映射而来的多是临时新建的对象对于这些实例的修改不须要持久化无疑增长了开发人员的负担。所以关于对象持久化方面的工做有必要将这一横切关注点分离出来用方面封装它的实现和调用。业务层业务层由实例业务实例组成在每个类中实现相关的一批业务操做如前文所分析每个类访问数据库都须要获取一个实例经过www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析实例访问数据库。基于这一特色能够为全部的类定义一个父类业务层类图以下图业务层类图中的属性设为保护类型能够被它的子类使用。同时利用中的方法也实现了对实例的一些基本操做的公用方法能够根据须要直接被控制层调用。控制层调用业务层中方法执行具体的商业业务一个完整商业务操做流程步骤一般以下获取一个实例经过它得到数据库链接开启事务若是该业务操做不进行写数据库操做能够不用处理事务执行具体业务逻辑捕获业务逻辑执行是否有异常决定提交事务或者回滚事务绝大多数异常都不会进行错误恢复。关闭中的数据库链接一般是将数据库链接归还数据库链接池其中步骤、、、中数据库链接维护包括事务处理是核心业务流程中的横切关注点开发模式无论将它们放在层仍是业务层每个业务方法的调用或者执行都须要操做、提交或者回滚事务、关闭数据库链接这些代码片断分布在程序中的各处必然致使代码重复、混乱加剧开发负担。究其缘由就是思想在处理横切问题上的局限性本文第四章将设计实现基于的解决方案。控制层在控制层接收客户端的请求根据请求信息调用业务层业务操做完成具体业务www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析流程而后转发至页面响应客户端请求显示给用户处理结果。在控制层主要是控制器的设计和实现一般一个用户请求会对应一个控制器或者控制器中的一个方法。在标准的技术中简称能够充当控制器由的或方法接受用户的请求并调用相应的业务层进行处理最后转发至页面因为每个都须要在文件中做一些配置若是每个用户请求都定义一个与之对应则会加大的配置规模这在一个大型的企业应用系统中是没法忍受的。所以须要对此该层进行细化从新设计。在控制层至少作了两件事地址解析找到对应的控制器处理请求控制器调用后台业务逻辑返回处理结果。针对这一特色本文设计以下将控制逻辑抽取出来单独定义实现控制类控制类中每个方法均可以对应一种用户请求。因为控制类主要是处理和对用户能够为全部的控制类定义一个父类在此将它定义为抽象类示例代码以下卸
∞廒取用户请求的对象默认控制方法定义一个类充当全部控制类的派发器负责地址解析经过反射机制产生控制器类并调用相应控制方法处理客户端提交的请求对象这样文件中只须要对该类作配置便可。如下是控制层的顺序图www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析图控制层顺序图在各个子类中全部的方法也存在一个横切关注点用户的每个请求到达类方法在调用后台业务逻辑以前都须要进行权限认证。当前不少系统中都利用过滤器来拦截用户的请求进行验证操做通常来讲都能较好地知足实际应用需求但它仍然存在两个问题效率很低全部的请求都经拦截过滤。可读性较差横切业务仍然与核心业务纠结在一块儿。把权限认证做为控制器类一个横切关注点基于实现能够提供一个更加清晰和高效的架构。访问系统静态数据一个大型的系统中业务操做复杂业务信息读写频繁系统中仍然存在一部分数据信息是相对静态的如业务基础数据、国家地区城市、网站配置菜单、角色权限等信息这些信息变更不多可是读取却很是频繁对于这一部分数据进行缓存减小对数据库的访问能够大大提升系统的性能。本文的设计方案就是在系统中增长一些工具类专门实现读取这些数据工具类中全部的方法都定义为静态的以便在页面控制层中直接经过类名进行调用。在组织这些工具类时因为工具类中的方法仍然是实现一些业务操做故将www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析它们和类放在同一个大包路径下包里建两个子包和分别存放类和这些工具类。如图●◆◆∞嘲◆图静态信息业务类图对工具类中全部方法执行的返回结果进行缓存就能够实现性能的提升很显然“缓存”也是一个横切关注点若是直接在方法中实现缓存一样出现代码重复增长开发人员负担。横切关注点与层的关系分析经过以上分析咱们肯定了有四个横切关注点分布在系统之中在系统层次设计实现中每一个层所在的包路径都不同显示层主要都是一些?文件在项目中一般直接放在程序部署的根目录下本文为这些文件统必定义包路径包。控制层主要由一个类分发器和多个类控制器组成类所在的包路径定义为。类所在的包路径定义为控制层中全部的类都放在包下。业务层主要有两种类静态业务方法所在的工具类的包路径定义为而其余业务对象类的包路径定义为。前者能够调用后者系统访问数据库都须要经过具体的业务对象类的方法。数据访问层经过封装对面向对象语言对关系型数据库的访问隐藏映射的实现同时还须要在层定义各类值对象类供各层使用。图是系统层和主要包的调用结构关系图其中横切关注点如图中注释部分所示www.docin.com北京交通大学硕士学位论文第三章系统架构设计与分析显示层自控制层

留数据层图系统各层、包之间调用关系图中注释部分标出了四个横切关注点缓存、对象持久化、数据库链接维护、和权限认证以及它们所须要切入的包。这些横切关注点涉及系统中核心业务流程的三个层次控制层、业务层和数据层它们在开发模式下都解决得不太好。下一章本文将利用语言针对这些横切关注点详细设计基于的解决方案实现它们与核心业务彻底分离。印璺彳邕婴www.docin.com北京交通大学硕士学位论文第四章的应用与实现第四章的应用与实现本章采用语言着重针对第三章分析的横切关注点进行详细设计与具体实现对基于思想的设计开发作进一步的研究。实验环境的搭建开发环境的搭建本文实验基本软件、硬件环境为操做性统专业版为内存为的的笔记本式计算机。软件开发工具主要都是开源的以下面向对象语言版本为在的网站能够免费下载得到它的安装程序目前最新版本是但企业实际应用中并无被普遍采用大多数仍然使用的版本。集成开发编辑工具在的官方网站能够免费下载得到压缩包解压后就能够使用不用安装。不只开源免费并且功能很是强大提供了不少代码辅助、跟踪调试、项目管理等实用功能还有各种丰富的插件经过插件的扩展的功能将进一步加强使用更加方便。服务器采用的版本是的免安装版的网站上能够下载得到。配置很是简单本文基本采用它的默认配置它对硬件性能没有过高的要求经过的插件能够和组合在一块儿使用。数据库使用的是免安装版下载压缩包后直接解压运行系统就会在后台启动网络服务同时下载最新的驱动在中经过就能够访问该数据库。在不少方面较之前版本有了很大的改进。开发环境的搭建目前虽然没有纯粹的语言却出现了不少工具和基于面向对象语言扩展的语言其中以基于的扩展最为突出在使用上很是符合编码习惯语言表达面向方面编程思想很是天然。利用预编译www.docin.com北京交通大学硕士学位论文第四章的应用与实现实现了代码的“横切”织入无论在易用、效率、功能上都很出色已经逐渐被更多的人视为的实现标准愈来愈多的人倾向于用描述的思想能够很好将思想映射成具体的实现编码。在的开发环境下搭建主要如下两步编译器的安装本文实验中采用的是当前最新的版本和合并后归于基金下的项目。由和酬公司赞助添加了一系列特性以支持它的下载地址是一下载获得一文件在正常环境下包的默认执行程序为直接点击该文件运行安装安装完毕后须要设置两个环境变量在中添力Ⅱ在中添加插件的安装插件须要和版本匹配本实验中采用的下载的插件压缩包为下载地址一—。插件的安装很是简单解压包获得两个文件夹和只要将这两文件夹下的文件释放到目录中对应文件夹下便可。安装好插件后的环境就能够支持使用语言进行开发了除了原有代码系列辅助功能还提供不少的辅助功能方便基于进行项目开发。如下的详细设计开发都是在该环境下进行实验和测试的。对象持久化数据库设计分析及映射第三章已经分析对象持久化的操做主要在数据层数据层封装面向对象语言对关系型数据的访问实现细节。以一个论坛系统为例数据库中主要的表结构以下www.docin.com北京交通大学硕士学位论文第四章的应用与实现图论坛系统主要的表结构这三张表将分别映射到面向对象语言中三个值对象类用户表对应类帖子表对应类版块表对应类。除了类与表对应类中也会有与表中每一个字段对应的属性每个属性都会有一组方法和方法。经过方法访问值对象类的属性值达到访问数据库相应字段的信息相应地对方法调用修改实例的属性值时就会对应到对数据库信息同步这一对象持久化操做如前文所分析是一个横切关注点下面基于思想实现分离该横切关注点与它的核心业务。横切关注点业务逻辑设计分析分离对象持久化横切关注点时须要解决如下问题只对从数据库记录中映射产生的实例进行持久化。系统架构中的已经封装了面向对象语言对关系数据库的访问全部的实例都是经过中的方法获取获得所以能够对全部的方法增长一个横切关注点记录全部由映射产生的实例借以判断程序中实例是否须要实例化。须要确保每一条数据库记录在用户的一次会话中只能映射成一个实例所以用户每次读取数据库须要检查读取的实例之前是否已经读取过若是读取过则须要对已读取的数据与数据库进行同步不须要再次映射产生新的实例只需返回已读取的实例便可这一操做应该在经过链接获取数据集映射实例时进行。一个好的映射框架都应该实现该功能。www.docin.com北京交通大学硕士学位论文第四章的应用与实现业务层可能会对实例进行多个属性值、屡次的修改若是每次修改都更新数据库进行持久化使得访问数据过于频繁并且低效对系统性能会形成较大的损害所以对实例修改的持久化操做应该放在事务提交以前统一进行尽可能减小对数据库的访问。综合考虑上述第点和第点假设用户在一次会话中两次访问数据库获取了同一实例若是在第二次访问数据库前修改了第一次访问数据库获取的实例那么第二次访问数据库将可能得到脏数据并且获取实例进行同步第一次获取的实例将会覆盖对实例值的修改。所以持久化操做须要在实例值修改后下一次数据库访问以前进行确保访问数据库得到最新的数据。经过以上分析持久化操做方面编程须要在业务层捕获两类链接点调用类的各类方法访问数据库。在该链接点处切入的横切业务逻辑持久化已经被修改后的实例同时记录由映射新产生的实例调用实例的方法。在该链接点处设置标志实例相应字段已被修改。另外在业务方法执行完毕进行事务提交以前也须要检查是否还有实例须要持久化下面章节中会讨论事务处理横切关注点的实现在事务处理方面的通知体中加入持久化逻辑便可。数据结构设计经过节的分析对象持久化业务逻辑主要是记录全部映射产生的实例并同时记录程序中对这些实例所做的修改在适当的时候进行数据持久化操做。设计如下数据结构保存本次会话期间全部相关实例信息www.docin.com北京交通大学硕士学位论文第四章的应用与实现图持久化数据结构图在该数据结构中每一种类型的实例对应中的一条键值对的类对象为键值又是一个对象。在值对象中的每个键值对记录实例及其全部修改过的字段。基于该数据结构设计持久化操做类—如图◆图类图该类中主要定义了一个静态变量和三个静态的公有方法因为系统都是多用户并发访问对于每个用户访问服务器都须要保存当前线程地持久化信息所以定义变量该变量中存储的对象即为上文中卵对象。方法。记录映射产生的实例若是该实例已经记录则进行同步并返回该实例。方法。记录某个实例已经被修改持久化操做会根据该修改状况同步数据库中对应的记录。。若是存在实例有字段被修改拼装语句进行对象持久化操做同时清除实例字段被修改信息。捕获对类方法的调用定义切入点捕获在业务层对类方法的调用在这些被捕获的链接点处切入横切业务逻辑在方法被调用前检查是否有实例须要持久化调用执行完成后同步已有映射产生的实例保证同一次回话中每条记录对应一个www.docin.com北京交通大学硕士学位论文第四章的应用与实现实例再一次记录映射产生新的实例因为链接点先后都须要切入横切业务所以定义基于该切入点的周围通知示例代码以下定义切入点。’捕获全部对类方法的调用。限定在业务层定义后通知腩全部已经修改过值的实例进行持久化同时记录新映射生成实例该通知流程描述以下图方面通知流程图捕获实例的方法在业务层类中捕获实例的方法切入的横切逻辑判断实例www.docin.com北京交通大学硕士学位论文第四章的应用与实现是否来自数据库记录映射产生从而决定是否须要进行持久化操做。大体实现代码以下定义后通知便可定义切入点曲?’。捕获全部实例方法的调用限定在业务层廒取上下文实例定义后通知判断实例来自数据库记录的映射决定是否记录该实例须要持久化中的实现原理本人实际项目开发中几乎都采用框架它很好地实现了映射的同时对持久化也作了不少工做较好地知足了实际应用需求所以在项目实施中持久化横切关注点并无采用本文基于的实现方案。然而从以上分析和本人对代码各个局部实验测试来看该方案从映射中分离出持久化相关横切关注点程序结构更加清晰、易于实现、减小了开发工做量。而框架因为利用类库为类生成代理类加强了类中的和方法这也是一种基于代理机制编程思想。是一个强大的、高性能、高质量的生成类库它能够在运行期扩展类也能够动态实现的接口类库也是开源的项目。利用实现原理与基于中的类的实现很是相似只是它能够再也不依赖接口直接利用类生成一个原有类的子类则原有类的每一个方法调用都会调用接口的】函数。在函数里就能够经过执行“”来执行实例原有的方法或者方法在该语句执行先后切入所须要的横切业务逻辑根据须要甚至能够不执行核心业务操做均可以。示例代码以下www.docin.com北京交通大学硕士学位论文第四章的应用与实现生成的子类被回调接口的方法。【】”调用日志方法”
利用类库实现以上全部的实例都经过该工厂“方法建立得到则该实例的全部方法体中第一行都会被切入语句”调用日志方法”同时接口方法的参数列表也暴露了核心业务数据信息能够供横切业务捕获相应的上下文。正是利用这一原理动态生成实例并在其方法和方法中切入了持久化相关的横切业务逻辑。另外在组织多个实例之间的关系时为了提升性能还切入了对某些属性延时加载的功能。数据库链接维护横切关注点分析数据库链接维护是业务层中类的业务方法的横切关注点业务层全部类都继承基础类。类定义为抽象类在该类中实现了最基本、最简单一些业务操做如向数据库中添加一个实例、删除一个实例、经过语句获得列表等这些方法既能够被业务层外直接调用也能够在层类调用提升系统的灵活性。在的子类中实现一些具体业务业务层中的类的方法调用关系以下www.docin.com北京交通大学硕士学位论文第四章的应用与实现图业务层类调用关系图图中利用表明各类不一样业务类尽量体现业务层的各类调用关系将这些调用关系分红三类业务层对本层外部的调用类依赖实例访问数据实现商业业务方法业务方法中全部数据库读写操做都须要借助于中的方法所以须要调用类中的方法业务层被层外部调用在本文架构中只限于控制层和工具类中的方法对它们调用为了提升业务层中方法的代码重用性业务层内部必然也会存在相互调用的关系。全部的业务方法都须要经过数据库链接访问后台数据库都须要进行数据库链接维护操做为了提升整个系统的性能应该把中的实例设置为延时加载避免没必要要的实例的建立在须要使用它的时候才建立提升数据库链接的利用率。所以建立实例应该是在类中对属性读取的时刻。www.docin.com北京交通大学硕士学位论文第四章的应用与实现当实例在包内互相调用时须要确保一次业务流程的执行只能使用同一个实例保证一次完整的业务处理中使用同一个数据库链接所以还须要将建立的实例保存起来供当前线程公用在建立以前须要判断当前线程是否已有实例从而决定是否须要建立。同时数据库维护中还包含对事务的处理事务处理并非每一个业务方法都必须的只有当业务方法涉及“写数据库”操做时才涉及事务须要解决一个问题区别类的业务方法是否须要事务不少工具由程序开发人员经过定义文件对每一个类业务方法做一些事务配置由程序读取配置文件决定是否切入事务。定义文件无疑增长了开发人员的负担。对于事务处理的判断本文给出另一种设计方案。分析类对数据库的封装业务层访问数据都须要对通类的方法进行类中的方法是颇有限的并且比较固定那些须要写数据库的方法也是比较明确以下列举的方法经过实例再数据库插入一条记录。经过实例更新数据中一条对应的记录。。经过实例删除数据库中对应的一条记录。和经过语句前者不带参数后者带参数写数据库和经过语句前者不带参数后者带参数写数据库一旦捕获到以上这些方法的调用开启事务并标记之再次捕获时根据该标记能够避免屡次开启事务。在整个业务方法执行完毕后根据标志决定是否须要做事务处理提交或者回滚同时关闭数据库链接。另外在本章节讨论了基于实现持久化方面的操做在实际应用系统都运用了框架已经作好了持久化这些写数据库操做天然也须要事务如何捕获这些链接点中隐藏了这些持久化操做的实现没法直接捕获可是能够捕获对映射产生的实例的方法的调用一旦捕获www.docin.com北京交通大学硕士学位论文第四章的应用与实现一样开启事务设置事务开始标志。经过上述的分析有三类链接点须要捕获在类中捕获对属性的读取切入建立实例逻辑在类中捕获对须要写数据库操做的方法的调用和对映射产生实例的方法的调用切入开启事务逻辑在包外捕获对类方法的调用切入捕获异常决定是否提交事务或者回滚事务以及关闭数据库链接。对这三类链接点及其对应的横切业务逻辑分别定义方面进行实现。建立实例方面编程建立实例的流程以下图所示图建立方面横切业务流程首先须要定义该方面的切入点捕获全部的链接点在类中捕获全部对属性的读取切入的横切业务逻辑如图所示须要判断当前线程是否已建立实例而决定是否建立实例。所以一旦建立实例就使用中的变量保存起来在该方面中同时提供静态方法得到该实例并将调用建立实例的逻辑也封装在其中。定义方面示例代码www.docin.com北京交通大学硕士学位论文第四章的应用与实现以下定义切入点定义前通知直接返回当前线程的实例’定义变量保存当前线程的实例腹淡取当前线程的实例硼从变量中获取当前线程的实例若是当前线程没有建立Ⅱ建实例变量中保存建立雕实例返回当前线程建立的实例
分析上述方面的实现代码能够看到属性一直都没有进行赋值并且通知也没有的调用屏蔽了对核心业务中对属性的读操做通知体中采用了进行代替直接返回当前线程建立的实例供核心业务访问数据库全部中的属性的做用已经失去了原有面向对象语言中属性的做用在这里它只充当了面方面定义切入点时一个供捕获的特征。可是方面
的切入对于面向对象实现核心业务编程却彻底是透明的开发人员仍是能够按照
原来的面向对象语言方式实现核心业务只是再也不受横切业务的干扰。这是面向方面编程一个对面向对象比较完全的思想突破。开启事务方面编程该方面编程须要捕获的链接点对须要写数据库操做方法的调用和对映射产生实例方法的调用。前者本文已经分析就是中仅几个有限的方法会进行写数据库操做捕获这些链接点比较容易利用‘¨’操做组合分别对每一个方法的原型特征匹配便可。www.docin.com北京交通大学硕士学位论文第四章的应用与实现对于捕获调用实例方法的链接点因为数据层使用了框架判断实例是否由数据库中记录映射产生有两种办法框架将全部映射产生的实例都缓存在了中而且提供了可供调用。能够捕获全部的实例方法的调用而后判断该实例是否在中从而决定是否须要事务。另外也利用库加强了实例的和方法其实映射产生的实例都是类子类的实例这些子类都实现了一个接口。经过对捕获这个接口的子类能够过滤掉其余的实例。本文选择第种方式捕获这些链接点。另外横切业务一开启事务在链接点处核心业务以前执行通知类型为前通知定义方面示例代码以下定现入点定义切入点’’。’’捕获类有写数据库操做方法的调用’?‘一捕获映射产生的实例方法的调用定义前通知膳《取当前线程的实例经过实例开启事务’第三章节已经讨论了在类中实现有关事务处理的方法其中方法封装开启具体实现细节确保一个数据库链接中同一时刻只能开启一个事务。www.docin.com北京交通大学硕士学位论文第四章的应用与实现关闭数据库链接、结束事务方面编程本文设计的方案中关闭数据库链接、回滚事务、提交事务的横切业务逻辑都在中定义以下静态方法封装对其的调用进行实现关闭数据库链接朦取当前线程的实例朕闭数据库链接提交事务代码省略回滚事务代码省略后面两个方法省去了具体实现这些方法供方面的通知体调用切入核心业务中。该方面须要捕获的链接点从包外对中的方法的调用因为全部的类都是在包下对业务方法捕获将很容易如示例代码。因为包含事务处理须要对业务方法进行异常捕获从而决定是提交事务仍是回滚事务所以定义周围通知。定义方面示例代码以下定义切入点’。匹配包下全部类公有方法的调用一’限定在包外的链接点定义周围通知肌同用核心业务方法类的业务方法腱交事务回滚事务关闭数据库链接’www.docin.com北京交通大学硕士学位论文第四章的应用与实现对与关闭数据库链接的切入点考虑到控制层在一次用户请求中可能须要调用多个业务层的业务方法在有些项目中会推迟一些可能在出控制层时才关闭数据库链接避免实例频繁地建立和销毁。因为采用面向方面编程这个修改将变得很是容易直接修改该方面就能够实现而不用对核心业务代码作任何修改充分体现了面向方面编程分离横切关注点的优点。缓存横切关注点切入点分析在包内定义工具类实现读取系统中相对静态的信息因为这些信息读取比较频繁对这些信息进行缓存能够减小数据库访问次数提升系统性能。所以缓存是这个包内全部公有方法的一个重要横切关注点。缓存的切入点所要捕获的链接点就是包内全部公有方法的执行在该链接点处将方法执行结果缓存起来当下一次发生一样的调用时能够直接返回缓存结果。在前面设计实现中都是使用捕获对特定方法调用链接点这些方法主要集中在业务层和数据层如图所示业务层和数据层的方法与页面显示层不存在直接的调用关系而页面能够直接调用工具类方法若是仍然使用进行捕捉他们的调用将会失败当前服务器如、都是对即时编译它们直接使用标准的编译器编译页面生成的字节码的类文件。所以的编译器对页面中的链接点再也不起做用须要使用另外一关键字捕获工具类方法体中的链接点。同时工具类的方法中会存在内部互相调用的状况须要解决嵌套缓存的问题以此提升缓存效率。中关键字能够实现对循环切入的控制见节具体实现。缓存主键上下文分析如何判断是否一样的一次调用从而能够利用上一次调用时缓存的结果关键是须要获取链接点处的上下文以上下文为主键进行缓存被调用方法的执行结果就能够根据该缓存进行判断是否有被缓存过的执行结果可直接被重用。工具类的公有方法都是定义静态的所以该上下文主要有方法名含包名和类名、实参列表。在通知中提供的关键字中有两个方法www.docin.com北京交通大学硕士学位论文第四章的应用与实现暑分别能够得到这些上下文。以方法名和实参列表为主键在缓存中存储这些公用静态方法的执行结果缓存数据结构设计以下图所示图缓存数据结构图缓存由一个实例充当它的键值分别是方法名和一个实例亥实例存放的键值对是实参的特征值与被调用方法的执行结果。实参的特征值经过递归组合每个实参的哈希码计算获得这种算法与重载类时的方法的算法相似。具体算法以下’www.docin.com北京交通大学硕士学位论文第四章的应用与实现否图组合算法基于这种数据结构设计的缓存同时也须要提供一些取值和设值的操做定义类封装缓存数据及其相应的操做缓存类中提供的方法主要有获取缓存数据判断是否已缓存和缓存调用结果。类图以下www.docin.com北京交通大学硕士学位论文第四章的应用与实现越埘定义埋存∞醴印◆氓往哈根据方法名和安’列衰获取援存中的教撼’№硪鲥删膪喇叼啪四∥根据方法名和参敛列衰爿断是否已做垤存嘲报撼方法名和参数列衰援存调用结摹脯窑埋存图类缓存方面实现以上分析了方面实现的的切入点和上下文以及缓存数据结构设计实现缓存方面的代码以下定义切入点’埘’’定义周匿通知利用关键字防止嵌套缓存。蕨取上下文方法名。场【】威取上下文实参列表∥从缓存中获取数据脚果已经缓存直接返回缓存的结果月用核心方面工具类方法将运行结果存入缓存区回运行结果该方面在程序上实现了缓存逻辑与工具类中的一些具体业务逻辑编码彻底分离程序编译以后将会向包内全部工具类的方法织入缓存逻辑。缓存的信息是相对静态的也会有修改的时候所以须要考虑数据同步的问题因为这些信息一般都是由系统的管理员进行维护本文在设计缓存类的时候提供了方法能够供管理员从前台发送请求调用清空全部的缓存保www.docin.com北京交通大学硕士学位论文第四章的应用与实现证数据同步。这种作法在实际项目实施中取得了较好的效果。缓存设计实现还有不少工做须要作清空全部缓存实现数据同步并非很理想应该由程序自动判断缓存中不一样步的数据只清空这部分缓存便可另外还应该对缓存内容的使用状况进行监视设定合适时间内若是缓存内容没有被再次使用就能够清除该部分缓存以节省存储空间。本文在此不作进一步分析了。权限认证控制层的权限认证采用基于角色的访问控制方法它是目前公认解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是减少受权管理的复杂性下降管理开销。灵活地支持企业的安全策略并针对企业的变化有很大的伸缩性。数据库结构设计权限认证主要有三张表用户表、角色表、资源表。用户表记录系统中全部用户基本信息主要字段为用户、用户名、密码等。资源表记录控制层全部控制方法信息每一条记录对应类中的一个控制方法主要字段资源、资源名称等角色表根据不一样用户类型定义各类角色主要字段角色角色名称等。每个用户能够对应多个角色一个角色能够拥有多个资源权限用户与资源不发生直接关系经过角色关联本身能够访问的资源用户表与角色表、角色表与资源表都是多对多的关系关系图以下www.docin.com北京交通大学硕士学位论文第四章的应用与实现图基于角色权限设计表关系图基于角色权限设计方案根据实际须要还能够加入群表该表的记录能够与实际应用系统中用户所在的部门组织相对应能够实现批量为用户分配角色。权限控制逻辑详细实现不是本文的重点本节旨在实现如何运用模式分离具体业务逻辑和权限控制逻辑。权限上下文分析客户端请求提交给控制层在控制方法体中处理请求、调用具体业务逻辑以前都须要进行权限认证前文已经分析了权限认证逻辑实现经过模式分离出来单独实现须要在切入控制方法体时获取控制方法信息使其对应到资源表中的某一条记录本文设计的方案就是经过的关键字获取控制方法的全称包名类名方法名控制方法都是不带参数的而资源表的资源字段直接取值为方法的全称。具体实现权限部分数据信息相对于具体的业务数据信息来讲是相对较为静态的在节设计的类增长方法调用层的业务方法∥判断某个角色是否具有访问该控制方法的权限在节中咱们已经实现了为全部类中的方法切入了缓存业务逻www.docin.com北京交通大学硕士学位论文第四章的应用与实现辑这样能够减小权限认证逻辑对数据库的访问。在用户登录系统以后中保存用户所拥有的角色用户从客户端提交请求到中的方法切入权限认证逻辑实现代码以下定义切入点捕获全部地控制方法胴浃取上下文空制类中方法的全称从中得到用户的角色信息调用。进行权限认证
一旦权限认证不经过核心业务就会被横切方面拦截抛出异常转向登录的页面。www.docin.com北京交通大学硕士学位论文第五章基于模式的系统特色分析第五章基于模式的系统特色分析在第三章本文给出了一种系统多层架构设计分析了各层须要切入的横切关注点第四章针对这些横切关注点已经设计实现了基于的解决方案。基于这种模式的系统与传统的纯模式的系统相比有了很大的改进采用纯模式设计的系统各个横切面业务逻辑与核心业务逻辑都纠结在一块儿相同代码片断分散在程序中多处。以业务层流程顺序为例如图图面向对象的业务层顺序图从图中能够看出业务层类的方法除了实现核心业务逻辑之外还须要显式地包含对辅助业务数据库链接、事务处理等相关代码的调用这种纯的实现模式使得业务方法越多将会致使相似代码片断越多的分散。而基于本文
面向方面的设计实现方案彻底分离出了横切方面单独实现横切业务逻辑利用横切机制对全部的业务方法统一切入横切方面业务逻辑自动组合实现完整的业务流程。横切业务核心业务彻底处在两个不一样的方向上实现了完全的解耦避免代码纠结。基于模式设计的本文方案业务层流程如图所示www.docin.com北京交通大学硕士学位论文第五章基于模式的系统特色分析翌罂』库链接、’翌罂库链接心业务方法图面向方面的业务层顺序图图和图的对比来看较从一个更高的思想层次构建系统模式实现更加天然、简单更易于理解。的优点总的来讲基于模式的系统相比传统的模式优越性主要体如今如下几个方面耦合性将系统分为两个方面核心关注点和横切关注点从一个更高的层次对系统作了分解实现了核心业务与横切业务的彻底解耦将类中实现细节的共同部
分抽离出来封装在方面中单独进行实现具有更好的模块化。以数据库链接维
护方面实现为例在业务层与控制层彻底再也不关心数据链接的获取和关闭在方面的通知中定义了数据链接获取和关闭与核一业务执行的切入关系实现了任什么时候候在控制层中调有模型层业务方法都会自动切入数据库链接维护相关操做可是在编码实现上又是彻底分离在方面中不只封装了横切业务逻辑的www.docin.com北京交通大学硕士学位论文第五章基于模式的系统特色分析实现并且也封装了核心业务逻辑对横切业务逻辑的调用使二者的耦合性大大下降。在本文的设计方案中虽然利用加入了各类实现横切关注点的代码但仍然保持核心业务多层架构特色横切关注点方面的实现对于核心关注点方面彻底透明整个系统实现了更高层次的解耦。可读性分离出横切方面的业务逻辑以后使程序开发人员能够专一核心业务编程再也不受横切业务方面的干扰不只减轻了开发负担还能够编写更加简洁的核心业务代码具有更好可读性。以事务处理为例传统的实现都须要程序员对本身开发每个业务模块进行操做决定是否事务回滚或事务提交操做增长了程序开发人员的负担同时大量的非核心业务代码影响了人们对程序的阅
读和理解。而一旦将这些放在方面中实现核心业务模块化大大增强核心方面业务代码将再也不与非核心业务代码纠结在一块儿实现起来更加容易清晰。可扩展性可扩展性是思想一个最大的特点它为系统提供了一个新的扩展机制能够很是容易地在不修改已有代码的基础上实现系统功能的扩展。方面能够在程序任何链接点处注入须要扩展的功能逻辑只须要增长有关方面代码的实现便可这样能够推迟不少传统设计上的决定。在此以性能监控功能为例在一个系统部署运行初期一般都须要监控各个业务方法的执行性能状况传统的实现方式可能
须要在各个业务方法先后手动插入一些代码目的达到以后为了不对性能的影响又须要手动删除这样的作法对于一个大型系统是难以忍受的。可是利用就很是容易实现该功能的插拔定义如下方面便可定义周围通知””www.docin.com北京交通大学硕士学位论文第五章基于模式的系统特色分析在该方面的定义中重用了在关闭数据库链接方面定义的切入点捕获全部业务方的代用执行在其先后切入性能监控相关代码。整个实现很是简单。就像是在原有系统中只增长一个新类而已并且不用对原有代码做任何修改。系统中不少须要扩展的功能均可以经过这种方式实现。良好的可扩展性同时也具有良好的可维护性面向方面编程将全部的横切关注点集中实现和调用更加方便对横切业务的维护。基于模式系统设计开发的不足做为一种新的编程思想模式在进行系统设计开发的时候也存在一些不足的地方本文设计方案采用语言在环境下进行实验不足之处主要体如今如下几个方面的开源社区已经提供的插件在可视化设计和代码辅助上作了很大的支持可是仍然存在不足特别是可视化在准确性和可用性上有些欠缺。另外缺少对横切业务实现代码跟踪调试的支持。当前各类主流的服务器缺少对支持。利用语言在开发环境下编译后的字节代码在现有的服务器运行能够不须要专有编译器支持但在系统中全部页面都是利用标准的编译器即时编译要想捕获页面上的链接点就没法实现所以存在必定的局限性。基于面向对象语言扩展的实现原理编译器在源程序编译生成字节码以前会对源程序做一些横切织入修改所以对方面织入的作任何修改相关涉及的类都须要从新编译对系统部署形成一些麻烦。对编码风格和编码习惯的限制在编程中很重要的一点是如何定义切入点精确捕获全部链接点为了使定义切入点更加容易要求面向对象编程具有统一编程风格甚至须要强制些良好编程习惯如本文设计方案中对各层代码所在的包路径都作了严格的限制这样才容易根据包路径的特征在不一样的层中切入不一样的横切业务。定义切入点的时候大多数都须要根据对方法名的特征匹配从而捕获链接点所以对系统的代码包的组织结构和调用关系都提出了强制性的要求例如在页面www.docin.com北京交通大学硕士学位论文第五章基于模式的系统特色分析中就不能直接调用业务层的类的方法不然因为页面中没有切入一些必要的横切业务数据库链接不会主动关闭事务结束也得不处处理从而致使出错强制要求类的业务方法只能在控制层等地方被调用程序才能正确执行。另外并不支持对利用反射机制进行方法调用的捕获所以试图利用反射机制调用类的业务方法也会致使一样的错误。相对于面向对象编程面向方面编程的确带来了更多的代码编写限制可是这种限制也有利于帮助咱们开发出程序结构、代码风格更加良好的系统正如的做者所言方面能够用于维护一个类的几个方法之间的内在一致性它很是适合强制一种按契约进行设计的编程风格能够用于强制各类常见的编码习惯。做为一种基于语言的扩展语言虽然存在着一些固有的缺点可是总的来讲目前它仍是功能最强大、使用最方便的具。面向方面编程最佳实践语言做为当前语言事实上的规范使用灵活功能强大更方便体现面向方面编程思想使面向方面编程更加天然。结合本文的实验体会提出如下最佳实践条款尽量为一些具备相同性质的类定义简单的父类父类最好定义为抽象类或者接口这样能够很是方便根据父类对这些类中的链接点捕获。如本文设计方案中对全部的业务对象类定义了父类。让业务层与控制层、数据层完全分离保持单向的调用关系防止各层之间出现循环调用关系。例如一分开。各层都对其余层隐藏本层的具体实现。禁止在和中实现业务逻辑。能够使用模式来下降代码的耦合度在横切关注点与核心关注点之间传递上下文由于绝大多数用户的一次请求都是在同一个线程中完成尽量在程序开发中严格遵循这一点不然须要做特殊处理形成一些麻烦。不要试图用关键字捕获页面中对方法进行调用的链接点当前的服务器尚不支持只会致使失败。变通的方法能够采用关键字切入被调用方法体内部捕获方法的执行。页面中减小对后台业务方法的直接调用尽量的从对象中获www.docin.com北京交通大学硕士学位论文第五章基于模式的系统特色分析取数据。在本文设计方案中强制禁止页面直接调用类的方法但能够调用业务层中工具类方法。各类标志符的命名遵循一些约定俗成的习惯包括方法名、包名、类名、属性名等命名。这样方便于利用专有的通配符根据这些命名特征进行匹配从而更加容易捕获链接点。例如全部的实例的方法都以“”为前缀这样就能够很容易定义切入点切入对象持久化方面的横切业务。www.docin.com北京交通大学硕士学位论文结论结论总结本文对设计与开发作了积极地探索和研究。介绍了的主要概念横切面、切入点、方面等探讨了有关技术实现原理和设计开发理论结合系统的特色设计了一种基于的系统的架构重点研究了在系统中的应用针对系统具备共性的横切关注点对象持久化、数据库链接维护、缓存和权限认证设计实现了基于的解决方案。从中咱们能够看出相比传统面向对象编程模式的优越性主要体如今如下三方面减小核心关注点业务开发人员的负担使他们能够专一商业业务逻辑的开发提升开发效率。同时有助于团队成员之间分工协做因为核心关注点和横切关注点的完全分离团队成员能够分别专一于这两方面开发互相影响大大减少有效发挥团队力量。有效解决了模式下面临“横切”问题时的代码混乱使系统进一步解耦加强了系统的可读性、可维护性和可扩展性利用能够在不修改系统核心方面代码的基础上只需增长“横切面”就能够很容易实现系统功能的扩展。不只很好的解决系统中已有横切关注点与核心关注点的分离也为之后系统增长新的横切关注点扩展新的功能提供了更大空间同时对已实现横切功能维护变得很是独立。从单一的层次方向构建系统而增长了横切面方向从一个更高的层次构建系统更天然地将系统需求分析映射到编程模式更加方便人们对系统的设计、开发和理解。进一步工做做为一种新的编程模式仍然处在不断发展和完善之中当前设计、开发、测试理论仍然至关缺少在业界缺少统一的规范甚至还存在对它的种种争论在实际应用中还没有出现真正的语言。在一个新的编程思想没有成熟之
前将更加吸引着人们对这些问题的探讨和研究。在理论和实践应用方面都www.docin.com北京交通大学硕士学位论文结论有待进一步的探讨研究实践应用中增强在具体商业业务领域的运用目前大多数的应用仍然局限于解决一些系统级横切关注点问题须要扩大的应用领域在应用中不断总结经验发现的规律充实相关开发理论。目前无论是基于动态代理机制实现的框架仍是基于面向对象语言的扩展都不一样程度上存在着一些不足期待着更好的语言。同时思想的实际运用也须要更好的集成开发工具支持增强代码辅助、可视化、跟踪调试等功能。分析设计相关理论须要不断发展基于的需求分析和系统设计的理论方法都很是欠缺对相关概念和思想不少在业界仍未造成共识。最后引用的话结束本文“方面仍然呆在这里。它们仍然没有成为主流应用程序一部分的一个方法但它们每一天都变得更加接近”。www.docin.com北京交通大学硕士学位论文参考文献参考文献【】陶刚编译‘体验中面向方面编程》时却年月【】著∞【】年月【】陈景燕阳国贵著下的权限控制实现》时】年月【】著技术简介》】年月【著冯博琴等译‘面向对象分析与设计》【】北京机械工业出版社年月【】张海潘编著‘软件工程导论》【】北京清华大学出版社年月【】∞【】年月【】下的编写的应用》【【‘用动态代理实现【】【著精通构建与部署应用的最佳策略》瞰】北京电子工业出版社【著潘爱民译口哪北京机械工业出版社年月【】古全友王恩波胥昌胜技术在系统构建中的应用》【】计算机技术与发展第卷第期年月【】著个最重要的最佳实践》【】年月【孙卫琴编著《精通对象持久化技术详解》川电子工业出版社年月【格雷德斯基著‘精通【】清华大学出版社年月【著龚波冯军程群梅等译设计模式手册》【】机械工业出版社年月【李清华著‘基于的系统实现研究》武汉大学硕士学位论文年月【】范武苏一‘基于编织技术的缓存框架研究和实现》【】软件导刊年期【∞著‘www.docin.com——一韭至至望查差堡圭竺垡笙兰堡查兰坚》【】电子工业出版社年月】埘删著》】
【?【】“【咖【】【美詹森美赫鲁著译∞删㈣》中文版【电子工业出版社年月【著》【年月【著阱】年月【著》【】北京机械工业出版社年月著【北京机械工业出版社【】》】年月www.docin.com北京交通大学硕士学位论文做者简历做者简历教育经历年月一至今就读于北京交通大学软件学院计算机软件与理论专业软件工程方向攻读硕士学位年月一年月就读于华中师范教育技术学专业计算机辅助教育方向获理学学士学位工做实习经历年月一年月实习于北京协力金桥软件技术有限责任公司职位工程师年月一年月兼职于长城企业战略咨询研究所职位工程师年月年月任教于九江学院主讲课程语言程序设计。主要工程项目年月一年月参与中国网通客户关系管理》主要技术框架主要职责网管数据交换接口、用户数据同步接口和统一审批固化模块的设计与开发。年月一年月参与‘中学生心理健康测试系统》主要的技术框架包括的、、等功能、本人承担的主要工做一些特殊问卷测试、数据统计分析、系统配置模块、自定义问卷发布等模块的数据库设计与开发以及一些通用代码的编写。本人的工做量占整个项目三分之一以上年月年月我的承接《国家软件专业孵化器技术支持中心北交大分中心》的设计与开发。本人主要工做数据库设计、系统架构除论坛和美工之外几乎全部功能模块设计开发实现各个中心之间的注册用户的单点等录部分编码。论文发表状况‘面向方面编程在多层架构中业务层的应用》发表于《计算机技术与发展》年第期《基于多层架构中层对数据库访问的优化》发表于《铁路计算机应用》年第期www.docin.com北京交通大学硕士学位论文首创性声明首创性声明本人声明所呈交的学位论文是本人在导师指导下进行的研究工做和取得的研究成果除了文中特别加以标注和致谢之处外论文中不包含其余人已经发表或撰写过的研究成果也不包含为得到北京交通大学或其余教育机构的学位或证书而使用过的材料。与我一同工做的同志对本研究所作的任何贡献均已在论文中做了明确的说明并表示了谢意。学位论文做者签名弋包簪罕签字日期。一口年月仁日www.docin.com学位论文版权使用受权书本学位论文做者彻底了解北京交通大学有关保留、使用学位论文的规定。特受权北京交通大学能够将学位论文的所有或部份内容编入有关数据库进行检索并
采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。赞成学校向国家有关部门或机构送交论文的复印件和磁盘。保密的学位论文在解密后适用本受权说明学位论文做者签名眵晖签字日期年月日新签名嬲签字日期仞彩年日www.docin.com
正则表达式

相关文章
相关标签/搜索