Web项目代码架构研究

  1. 概述

    一个好的项目代码架构可以提高软件开发的效率,而一个好的项目代码架构应该达到以下几个要求:

    1)、 提高代码的可重用性

    代码重用是提高软件开发效率和降低软件开发成本的有效手段,而想要重用代码则需要代码本身具备可重用的特性。首先,可重用的代码所提供的服务必须与使用方的需求一致;其次,可重用的代码的使用方法必须简单,使用的成本需小于重新实现相应功能的成本;同时,作为一个可重用的代码应当存在较少的缺陷和没有致命性的缺陷。

    2)、 提高软件协作开发的灵活性

    如今的软件开多为团队协作开发,甚至是由多个团队共同开发同一套系统,因而协作开发的灵活性是提高软件开发效率的重要因素。
    乍一看,上述的问题似乎与项目代码的架构没有什么关系,项目代码架构也无法解决这些问题。但实践证明,通过项目代码架构的确无法完全解决这些问题,但是通过项目代码架构的设计能很好地解决项目代码重用问题和一定程度上提高协作开发灵活性。

    关键词:代码架构  代码重用

  2. 一个常见的软件架构

    重用意味着分离。当一部分代码将要被重用,那么他们必须是目标项目的同类项,如很多第三方插件、通用构建等提供的服务是很多项目的同类项;而对于一个公司、一个团队来说,相同的业务实体、相同的业务等都是同类项。

    目前,大多数项目都采用MVC的三层架构,就Web应用而言,在实际的开发中的层次结构如下图所示:Web项目代码架构研究

    1)、 展现层代码

    展现层代码对于一个web项目而言是相对独立的一层,虽然它需要与数据模型相对应,但这并非强制性的。
    展现层的代码本身有一个比较好的代码架构,即原内容结构代码、样式控制代码、动态JS脚本、其他页面内容(如Applet、Flex)。其中原页面基本上各个项目是不相同的,也是不能重用的,而其他几个部分本身就是可重用的设计,因而出现了许多的UI框架、前端插件。

    2)、 控制层代码

    控制层的作用在于接收http(s)请求并控制这个请求的业务目标所需执行的一系列业务操作顺序。控制层代码对于不同的项目而言是不同的,即使是分布式系统的子项目间也是不同的,因而这一层的代码也不能重用。

    3)、 服务层代码

    服务层代码也称业务层代码,服务层是一个实现了所有业务逻辑的集合层,控制层通过组织调用服务层的服务,进而实现http(s)请求的业务目标,对于不相干的两个项目而言,这一层的代码是完全不同的,因而无法重用。而对于分布式系统的开发项目而言,这一层的代码对于不同的子项目而言存在着诸多的相同服务,因此这层的代码是可以重用的。

    4)、 实体模型

    实体模型与系统中的业务相对应,也称业务实体模型,实体模型并非只是与数据库表相对应的实体类,同时因业务结合和派生出来的实体类也是业务实体模型。实体模型对于不相干的项目而言,相同的部分和可重用的部分并不多;而对于分布式系统项目的开发而言,业务实体模型有绝大多数都是相同的,因而可以重用。

    5)、 数据接入层

    数据接入层是用于与数据源交互的一层,对于如今的软件系统来说,数据源是必不可少的,所有的业务基本上都是围绕着数据来展开的。数据接入层因现如今的许多框架而变得简单了很多。对于一个分布式系统来说,数据接入层相同的部分是很多的,因为他们会有共用的数据源。

  3. 一个高重用性的代码架构

    重用意味着分离,从上述的软件架构来看,将其不同的部分进行组合和分离是可以达到代码重用的效果的。下面是一个高可重用性的代码架构方案,如图所示:

    Web项目代码架构研究

    将项目代码划分为6个不同的子项目,各个项目作为一个构件或组件存在,分别是:目标子项目工程、用户管理构件、实体模型组件、服务组件、通用组件集、数据接入组件。

    1)、 目标子项目工程,即是对应于一个软件系统的项目,这是实现的目标。它包括展现层和控制层的代码,因为这两部分基本上是不可重用的。
    2)、 用户管理构件,即是用于基本的用户管理实现,如用户的注册、登录、修改基本信息,而与项目有关的则在项目中进行扩展,用户管理构件提供相关扩展接口。为什么要把这一部分单独作为一个构件独立出来?因为对于如今的Web项目而言,这是一个重复率非常高的部分,而对于同一个公司、同一个团队而言它又是十分相似的。
    3)、 实体模型组件,即是系统的所有业务实体类及其派生类,将其独立出来专门为其他项目提供实体模型。
    4)、 服务组件,即是将服务层独立出来,为其他项目提供业务服务。
    5)、 通用组件集是包含许多通用组件的独立项目,它能被每一层所使用,它是与具体项目没有强制性关系的一个工具集合。比如它可以集成邮件服务、缓存服务、字符处理服务等等。最有意思的应该也是这部分东西,因为当你封装了许多属于自己的组件、工具,那么它对于一个组织来说是十分有用的,甚至可以让它为更多人服务,像j2Cache等就是这样的。
    6)、 数据接入组件,即是将数据接入层独立出来,为服务层提供数据接入服务。


    最后需要明确的一点是:这里所说的是代码的架构,最佳的使用场景应当是分布式的系统开发。这里将各个部分分成不用的项目,然后通过项目引用实现最终的使用。然而它与OSGI的模块化软件架构并不是同一回事,这里只有代码。


--2015-11-22 beijing 

--by alex

你可能感兴趣的:(代码架构,代码重用)