AngularJSApworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例先河

时隔一年,继续我们的Apworks框架的同。在过渡下去的作品被,我用逐级朝我们介绍咋样当Visual
Studio中结合Apworks框架,使用ASP.NET Web
API和MVC来开面向经典分层架构的应用程序。在即时同讲话着,我们率先掌握一下旁架构的各类“层”,以及所波及的Visual
Studio项目,然后,我们于世界模型伊始,在Visual
Studio中最先我们的应用程序开发之同。

迈向领域建模的率先步

第一,在EasyMemo.Domain项目落得,单击鼠标右键,选拔【管理NuGet程序包】,在弹出的对话框的【搜索并】文本框中,输入关键字【Apworks】,然后以先后包列表中采取【Apworks】并单击【安装】按钮:

AngularJS 1

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

接下来,在EasyMemo.Domain上再次疯长一个AggregateRoot抽象类,使该促成Apworks中的IAggregateRoot接口:

using System;
using Apworks;

public abstract class AggregateRoot : IAggregateRoot
{
    public Guid ID { get; set; }
}

重新建一个Account类,使该继承AggregateRoot类,它意味着于EasyMemo整个应用程序中的“用户账户”的概念,为了将来底兑现更加方便迅速,Account类仅提供以下属性:

/// <summary>
/// 表示EasyMemo中“用户账户”的概念
/// </summary>
public class Account : AggregateRoot
{
    /// <summary>
    /// 获取或设置账户名。
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 获取或设置账户密码。
    /// </summary>
    public string Password { get; set; }

    /// <summary>
    /// 获取或设置邮箱地址。
    /// </summary>
    public string Email { get; set; }

    /// <summary>
    /// 获取或设置显示名称。
    /// </summary>
    public string DisplayName { get; set; }

    /// <summary>
    /// 获取或设置账户创建日期。
    /// </summary>
    public DateTime DateCreated { get; set; }

    /// <summary>
    /// 获取或设置最近一次登录日期。
    /// </summary>
    public DateTime? DateLastLogon { get; set; }
}

编译EasyMemo.Domain,编译通过,表示我们既正常安装并引用Apworks程序包了,可以延续指向世界模型举行规划了。在生同样讲着,我用介绍EasyMemo领域模型的统筹。

征:虽然现在微软就公告了Visual Studio
2015,但为看广大的平昔版用户,本文及后续作品都会师坐Visual Studio 2013
with Update 4作为开发工具举行介绍。另外,在某些场景被,会需要由此到Visual
Studio 2013 Ultimate之片机能,所以,假诺您所动的Visual
Studio不是Ultimate版本的话,您将不可以动手行某些案例,但您还是可以够由此阅读作品来获取所急需之知识。

履:起始搭建解决方案

开辟Visual Studio
2013,当然,目前大家还未需利用Ultimate版本,因为解决方案的搭建过程不相会提到其他和Visual
Studio 2013
Ultimate相关的特征。为了能被解决方案遭各类型的协会更客观,指出首先以Visual
Studio 2013惨遭新盘一个空白的解决方案,.NET
Framework版本要捎4.5.1,因为从此使因而底Apworks框架是依照4.5.1的:

AngularJS 2

单击“确定”按钮后,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:

    AngularJS 3

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

    AngularJS 4

创好后,EasyMemo的化解方案被应当包含如下5单系列,每个序列中都只有包含了Visual
Studio项目模板自带的默认类型:

AngularJS 5

 

以能当编译整个解决方案的当儿,让Visual
Studio自动下载每个项目所依赖之NuGet包,强烈提议在EasyMemo解决方案上单击鼠标右键,拔取【启用NuGet程序包还原】选项:

AngularJS 6

 

前几日,大家即使于世界模型的规划起始,一步步地就所有应用程序的开销。

理论:分层架构和技能选型

以本人原先的博客中,少不了对分架构的介绍,尤其是以介绍世界让设计之时刻,还介绍了和的异构的因事件之命令查询职责分开(CQRS)架构。本案例以经典分层架构举行开。在这多少个,我道如故暴发必要把架构图再略打一下,并且标注大家将以的微软技术。这样做一方面可被我们精通及大家运用了怎么着技术,另一方面,在延续之牵线着,也可为我们看,我们当前凡是以谈论整个架构的哪个部分。请参见下图:

AngularJS 7

足看,在全案例的介绍过程被,大家将相会利用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项目吧。

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的源代码:

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

案例:个人就是签运

自我又平等潮试图打一个运用案例初叶向我们介绍任何工作的源流,希望可以为大家看精通并打听及问题之本色。我记念此前为发出成百上千稿子我吧是举了广大例证,有的小说将例子讲解结束了,有的又是刹车,虎头蛇尾。好吧,不管咋样,没有案例就是不可以一步步地将问题说清楚。毕竟理论为是得和实践互相结合的。

此案例是一个私有就签下。刚起先之时候,我管这有点题目叫做《案例:一个简单易行的个人就签运》,思索后以“一个简约的”七只字去丢,我眷恋,简单的事物不是豪门想只要的,简单的物我们还汇合召开,听起如如故无欲另框架和工具的扶植,就可知简简单单地拿题目化解掉。我眷恋向大家介绍的是一个完好的商号级应用,它不光该实现基本的小圈子逻辑,更应该包含诸如安全、性能相当各种方面的情节,所以,综合起来,这工作虽大概不了。

识自身之圈内朋友应该还了然自己要好支付了一个基于云的私家笔记系统Cloud
Notes
,也有一些章介绍Cloud
Notes的技巧与开进程。不错,现在自打算动用的此案例,它的作业背景以及个人笔记系统很像,但为介绍技术有,我谋面叫这工作转移得尤其简单,也会合介绍一些落实RESTful服务之特等实践,因而,该案例会在技术架构层面与Cloud
Notes类似,但也会晤聊细节上的歧异。显而易见,尽量以简单之花样来讲明问题。

该案例涉及的片段包括用户以及权杖,从业务上看,每个用户可以管理自己之便签,内容即如此多。太复杂了会师叫人口看头晕目眩,也会下降本文的可读性。OK,让咱深受此案例起个名,就被EasyMemo吧。

相关文章