项目简介
【在线书店】采用了面向领域驱动的经典分层架构,并且为了展示微软.NET技术在企业级应用开发中的应用, 它所使用的第三方组件也几乎都是微软提供的:Entity Framework、ASP.NET MVC、Unity IoC、Unity AOP、Enterprise Library Caching等(用于记录日志的log4net除外,但log4net本身也是众所周知的框架),接着我们来看看系统的各个组件是如何组织在一起并协同工作的。
所使用的技术
【在线书店】项目使用或涵盖了以下Microsoft技术:
Microsoft Entity Framework 6 Code First(包括Repository模式的实现、枚举类型的支持以及分页功能的实现)
ASP.NET MVC 4
WCF
Microsoft Patterns & Practices Unity Application Block
Microsoft Patterns & Practices Unity Policy Injection Extension
Microsoft Patterns & Practices Caching Application Block
Microsoft Appfabric Caching
使用AutoMapper实现DTO与领域对象映射
基于Unity的AOP拦截
使用log4net记录拦截的Exception详细信息
项目涵盖了以下模式和设计思想:
- 实体、值对象、领域服务
- 规约、仓储、仓储上下文
- 领域事件、事件聚合器、事件总线
- 服务定位器模式、工作单元模式、分离接口模式、数据传输对象模式、层超类型模式、传输对象组装器模式
本案例使用Visual Studio 2012开发。由于数据库采用了SQL Server Express LocalDB,因此,这部分组件也需要正确安装(如果是选择完整安装Visual Studio 2012,则可以忽略LocalDB的安装)。 另外,Online Store提供了两种事件总线(Event Bus)的实现:一种是面向事件聚合器(Event Aggregator)的,它将把所获得的事件通过聚合器派发到一个或多个事件处理器上;另一种是面向微软MSMQ的,它将把所获得的事件直接派发到MSMQ队列中,如果采用这种事件总线,则需要在机器上安装和配置MSMQ组件,并确保新建的队列是事务型队列。 此外,无需安装其它组件。 编译运行
如果不打算以Debug的方式启动本案例,那就需要首先展开OnlineStore.Application,任选其中一个.svc的服务文件(比如UserService.svc)然后点击右键选择View In Browser菜单项,以便启动服务端的ASP.NET Development Server;最后再直接启动ByteartRetail.Web项目 由于OnlineStore的数据库采用的是SQL Server 2012 Express LocalDB(默认实例),在程序连接LocalDB数据库时,LocalDB需要创建/初始化数据库实例,因此在首次启动时有可能会出现数据库连接超时的异常,如果碰到这类问题,则请稍等片刻然后再重试 登录账户
启动成功后,就可以单击页面右上角的“登录”链接进行账户登录。默认的登录账户有(用户名/密码):
admin/admin:以管理员角色登录,可以对站点进行管理 sales/sales:以销售人员角色登录,可以查看系统中订单信息并进行发货等操作 buyer/buyer:以采购人员角色登录,可以管理商品分类和商品信息 test/:普通用户角色,不能对系统进行任何管理操作 解决方案结构
OnlineStore.sln包含以下项目:
OnlineStore.Application:应用层
OnlineStore.Domain:领域层
OnlineStore.Repositories:仓储的具体实现(目前是基于Entity Framework 6.0的实现)
OnlineStore.Events:事件相关的事件处理器、事件总线和事件聚合器的定义
OnlineStore.Events.Handlers:具体的事件处理器定义
OnlineStore.Infrastructure:基础结构层
OnlineStore.ServiceContracts:基于WCF的服务契约
OnlineStore.Web:基于ASP.NET MVC的站点程序(表示层)
总结
代码图:
领域模型层类图:
仓储层类图: