千家信息网

如何使用Visual Studio开发面向经典分层架构的应用程序

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章将为大家详细讲解有关如何使用Visual Studio开发面向经典分层架构的应用程序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。时隔一年,继
千家信息网最后更新 2025年12月03日如何使用Visual Studio开发面向经典分层架构的应用程序

这篇文章将为大家详细讲解有关如何使用Visual Studio开发面向经典分层架构的应用程序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

时隔一年,继续我们的Apworks框架之旅。在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架构的应用程序。在这一讲中,我们首先了解一下分层架构的各个"层",以及所涉及的Visual Studio项目,然后,我们从领域模型开始,在Visual Studio中开始我们的应用程序开发之旅。

说明:虽然现在微软已经发布了Visual Studio 2015,但为了照顾广大的老版本用户,下面以Visual Studio 2013 with Update 4作为开发工具进行介绍。此外,在某些场景中,会需要用到Visual Studio 2013 Ultimate的部分功能。

Apworks的近况

已经有一段时间没有向大家介绍Apworks框架的相关内容了,在最近的半年中,我对Apworks做了一些小的重构,具体内容如下:

  1. 将支持的.NET Framework升级到4.5.1

  2. 开始在IEntity接口上支持泛型ID,这也就意味着在经典分层架构的Apworks应用中,实体键可以开始支持多种原始数据类型了(组合键目前仍不支持),比如整形。这一改动不会对已有的框架产生任何影响,默认的实体键类型仍然是Guid

  3. 开始在Unit Of Work的具体实现,也就是RepositoryContext上支持异步Commit的操作:可以使用CommitAsync来进行异步提交。后续版本会支持更多的异步方法

  4. 更新所依赖的第三方框架到最新版本(当然,在写这篇文章时,这些第三方框架或许又有了版本更新)

  5. 改善了NHibernate Repository的实现

  6. 性能优化

您可以直接点击 https://github.com/daxnet/Apworks 进入Apworks框架的开源主页,也可以使用以下命令获取Apworks的源代码:

?

1git clone https://github.com/daxnet/Apworks.git

案例:个人便签应用

我又一次试图从一个应用案例开始向大家介绍整个事情的来龙去脉,希望能够让大家看清楚并了解到问题的本质。我记得之前也有很多文章我也是举了不少例子,有的文章把例子讲解完了,有的又是半途而废,虎头蛇尾。好吧,不管怎么样,没有案例就无法一步步地将问题解释清楚。毕竟理论也是需要跟实践相结合的。

这个案例是一个个人便签应用。刚开始的时候,我把这个小标题称为《案例:一个简单的个人便签应用》,思索之后将"一个简单的"五个字去掉,我想,简单的东西不是大家想要的,简单的东西大家都会做,听起来似乎甚至不需要任何框架和工具的辅助,就能简简单单地把问题解决掉。我想向大家介绍的是一个完整的企业级应用,它不仅应该实现基本的领域逻辑,更应该包含诸如安全、性能等各个方面的内容,所以,综合起来,这事情就简单不了。

认识我的圈内朋友应该都知道我自己开发了一个基于云的个人笔记系统Cloud Notes,也有一些文章介绍Cloud Notes的技术和开发过程。不错,现在我打算使用的这个案例,它的业务背景跟个人笔记系统很像,但为了介绍技术部分,我会让其业务变得更为简单,也会介绍一些实现RESTful服务的最佳实践,因此,该案例会在技术架构层面与Cloud Notes类似,但也会有些细节上的差异。总而言之,尽量以简洁的形式来说明问题。

本案例涉及的部分包括用户和权限,从业务上看,每个用户可以管理自己的便签,内容就这么多。太复杂了会让人觉得头晕目眩,也会降低本文的可读性。OK,让我们给这个案例起个名字,就叫EasyMemo吧。

理论:分层架构与技术选型

在我以前的博客中,少不了对分层架构的介绍,尤其是在介绍领域驱动设计的时候,还介绍了与之异构的基于事件的命令查询职责分离(CQRS)架构。本案例采用经典分层架构进行开发。在此,我觉得还是有必要把架构图再简单画一下,并且标注我们将要使用的微软技术。这样做一方面可以让大家了解到我们使用了哪些技术,另一方面,在后续的介绍中,也可以让大家看到,我们目前是在讨论整个架构的哪个部分。请参见下图:

可以看到,在整个案例的介绍过程中,我们将会使用Entity Framework 6作为数据存储ORM,后台数据库选用Microsoft SQL Server,领域模型层适配Apworks框架,应用层任务协调使用Apworks框架,而通过ASP.NET Web API 2向外界提供RESTful服务。表现层采用ASP.NET MVC 4加上AngularJS实现,当然会用到Twitter Bootstrap的一些特性,毕竟在标准的ASP.NET MVC模板中,默认安装了Bootstrap的包。

基本架构就这样,接下来,让我们一起动手开始在Visual Studio 2013中搭建我们的EasyMemo项目吧。

