架构系列:ASP.NET 项目结构搭建

我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案。主要内容:
(1)搭建应用逻辑和领域逻辑都简单的单项目

(2)为应用逻辑复杂的单项目添加应用服务

(3)为领域逻辑复杂的单项目添加领域行为

(4)Application膨胀时,分离Application项目

(5)分离Infrastructure项目

(6)添加Web服务支持

(7)Web服务器负载均衡的支持

(8)其他方面的扩展支持

1.搭建应用逻辑和领域逻辑都简单的单项目

业务逻辑简单,主要的用例和CURD几乎一一对应,没有区分应用逻辑和领域逻辑的必要

(1)搭建单项目解决方案:Example,项目类型为ASP.NET MVC

(2)添加Application文件夹,添加IRepository<T>接口。

(3)在Application文件夹中添加Domain文件夹,使用POCO作为实体。

(3)添加Infrastructure文件夹,添加Dependency文件夹,添加IContainer和IoCContainer实现,添加Repository文件夹和EfRepository<T>实现。

(4)添加Web文件夹,添加IoCControllerFactory实现,在Controller中通过构造注入IRespository<T>。

2.为应用逻辑复杂的单项目添加应用服务

业务逻辑复杂的原因更多体现在流程控制上而非领域逻辑上,因此我们对上文的项目进行改造。

(1)Application文件夹中添加Service文件夹,通过ApplicationService接口来抽象应用逻辑,在实现ApplicationService接口时通过构造注入IRepository<T>。

(2)在Controller不在直接依赖IRepository,在Controller中通过构造注入IApplicationService。

3.为领域逻辑复杂的单项目添加领域行为

领域逻辑复杂表现在过多的直接通过属性进行实体状态判断并多次赋值,一般情况下这些代码可以通过重构添加到实体。

(1)从ApplicationService中分离出与流程控制无关的代码。

(2)对实体类添加行为,实体类的public方法的定义分离到实体接口中,其他方法为私有方法。

此时的项目结构如图所示:

4.Application膨胀时,分离Application项目

Application是项目的核心,本身都是业务逻辑相关的代码,即使对其他类库有依赖也可以通过接口隔离方式消除,因此在Application代码膨胀时,无论是应用逻辑和领域逻辑哪种原因,都应该分离Application项目,更重要的意义在于我们需要对Application项目进行单元测试。事实上复杂一些的项目,我们一开始构建的就是Application项目及其单元测试。

(1)在解决方案中添加Example.Application项目。

(2)将Example项目中的Application文件夹下的全部文件迁移到Example.Application项目中,这样无需修改命名空间。

(3)修改Example项目添加Example.Application项目的引用。

此时解决方案的结构如图所示:

5.分离Infrastructure项目

分离Application项目后,由于Infrastructure只单向依赖Application中的接口,因此分离Infrastructure项目顺理成章。如果是多客户端项目,在分离Infrastructure后可以考虑再从Web项目中分离出单独表现逻辑层Example.WebBase。

(1)在解决方案中添加Example.Infrastructure项目。

(2)将Example项目中的Infrastructure文件夹下的全部文件迁移到Example.Infrastructure项目中,同样无需修改命名空间。

(3)修改项目的引用,添加Example对Example.Infrastructure项目的引用,添加Example.Infrastructure对Example.Application的引用。

此时解决方案结构如图所示:

6.添加Web服务支持

由于Web项目只依赖ApplicationService的接口,这是应有之意。我们添加服务层时只需要提供Web服务类型的IApplicationService接口实现即可。

(1)添加Example.Application.WebApi项目,引用Example.Application项目,封装ApplicationService应用服务。

(2)添加Example.WebApiApplicationService项目,引用Example.Application和Example.Application.WebApi项目,实现IApplicationService接口的WebApi版本WebApiApplicationService。

(3)修改Example项目的依赖注入配置,将IApplicationService的实现配置为WebApiApplicationService。

(4)还要记得将Web项目中配置的ApplicationService的第三方依赖接口的依赖注入配置转移到Web服务项目中。

此时解决方案如图所示:

7.Web服务器负载均衡的支持

添加Web服务器的负载均衡主要解决认证token的问题和Session的问题。

(1)ASP.NET的Forms认证可以通过修改Web.config支持生成同样的用户token。

(2)ASP.NET的Session可以通过自定义SessionStateStoreProviderBase实现分离Session到Session状态服务器或集群。

8.其他方面的扩展支持

无论是邮件服务、缓存还是数据库,Application都是通过接口隔离了具体的实现,因此我们可以按需添加ApplicationService中定义的IEmail、ICache、ILogger等的其他实现,再修改依赖注入的配置即可。如果没有采用Web服务,修改Web项目,否则修改Web服务项目的依赖注入配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AspMvc是一个快速、简单的面向对象的轻量级Asp开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。 借鉴了国内外很多优秀的(Java Ssh/Net NetMvc3.5 ThinkPhp)框架和模式,使用面向对象的开发结构和MVC模式,RoR的ORM映射,封装了CURD和丰富的工具集等,在缓存机制、认证机制和扩展性方面均有独特的表现。 使用AspMvc,你可以更方便和快捷的开发和部署应用,任何Asp应用开发都可以从AspMvc的简单、兼容和快速的特性中受益。简洁、快速和实用是AspMvc发展秉承的宗旨,为此AspMvc会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应用开发的最佳实践. 目录结构 AspMvc的目录结构非常清晰和容易部署。大致的目录结构如下,以项目为基础进行部署。 ┎━网站根目录 ┃┝ Admin 管理员文件夹 ┃┝ Com 商家文件夹 ┃┝ User 用户文件夹 ┃┝ DataBase 数据库文件夹 ┃┝ Model Model层文件夹 ┝ DataBaseOBject 数据库对像文件夹 ┗ DataBase 跨数据库兼容文件夹 ┃┝ Control 控制层文件夹 ┃┝ Resources 网站资源文件夹 ┝ Code 验证码文件夹 ┝ Css 样式文件夹 ┝ DataTip 时间控制 ┝ Editor Web编辑器 ┝ Images 图片文件夹 ┝ Js 脚本文件夹 ┝ Md5 Md5文件夹 ┝ PublicFile 网站公用文件夹 ┗ Swf 动画文件夹 ┃ ┝ Tool 工具集 ┝ AspValidate 服务端验证 ┝ Cache 缓存 ┝ Config 配置 ┝ Creater 代码生成器 ┝ Form 常用表单生成器 ┝ Language 多语言生成器 ┝ Log 日志工具 ┝ Mail Jmail邮件调用 ┝ Page 分页 ┝ Pay 第三方支付 ┝ PoJo 数据库映射存放文件 ┝ Rbac 权限控制器 ┝ Session 会话控制 ┝ Sn 序号生成器 ┗ Upload 无组件上传 ┃ ┝ Upload 文件上传文件夹 ┗ ┗ Index.asp 项目开发指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值