店铺管理系统开发实践-业务逻辑与系统结构
1. 业务逻辑与系统结构
1.1. 业务逻辑
Store系统的业务逻辑主要包括如下几条:
- 基于多店铺使用。
- 库存=采购入库-采购退货-销售零售+销售退货
- 毛利润=(零售价格-采购进价)*零售数量
篇幅有限,我在这里只是简单的列举了便利店管理中的常见业务逻辑,复杂的更细不在这里一一展开了。
1.2. 系统结构
本案例Store系统采用领域驱动设计,共分为四层:表示层、应用服务层、领域层和基础结构层。
表示层由 Windows窗体和代码隐藏文件组成。Windows窗体只是提供用户操作及界面排版,而代码隐藏文件实现各种控件的事件处理。
应用服务层则是一个WCF Service,主要为了对外提供API以便外部系统可以通过提供的API与本系统进行交互及扩展。
领域层主要是对业务领域的实体属性进行定义;
基础结构层则为整个应用提供了Repository、ORM等的具体实现。
整个系统架构基本上可以以下图描述:
需要说明的是,在上图中的表示层(WinApp)依赖于仓储(Repository)的接口和领域层(Domain Model)。仓储(Repository)依赖于仓储(Domain Model)及仓储(Repository)的接口。Store系统采用依赖注入,将仓储(Repository)注射到表示层(WinApp)中,所以表示层(WinApp)根本不依赖于仓储的具体实现方式。
Visual Studio 2008解决方案结构
Store系统在Microsoft Visual Studio 2008的解决方案下包含六个项目:CnToSoft.WinApp.Store、CnToSoft.Domain.Store、CnToSoft.Services.Store、CnToSoft.Repositories.Store、CnToSoft.Repositories.Store.Test及CnToSoft.Library。如下所示:
- CnToSoft.WinApp.Store:提供用户界面与交互接口
- CnToSoft.Domain.Store:领域模型项目,其中包括了Store系统的领域模型与部分业务逻辑,也是本案例的核心所在。
- CnToSoft.Services.Store:暂时空着。
- CnToSoft.Repositories.Store:仓储的具体实现项目。本项目仅包含了针对Nhibernat的仓储实现。