门源县住房和城乡建设局网站,做网站企业经营范围,淄博网站建设服务,什么叫网站后台不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架#xff0c;旨在为分布式企业系统软件开发提供面向领域驱动#xff08;DDD#xff09;的框架级别的解决方案#xff0c;并对多种系统架构风格提供支持。这个框架的开发和维护我坚持…不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架旨在为分布式企业系统软件开发提供面向领域驱动DDD的框架级别的解决方案并对多种系统架构风格提供支持。这个框架的开发和维护我坚持了很久一直到2015年我都一直在不停地重构这个项目。目前这个项目在Github上也得到了将近260的推荐数很多对技术感兴趣的朋友也一直与我保持着联系和交流甚至还有爱好者自发组成了技术讨论群专门讨论分享Apworks框架。
然而随着软件开发技术和.NET的发展这个框架的设计和研发技术都逐渐过时重构难度逐渐加大很多由其本身支持的技术比如MSMQ、NHibernate也都逐渐淡出人们的视线相比之下云计算、微服务、大数据、跨平台等相关技术越来越多地引起了业界的关注成功的案例也越来越多。如何基于云平台PaaS IaaS快速搭建高效、经济、稳定、安全的软件系统架构成为了最近两年的热门话题。微软也顺应这样的潮流做出了很多的改变就在短短的一到两年时间引领了.NET的跨平台开源了诸多著名的项目比如.NET、Core CLR、Roslyn、ASP.NET、Entity Framework、Powershell等等并且开始接受并拥抱非Windows的操作系统比如Visual Studio跨平台、Powershell跨平台、SQL Server跨平台、Visual C支持多种编译器等等。很明显原有的Apworks已经不再具备跨平台、云友好、开发迅速的特质为此我下定决心重写了Apworks。
全新的Apworks Core应用程序开发框架
新的Apworks Core也是开源项目该项目依旧基于Apache 2.0许可协议项目地址是https://github.com/daxnet/apworks-core。目前仍然还在继续开发阶段仅实现了原有DDD中的基本概念实体、聚合、实体键、仓储等并针对内存并发字典Concurrent Dictionary、MongoDB以及Entity Framework Core完成了三种不同的仓储实现整个框架完全由.NET Core实现目前提供net461和Net Standard 1.6两种编译因此可以使用在Windows的经典.NET Framework下也可以使用在Linux的.NET Core中。不仅如此针对ASP.NET Core Web APIApworks提供了相应的整合与扩展使得数据服务的开发变得非常简单方便这也是本文准备介绍的内容相信在阅读本文之后你将更多地了解到Apworks Core的开放性和扩展性并能体会到在.NET应用程序的开发生态圈中Apworks Core将会给你带来更多的帮助。
演练使用Apworks Core快速开发数据服务
在开始我们的Apworks Core开发演练之前请先完成以下准备工作
安装Visual Studio 2017确保.NET Core和ASP.NET Core的开发功能已经正确安装将https://www.myget.org/F/daxnet-apworks-pre/api/v3/index.json以及https://www.myget.org/F/daxnet-utils/api/v3/index.json两个package source添加到NuGet的package source中 准备一个MongoDB的数据库服务器建议直接下载Windows版本的搭建在本地机器也可以在Linux下直接运行mongo的Docker容器省去了安装MongoDB的步骤如果希望能一起尝试Visual Studio 2017的Docker功能还需要确保安装最新版本的Windows以及Docker for Windows。当然完成本文的演练并不需要Docker
开发步骤
首先新建一个ASP.NET Core的应用程序名为CustomerService通过Manage NuGet Packages添加对Apworks.Repositories.MongoDB以及Apworks.Integration.AspNetCore的引用。添加引用的时候注意选择https://www.myget.org/F/daxnet-apworks-pre/api/v3/index.json这个package source 在CustomerService下新建一个Models目录添加两个类名称分别为Address和Customer代码如下 public class Address { public string Country { get ; set ; } public string State { get ; set ; } public string City { get ; set ; } public string Street { get ; set ; } public string ZipCode { get ; set ; } } public class Customer : IAggregateRootGuid { public Guid Id { get ; set ; } public string Name { get ; set ; } public string Email { get ; set ; } public Address ContactAddress { get ; set ; } } 在Controllers子目录下新建一个Controller取名为CustomersController代码如下 public class CustomersController : DataServiceControllerGuid, Customer { public CustomersController(IRepositoryContext repositoryContext) : base (repositoryContext) { } } 打开Startup.cs文件在ConfigureServices方法中加入以下代码 public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); services.AddApworks() .WithDataServiceSupport( new DataServiceConfigurationOptions ( new MongoRepositoryContext ( new MongoRepositorySettings( localhost , customer-service )))) .Configure(); } 同样在Startup.cs文件中在Configure方法中加入以下代码 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection( Logging )); loggerFactory.AddDebug(); app.EnrichDataServiceExceptionResponse(); app.UseMvc(); } OK, you’re all set! 完成之后解决方案资源管理器中的项目结构如下增加了一个Models目录以及一个CustomersController
编译运行
直接按下Ctrl F5运行站点站点起来后你会发现浏览器打开的内容跟标准的新建的ASP.NET Core Web API项目无异显示的是由ValuesController的GET方法返回的两个字符串。不用着急打开Fiddler我们简单测试一下刚刚新建的Customer数据服务注意替换一下URL我本地服务运行在2238端口上
POST http://localhost:2238/api/customers POST操作成功返回HTTP 201同时在Response Body中返回了新建的对象Id。 GET http://localhost:2238/api/customers
限于篇幅此处就不针对所有基本的HTTP操作一一进行测试了。Apworks Data Service默认支持以下HTTP方法当然你可以随意扩展
GET获取所有的对象默认支持服务端分页每页15条记录可以通过http://localhost:2238/api/customers?pageaaasizebbb这样的格式来指定每页大小以及需要获取的页码GET {id}http://localhost:2238/api/customers/{id}获取Id值为{id}的对象POST {id}替换Id值为{id}的对象替换成功则返回HTTP 204No ContentPATCH {id}更新id值为{id}的对象Request Body需要符合Microsoft ASP.NET Json Patch的规范。更新成功返回HTTP 204No ContentDELETE {id}删除id值为{id}的对象。删除成功返回HTTP 204No Content
几个亮点
开发和配置过程及其简单如上所述五个步骤完成一个数据对象的数据服务开发。流畅接口Fluent API配置方式使得数据服务的开发过程与已有ASP.NET Core Web API的开发过程具有相同的开发者体验HTTP GET调用默认支持服务端分页分页链接会通过HAL标记体现在返回结果中HTTP GET返回直接支持Hypertext Application LanguageHAL官方网站http://stateless.co/hal_specification.html返回Content-Type为application/haljson。它是通过我的另一个开源项目https://github.com/daxnet/hal 实现的HAL项目在.NET Core下完整、全面地实现了HAL规范并且通过流畅接口Fluent API的方式提供了较好的开发者体验。通过Apworks Core开发数据服务时开发者可以通过设定DataServiceConfigurationOptions参数选择是否需要HAL支持还可以扩展HalBuildConfiguration类型以实现HAL返回结果的自定义仓储实现可以选择使用In-Memory Concurrent Dictionary、MongoDB以及Entity Framework Core整个技术栈完全跨平台。如果使用Entity Framework Core目前EF Core对SQL Server、PostgreSQL以及SQLite的支持都不错对于Oracle等也有相应的Provider支持因此可以选择各种不同的关系型数据库来基于Apworks Core快速实现数据服务加入EnrichDataServiceExceptionResponse方法可以使得当错误发生时数据服务的返回结果将包含更为准确的错误代码和错误信息
对于三种目前支持的仓储的使用方式、HAL返回结果自定义以及数据服务的扩展这些内容我今后再慢慢介绍吧这里就不多说了。
总结
现在Apworks Core仅仅是刚刚开始接下来还有很长的路要走单从数据服务和ASP.NET Core的整合这部分还需要更加丰富的功能比如API的帮助页面、查询条件和排序条件的指定等等。查询条件的支持我打算使用我迁移的一个开源的.NET语法分析框架Irony项目来完成。之后我还是会像往常一样基于Apworks Core实现一个完整的应用案例来演示Apworks Core各方面的功能。
另一方面Apworks Core的项目分支策略和持续集成也是可以拿来分享的。我没有开放Apworks Core持续集成系统但任何人都可以通过项目的Github主页了解到最新构建的状态也可以看到最新preview和release版本的package source。Apworks Core同时在Windows Server和Ubuntu Linux下完成编译编译完全采用Powershell脚本完成因此对于Linux系统需要首先安装Powershell。这些内容我也会争取抽空跟大家做介绍。
最后还是那句话大家多多交流多提宝贵意见吧。我争取做得更好。
原文地址http://www.cnblogs.com/daxnet/p/6661369.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注