实践:开始搭建解决方案

打开Visual Studio 2013,当然,目前我们还不需要使用Ultimate版本,因为解决方案的搭建过程不会涉及任何与Visual Studio 2013 Ultimate相关的特性。为了能让解决方案中各项目的组织更为合理,建议首先在Visual Studio 2013中新建一个空白的解决方案,.NET Framework版本请选择4.5.1,因为今后要用的Apworks框架是基于4.5.1的:

单击"确定"按钮后,Visual Studio就会在【解决方案资源管理器】中显示一个空白的解决方案。接下来,我们就相继往该解决方案中创建以下新项目:

  • EasyMemo.Common:提供包括公共类型以及基础结构层的那些可以适用于其它各层的类型和组件

  • EasyMemo.Domain:包含领域模型的类型,以及这些类型的扩展方法

  • EasyMemo.Repositories:仓储实现库,提供与领域模型对象仓储相关的类型定义以及实现

  • EasyMemo.Services:一个ASP.NET Web API应用程序,用以向外界提供RESTful服务。在【新建项目】对话中选择【Visual C# -> Web】分类,在该分类中选择【ASP.NET Web应用程序】,在弹出的【新建ASP.NET项目】对话框中,选择【Empty】,在【为以下对象添加文件夹和核心引用】分组中,选择Web API:


  • EasyMemo.Web:EasyMemo的主页网站,向用户提供操作界面,接收用户请求,并将请求转发到RESTful服务。在【新建项目】对话中选择【Visual C# -> Web】分类,在该分类中选择【ASP.NET Web应用程序】,在弹出的【新建ASP.NET项目】对话框中,选择【MVC】:


创建完成后,EasyMemo的解决方案中应该包含如下5个项目,每个项目中都只包含了Visual Studio项目模板自带的默认类型:

为了能够在编译整个解决方案的时候,让Visual Studio自动下载每个项目所依赖的NuGet包,强烈建议在EasyMemo解决方案上单击鼠标右键,选择【启用NuGet程序包还原】选项:

现在,我们就从领域模型的设计开始,一步步地完成整个应用程序的开发。

迈向领域建模的第一步

首先,在EasyMemo.Domain项目上,单击鼠标右键,选择【管理NuGet程序包】,在弹出的对话框的【搜索联机】文本框中,输入关键字【Apworks】,然后在程序包列表中选择【Apworks】并单击【安装】按钮:

在安装时会提示许可协议对话框,单击【我接受】按钮即可。

然后,在EasyMemo.Domain上再新增一个AggregateRoot抽象类,使其实现Apworks中的IAggregateRoot接口:

?

1234567using System; using Apworks; public abstract class AggregateRoot : IAggregateRoot { public Guid ID { get ; set ; } }

再新建一个Account类,使其继承AggregateRoot类,它表示在EasyMemo整个应用程序中的"用户账户"的概念,为了今后的实现更为方便快捷,Account类仅提供以下属性:

?

1234567891011121314151617181920212223242526272829303132333435/// /// 表示EasyMemo中"用户账户"的概念 /// public class Account : AggregateRoot { /// /// 获取或设置账户名。 /// public string Name { get ; set ; } /// /// 获取或设置账户密码。 /// public string Password { get ; set ; } /// /// 获取或设置邮箱地址。 /// public string Email { get ; set ; } /// /// 获取或设置显示名称。 /// public string DisplayName { get ; set ; } /// /// 获取或设置账户创建日期。 /// public DateTime DateCreated { get ; set ; } /// /// 获取或设置最近一次登录日期。 /// public DateTime? DateLastLogon { get ; set ; } }

编译EasyMemo.Domain,编译通过,表示我们已经正常安装并引用Apworks程序包了,可以继续对领域模型进行设计了。

关于如何使用Visual Studio开发面向经典分层架构的应用程序就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

应用 架构 程序 框架 项目 选择 方案 解决方案 应用程序 开发 领域 案例 类型 用户 内容 技术 文章 模型 版本 对话 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 益阳哪儿软件开发学校口碑好 网络安全系统基础建设采购 微擎数据库密码修改 不能删改的数据库 软件开发营销 互联网科技信息技术众筹平台 中国网络技术怎么样 我的网络技术老师作文 基础数据库设计实验报告 软件开发费用怎么记分录 郑数网络技术有限公司 bios服务器测试是干什么的 华三网络技术有限公司 数据库需求分析是什么东西 从数据库下载数据卖给别人违法吗 网络安全工程师免费课程 数据库查询优化的一般准则是什么 计算机网络技术大纲 虎丘区创新软件开发优化 网络安全提升工作情况汇报 网络工程师会软件开发吗 数据库表 密码设置类型 网络安全清理排查表 小学生网络安全知识答题答案 网络安全信息安全事件 成都市网络安全与信息化委员会 clash 如何设置代理服务器 软件开发经理 面试技巧 北邮移动的连接服务器 长沙应用软件开发一般要多少钱
0