修改说明:
(1).本文基于Spring.NET 1.3.2正式版,但该版本并不支持ASP.NET MVC4,目前仅有2.0支持,所以,把项目由MVC4改为MVC3,请理解。实际上,我是想使用MVC4的WEB API,这个有时间写一篇单独的文章,仅仅是在ExtJS与MVC通信的方式上不太一样而已,其他基本上一样。
(2).本来打算是以讲解主要功能为主,但自己也要用到这个项目,所以又加了几个功能。
1 项目开发环境
开发环境:Win7+VS2012
技术框架:ExtJS4.1+ASP.NET MVC3+Spring.NET1.3.2+Entity Framework5.0
数据库:SQLite
涉及到的其他技术或框架:log4net、AutoMapper
为了测试和共享方便,本文使用SQLite轻量级数据库,需要的话可以随时移植到其他关系型数据库中。
2 项目功能介绍
本人准备以开发一个中小型企业网站的主要功能来一步一步讲解,从数据持久化、业务逻辑处理,到用户展示各个环节,并解决每个环节中遇到的问题。
项目分为两大模块:前台(普通用户)、后台(管理员管理),在ASP.NET MVC中通过创建Area来实现多个模块的功能。
本文主要以开发后台演示,有时间的话我会完善前台模块的功能。
主要功能:
1) 网站以发布文章(新闻、资讯、留言等)为主,允许用户进行评论以及管理员回复;
2) 发布文章时允许上传视频、图片,并能自动扣取视频中的图片,对图片自动缩放、压缩处理;
3) 网站的另一个功能是人才招聘功能,并允许用户登记和管理员查询;
4) 后台管理时,不同的管理员具有不同的权限,以角色实现。
3 数据库结构
4 构建项目结构
先看下项目的整体结构:
此架构与传统三层相似,EF5是持久层,Dao是数据访问层,Service是服务层,Web则是表现层。简单描述如下(后文在用到的时候会详解):
EF5:使用微软最前的Entity Framework 5.0框架技术,其中会自动生成Model实体类;
IDao:数据访问层接口,仅允许服务层引用;
Dao:数据访问层接口实现,使用Spring.NET向Service层中注入;
IService:服务层接口,仅允许表现层引用;
Service:服务层接口实现,与Dao层相信,使用Spring.NET向Web层注入;
DTO:数据传递对象,用于在ExtJS与Action、Action与Service传递数据时使用。
Form:在Action中使用,类似于Model类,除了用于接受用户的请求参数以外,还封装了请求数据的有效性校验。
Utility:整个项目基础类,封装一些常用的类,在其他项目中使用时引用。
Web:表现层,这里就是ASP.NET MVC3项目。
解决方案及这8个项目创建好后,增加项目之间引用:
1) IDao引用EF5(使用其中的实体类);
2) Dao引用EF5(使用其中的实体类)和IDao(实现数据访问层接口);
3) IService引用EF5(使用其中的实体类)、IDao和DTO;
4) Service引用EF5(使用其中的实体类)、IDao、IService(实现服务层接口)和DTO;
5) DTO不引用任何项目,属于值对象;
6) Form引用IService,实现分页接口和数据校验功能;
6) Web层引用其他所有层(理论上只需要引用IService、DTO和Form,全部引用只是为了方便引入各个项目中的DLL)。
7) 对于其他工具的引用(如log4net、spring.net等用的时候再说)。
5 关于项目运行的一些问题
1) 项目访问地址,假设部署在本机中,其端口号是8001,访问地址应是:http://localhost:8001/Manage/Enter/Main.aspx
2) IIS配置的问题,应用程序池应选择.NET Framework 4.0,且是集成模式,如下图所示:
3) Sqlite问题,在配置Sqlite数据源时需要安装(只能安装X86的):
适用于vs2012:http://system.data.sqlite.org/downloads/1.0.85.0/sqlite-netFx45-setup-bundle-x86-2012-1.0.85.0.exe
适用于vs2013:http://system.data.sqlite.org/blobs/1.0.92.0/sqlite-netFx451-setup-bundle-x86-2013-1.0.92.0.exe
适用于vs2015:http://system.data.sqlite.org/downloads/1.0.105.2/sqlite-netFx46-setup-bundle-x86-2015-1.0.105.2.exe
本篇完,稍后下篇开始创建数据库及持久层。