项目实战之中小网站的框架搭建过程

先说一说这个项目的背景,是给我校留学生做的一套教务管理系统,我是JAVA出生,C#项目做过之前的管理学院网站,当时的架构是ASP MVC2 + JQGrid + ZTree + 基于AJAX的WCF,基本思路都是从JAVA项目中搬过来的,没有用到C#特有的方法,比如ADO.NET 和 LINQ语句

项目实战之中小网站的框架搭建过程_第1张图片

 

Dao层主要就是为了与数据库通信,我们当时就直接用C#自带的数据库连接,效率极低,基本每条SQL都是自己写,Entity类似于java中的实体Bean,然后就是负责跳转和数据接收的控制层和为了展现界面的VIEW层。基本上算上三层架构了,但当时为了加快速度开发,代码及其混乱,甚至出现了在Servers层和JS里面写SQL。

 

我们之前JAVA项目中用的是一个AJAX框架:DWR,我们在网上找到C#类似的框架基于AJAX的WCF,在直接用JS调后台代码。

 

我们也改了JQGrid和ZTree的源代码,直接写WCF调用的地址和方法就可以使用组件了:D

 

而现在这个项目的架构我们进行了全方位的改良,架构是Spring.NET + NHibernate + ASP MVC2  + EasyUI ,具体的包结构为下图

 

项目实战之中小网站的框架搭建过程_第2张图片

因为不知道到时候用哪一个数据库,所以用了一个持久化框架NHibernate,加上Spring.NET对每一个声明对象的管理,开发起来效率比之前高多了。其中,DAO层和Servers层的实例是单例,控制层是原型模式(也就是实现copy)。

 

当然,为了高效,代码的重用和少错误,我们写了一个C#的代码生成器,用的是C#提供的T4模板技术

 

对于这个项目的权限验证,之前找了好久的C#过滤器没找到,所以就直接写了一个ascx来判断Session是否为空,后来每一个页面都引感觉不爽,感觉对前台VIEW污染好严重,所以又找了一下,发现在C#又一个对每一个ACTION的拦截器,类似于AOP,在Global.asax写一个内部类,实现ActionFilterAttribute接口,代码如下

public class ValidateModelAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            String OperatorID = Convert.ToString(filterContext.HttpContext.Session["OperatorID"]);
            if (string.IsNullOrWhiteSpace(OperatorID))
            {
                filterContext.Result = new RedirectResult("/Operator/Login");  
            }
        }
    }


 

在每一个ACTION前加上用于表示的[ValidateModel],如

[ValidateModel]
        public ActionResult Index()
        {
                string operatorID = Convert.ToString(Session["OperatorID"]);
                if (StringUtil.IsNotEmpty(operatorID)).......


 

 

你可能感兴趣的:(项目实战之中小网站的框架搭建过程)