项目的架构搭建就是在是在软件开发的设计阶段完成的。
在开始架构设计之前,首先要知道什么是架构,架构就是软件产品的骨架,这个骨架把组件、环境等因素纳入其中,使之能有效得发挥它们的技能,为项目服务。
在架构设计之前,开发人员首先应该了解项目的基本需求,只有在做好需求分析之后,才能做出适合项目的架构。
架构的设计遵循一些原则:
1. 明确目标,切合要求。这是架构的根本,如果一个架构设计的很漂亮,用了很多层次化的东西,但是如果系统不需要这么复杂的设计,那么这样的架构也是不可取的。
2. 可扩展性。一个好的架构一定是一个方便扩展的架构,如果需求发生改变,那么很容易在原来的基础上进行功能扩展。
3. 易用性。就是架构使用起来方便,易于理解,易于使用,在项目开发过程中,不会因为架构的问题而影响项目的进展。
4. 稳健性。一个好的架构,能适应项目设计需求,不管操作方式如何变化,都可以用同样的方法进行处理。
5. 安全性。架构的安全并不是说把架构的代码放到一个地方加密,是在架构设计中考虑软件的安全性能。
下面,以我项目中使用的三层架构来具体阐释一下。
所谓的三层,是指数据访问层、业务逻辑层和显示层。三层结构之间的关系如图所示:
其中,显示层是系统的UI层,提供交互式页面,业务逻辑层用负责数据的传递和处理,数据访问层用来和数据库打交道。实体集是用来对抽象的对象的属性的封装,或者自定义的封装,用来做交互过程中的数据载体。
相邻层之间可以调用,不能跨层调用。
这种三层架构的优点:扩展性强,当客户需求变动时,只需修改相应的方法即可;安全性保障,层与层之间不能调用,保障了安全性。易用性强,容易看懂,方便操作。
现在,我们以一个项目管理系统来说明一下三层架构的项目创建过程。
1. 创建解决方案,在解决方案里建两个逻辑文件夹,Modules和WebSite,Modules用来盛放三层架构的业务逻辑层和数据访问层,以及公共使用的实体集。WebSites里面存放显示层的代码,这里用网站作为显示层。如图:
2. 创建项目,这里创建三个类库:Entities(实体集),Services(数据访问层),Manages(业务逻辑层),一个网站:ProjectManagementSystem(显示层)
架构搭建完成后,就可以编写代码了,比如,有一个功能是项目管理,那么,我们在页面里面创建一个项目管理的页面,用于和用户交互,名为:ProjectManagePage.aspx,在Services创建一个类ProjectService.cs,在Manages创建ProjectManage.cs,在Entities创建Project.cs(用于封装Project的属性)。如图:
现在,假设用户需要获得项目列表List<Project>,那么,在ProjectManagePage.cs中,需要调用ProjectManage.cs的方法GetProjectList(),此方法返回一个Project的列表。ProjectManage.cs的代码可以如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Entities;
- using Services;
- namespace Manages
- {
- public class ProjectManage
- {
- private ProjectService _projectService = new ProjectService();
- public List<Project> GetProejctList()
- {
- //从ProjectService获得数据
- List<Project> projectList = _projectService.GetProjectList();
- //......对ProjectList的数据处理
- return projectList;
- }
- }
- }
从这里可以看出,ProjectManage中调用ProjectService中的方法,实际上,是从ProjectService中拿出数据,然后对数据处理,最后返回给显示层。
看一下ProjectService中的代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Entities;
- namespace Services
- {
- public class ProjectService
- {
- /// <summary>
- /// 获取Project列表,和数据库交互
- /// </summary>
- /// <returns>Project列表</returns>
- public List<Project> GetProjectList()
- {
- List<Project> projectList=new List<Project>();
- //projectList=....
- //.......
- //
- return projectList;
- }
- }
- }
ProjectService仅仅是和数据库交互,并不对数据进行处理。
他们都有一个公共的载体Project,是对Projet属性的封装。这里就不在赘述。
个人觉得,一个项目中,并不一定非要用一些高明的架构才是一个好项目,而是要用适合自己系统的架构,应着重于上面说的几个原则。
本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/915287,如需转载请自行联系原作者