应广大网友的要求,我最近抽空基于ASP.NET MVC + WCF + Entity Framework做了一个案例,该案例以图书馆图书管理、读者借书、还书为业务背景,以领域驱动设计为思想指导,全程采用Microsoft技术进行实践,希望能够给Microsoft技术的狂热者以及领域驱动设计的学者提供实践参考。
本案例选用的业务逻辑非常简单,所以项目取名上我选用了“Tiny Library”,在后面一章我将详细介绍这个案例的业务逻辑、模型设计与系统架构。
下载案例
本来打算将项目发布到codeplex上,便于大家交流,也便于代码更新与维护,但由于某些原因,我无法在自己的网络环境中连接codeplex的svn/tfs服务,于是,目前只能以压缩包的形式发布案例源代码,希望大家谅解,等以后有机会更新到codeplex上后再通知大家。
系统需求
- Microsoft Visual Studio 2010
- Microsoft Patterns & Practices 5.0(v5.0.414.0,Runtime v2.0.50727。请自行到Microsoft官方网站下载安装)
- Microsoft ASP.NET MVC 2
- Microsoft Entity Framework(注意:是Visual Studio 2010自带的那个版本,而不是最新发布的那个Feature Pack CTP版本)
- Microsoft SQL Express 2008 SP1
- Apworks Application Development Framework
请在打开本案例解决方案之前自行安装上述软件和组件!
说明:Apworks Application Development Framework是我自己开发的一套领域驱动(Domain Driven)的应用程序开发框架,里面提供了对Aggregate Root、Repositories、Specifications以及Transaction Context的支持,基本能够满足基于Microsoft.NET技术的中小型领域驱动项目的应用开发。目前这个框架项目正在进一步实现基于CQRS体系结构模式的框架。为了节约时间,本系列文章不会对Apworks Application Development Framework做太多介绍。本框架目前也还是under construction,所以读者朋友也千万不要将其用在自己的系统开发中,以免发生危险!有关Apworks Application Development Framework的源代码以及更多信息,请访问项目站点:http://apworks.codeplex.com。Tiny Library压缩包里包含了一个可被Tiny Library使用的Apworks版本,因此读者朋友无需自己去Apworks站点上下载并编译源代码。当然,如果您希望了解Apworks的实现方式,可以使用上面的站点查看Apworks的源代码。
安装部署
- 建立数据库
使用Microsoft Visual Studio 2010提供的Server Explorer功能,在Data Connections上单击鼠标右键,选择Create New SQL Server Database选项,此时出现Create New SQL Server Database对话框,在对话框的Server name中输入(local)\SQLEXPRESS,在New database name中输入TinyLibraryDB,之后单击OK按钮 - 创建数据库Schema
使用Microsoft Visual Studio 2010打开TinyLibrary解决方案,在TinyLibrary.Domain项目节点下找到TinyLibrary.edmx.sql脚本文件,打开此脚本文件,在SQL Editor区域,点击鼠标右键,选择Connection | Connect菜单,此时弹出Connect to Database Engine对话框,Server选择SQLEXPRESS,然后单击OK
再次在SQL Editor区域点击鼠标右键,选择Execute SQL选项,执行SQL脚本以创建数据库Schema - 建立演示数据(Demo Data)
以上述同样的方式,打开TinyLibrary.Domain项目下的TinyLibrary.DemoData.sql脚本并执行 - 3722端口
Tiny Library的WCF Service采用3722端口作为其服务的固定端口,因此在使用本案例钱,确保该端口未被其它应用程序占用
运行案例
- 在Microsoft Visual Studio 2010的Solution Explorer上,右键单击TinyLibrary Solution然后选择Rebuild Solution以重新编译解决方案
- 在TinyLibrary.Services项目下,选中TinyLibraryService.svc,然后单击右键,选择View in Browser,此时会自动打开ASP.NET Development Server,端口占用3722,同时打开WCF Service的页面。此时将WCF Service的页面关闭,仅留下ASP.NET Development Server
- 右键单击TinyLibrary.WebApp项目,选择Set as StartUp Project选项,然后在Microsoft Visual Studio中按下Ctrl+F5或者Debug | Start Without Debugging选项以启动应用程序
- 应用程序启动后,可以看到主界面如下
登录账号
测试需要,Tiny Library默认提供三个用户账户:daxnet、acqy和james。用户名、密码如下:
- 登录名:daxnet;名称:DaxNet;密码:daxnet@live.com
- 登录名:acqy;名称:Sunny Chen;密码:acqy@163.com
- 登录名:james;名称:james;密码:james@tinylibrary.com
额外说明
时间有限,本案例仅仅是一个基于Microsoft.NET技术的领域驱动设计实践案例,因此,如下内容没有包含在本案例中:
- 基于AOP和Policy Injection的技术实践。这包括:异常处理、数据验证与系统日志
- 基于用户/角色验证的图书维护页面
- ASP.NET MVC的高级应用
- WCF的异常捕获与显示
- 单元测试
- 其它的一些技术细节
有兴趣的朋友可以在本案例源代码的基础上进行扩充,以实现一套完整的图书馆管理应用。