第一章:企业级项目框架概述
前言:之前也看过大家在谈架构,谈分层,谈模式。对一些问题,大家也各抒己见,确实不确。但是不管怎样,我们最终还是要在我们的项目中真正的去实现谈论的这些方法,方法谈了就要用,要实践才有价值。而且代码是最没有二义性的,所以,本系列将一步步的带领大家开发一个正真的企业级项目。
其中融合了分层架构,设计模式以及很多OO的设计思想。而且大家也可以看到,我们不是"为了模式而模式",而是一种自然过渡的思想。本系列文章不是为了别的,只是希望可以给大家带来一点点的帮助。
本系列的文章每一章采用下面的结构方式编写:提出问题--设计方法--解决方案。
我们将会为一个公司的人力资源部门开发一个系统。这个系统可以批准,拒绝公司员工的请假的申请。而且这个系统将采用 ASP.NET3.5来开发,语言是C#,数据库是SQL SERVER2005.融合ASP.NET3.5中的很多特性,语法方面的Linq,Lamda,WF,AJAX等。
而且整个解决方案设计的很灵活,便于我们以后根据我们的业务逻辑来扩展。本篇主要确定项目的一些需求,并且介绍项目开发采用的架构。
提出问题
Sue是人力资源部门的首席执行官,平时她一直采用Word和Excel来管理公司员工的请假的请求。Sue很快就发现了一个问题:很多的请假的请求都没有被记录下来,而且她也很难去跟踪那些请求的处理过程和结果。现在,Sue已经接到了一个批准:开发一个企业级的项目来代替原来使用的Word和Excel的管理办法。
最为整个项目的负责人,Sue任命Mary作为代表去和IT部门进行沟通,确定项目的需求。下面的会议可以在每个项目开发之前都进行的。
Mary说:我的上司派我来参与项目的开发,但是我对计算机以及操作系统的知识却是一无所知。我们在很多年前就尝试开发管理系统,但是最后还是没有成功。首先让我来介绍一下我们现在在做什么。我们一直在用Word来管理员工的请假的申明。如果一个员工要请假,那么他就要填写一份Word的申明表。但是,当我们在去年在把我们用来记录员工申请的Excel交给经理的时候,问题就出来了:很多的申请表已经被取消了,但是我们不知道;我们也不知道申请表是什么时候交给经理的...
我说:这么说,你想要一个自动处理请求的系统。我之前也用过Word和Excel来管理过,所以我知道一点管理的过程,但是至于把申请表交给我的上次以后发生了什么事情,我就不清楚了。你可以告诉我,之后的申请表的处理流程吗?
Mary说:如果员工想要申请假期,那么他们首先就要去填写一张表格,并且打印出来,交给他们的上司去审核并且签字。他们的上司签字之后就把申请表交给HR,然后我就查看我的手头的Excel表格,看看那个要申请假期的员工是否可以申请他们想要的假期时间。然后我就在我的Excel表格上减去他们申请假期的时间。如果员工申请假期的时间操作了2周,那么我就会通知他们的上司,并且还要我们部门的首席执行官签字。但是,这样一来就出现了很多的问题,比如首席执行官很忙,他忘记把员工申请假期的表格给我,这样很多的记录就出问题了。
我:那么,你需要一个可以允许用户提交申请并且内置了工作流的系统,员工的上司,首席执行官可以用这个系统来批准或者拒绝请假的申请。
Mary:是的,我想我们可以拒绝员工的申请,但是一般情况下,我们都是把申请表扔了。
我:你说还有一个问题就是:当员工已经提交了请假申请,但是他们突然想取消申请,他们并没有告诉你。所以你需要你的员工可以通过这个系统来告诉你他们取消了申请吗?如果这样的话,我可以让系统通过Email来通知你请求取消了。我还可以通知你申请是否通过了上司的批准。
Mary:行啊,很不错!这样我就可以在我的Excel表格中正确的记录这些数据了。
我:你可以把你的Excel表格给我看看吗?我可以这个系统中生成Excel,并且导出。这样的话,任何已经取消的请求等数据就可以记录下来,而且你也不用手动的维护Excel。
Mary:好,Excel表格给你!但是如果我不用Excel,我可以跟踪记录假期申请的信息吗,我希望用数据库来记录那些数据,你们可以办到吗?
我:当然!你们需要安全吗?你是否希望一部分人可以知访问报表,还有一部分人,比如你,可以访问任何东西?
Mary:我不知道你说的安全是什么,但是我不希望Bob进入我的管理系统。Bob他只能打印报表。
我:OK。这么说,你们需要一个基于角色的安全系统,这个系统设置了很多的访问权限,如只读,编辑等。
Mary:我不知道什么是基于角色的安全,但是听起来不错!
我:你们需要审核跟踪什么?也是说,系统中的提交的申请的变化和安全的变化你都可以看到。例如,如果系统中的一个用户被赋予了访问报表的权限,系统将会把这些信息记录下来,并且告诉你。你需要跟踪记录吗?
Mary:是的,需要。
我:你需要通过不同的方式查看申请假期的申请信息吗?比如,只查看取消的申请,查看已经被上司签字了的申请?我可以在系统中,可以让你以不同的条件来过滤,查看申请的信息、而且我还可以这些信息放在一个主页上,方便你查看。
Mary:真的,太好了!
我:OK,我现在已经收集到了足够的信息了。我以后还会找你收集需求的。现在系统功能如下:系统有自动处理请求的工作流,报表查看,基于角色的安全,Email通知,查询信息,还有就是记录的跟踪。
Mary:恩,还有就是我不希望界面上的字体花花绿绿,而且大小不一致。
我:好,我们会注意的。
设计方案
整个项目的解决方案是用ASP.NET3.5开发的一个三层架构的方案。下面是本系列的开发过程:
第二章:数据访问层开发(DAL)
数据访问层是三层结构中做基本的。一般情况下,数据层的任务就是采用数据库中存储过程,或者执行SQL语句。在以前的开发中,我们一般是采用ADO.NET的方式,而且也知道把数据以什么形式传到业务层中。而且有关到底把什么对象传到业务层的谈论也很激烈,但是在本系列中我们就可以使得这些争论平静下来。
本章才介绍Linq To Sql ,并且采用内置的ORM设计工具来创建数据实体类,具体方案,以后讲述!
第三章:业务逻辑层(BLL)
业务逻辑层,也成为中间层,是我们实现业务逻辑规则的地方。以往我们一般是把数据库中的表一一在业务逻辑层中映射为实体类,但是这样做是够的。因为业务逻辑层必须保昏数据的完整行,并且实现业务逻辑规则,如必填字段,限制字段等。如果业务逻辑规则被破坏了,那么业务逻辑就要停止执行,并且不对数据层产生影响。本章将描述业务逻辑层设计的一些模式。
第四章:UI层
UI层是应用程序中用户可以接触的唯一地方,所以,保持界面的可用性和一致性很重要。CSS和ASP.NET中的Theme可以控制界面的表现形式。而且本章还会开发自定的服务器菜单控件等。
第五章:异常处理
在开发任何一个系统的时候,异常的处理都是很重要的。我们常常看到很多的开发人员忘记异常处理,或者当他们处理异常的时候,他们没有正确的处理或者当异常发生时,他们没有通知任何的人。所以我们要让系统告诉我们到底出了什么问题,而不是让用户告诉我们。正确的异常处理,可以使我们看起来更加的专业。本章将采用Microsoft Exception Handling Application Block.
第六章:基于角色的安全验证
很多的商业的应用程序都要角色的验证。比如我们可以使得一部分的人可以访问那些页面,另外的一些人可以编辑一些信息等。
第七章:工作流机制
把业务逻辑规则分解为一个个的工作流,并且用Windows Workflow Foundation来实现。我们可以看看WF在项目中到底是如何使用的。
第八章:通知系统
自动的通知系统可以通知用户,他们的假期请求是否通过,拒绝等。本章主要是采用了Windows service技术。功能强大!
第九章:报表
采用.NET中的水晶报表。以不同的显示显示数据,如PDF,HTML,WORD等,设计专业的界面。
第十章:查询控件
开发自定的查询控件,以不同的条件过滤,查看数据
第十一章:个性化主页
把虽有的信息个性化到一个页面,如我们知道的webpart的使用。内容丰富!
今天主要讲述了"提出问题"和"设计方案"里,下篇接着讲述:解决方案部分。