摘要: Apworks框架实战(一):Apworks到底是什么? Apworks框架实战(二):开始使用 Apworks框架实战(三):单元测试与持续集成 Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始 Apworks框架实战(五):EasyMemo的领域模型设计 Apworks框架实战(...阅读全文
posted @ 2015-10-03 21:08 dax.net 阅读(6798) 评论(11) 编辑
摘要: 为了便于阅读,我将该系列文章汇总于此,欢迎广大软件架构设计和领域驱动设计(DDD)的爱好者翻阅。此处的文章排序是根据整个项目的架构分层来的:首先是与基础结构层(Infrastructure)相关的话题,然后是领域层(Domain),再是应用层(Application)和表示层(Presentation)。因此不一定会按文章发表的时间顺序而来。 深度剖析Byteart Retail案例:前言...阅读全文
posted @ 2013-01-05 15:49 dax.net 阅读(8600) 评论(32) 编辑
摘要: 今天抽空将我写的与领域驱动设计有关的系列文章汇总于此,便于大家查看。根据撰写的进度,本列表会不定期更新,敬请关注! Entity Framework之领域驱动设计实践 EntityFramework之领域驱动设计实践 - 前言 EntityFramework之领域驱动设计实践 (一):从DataTable到EntityObject EntityFramework之领域驱动设计实践 (二):分...阅读全文
posted @ 2010-11-02 17:39 dax.net 阅读(55194) 评论(73) 编辑
摘要: 1月20日正值大寒节气,在微软MVP朱兴亮的组织牵头下,上海MVP自发举办了题为《跟社区专家一起聊聊混合云、领域驱动、区块链和数字营销》的技术交流会。四名来自上海的MVP分别在自己擅长的技术领域做了主题演讲,并现场回答了与会者提出的问题。虽然天气阴冷细雨绵绵,但这并没有阻挡大家利用周末休息时间远道而来,对我们的活动支持捧场的热情,现场基本座无虚席。在MVP进行相关的技术分享和介绍之后,大家仍然觉得...阅读全文
posted @ 2018-03-25 20:47 dax.net 阅读(223) 评论(0) 编辑
摘要: 2018年3月24日下午,几位上海MVP自发组织了一次线下的技术交流会,主要由MVP胡浩牵头,我(陈晴阳)、刘鑫、朱兴亮和胡浩各自做了一次主题演讲,具体主题是: 陈晴阳:《这还是我认识的Visual C#吗?》:主要介绍了C# 7.0、7.1和7.2的新特性,以及如何在开发环境与持续集成环境中使用这阅读全文
posted @ 2018-03-25 15:24 dax.net 阅读(270) 评论(5) 编辑
摘要: 去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private protected访问修饰符(Access Modifier)。至此,C#语言的访问修饰符有以下几种: p阅读全文
posted @ 2018-03-19 21:07 dax.net 阅读(1009) 评论(2) 编辑
摘要: 在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅、通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件总线的实现。接下来对于事件驱动型架构的讨论,就需要结合一个实际的架构案例来进行分析。在领域驱动设计的讨论范畴,CQRS架构本身就是事件驱动的,因此,我打算首先介绍一下CQRS架构下相关部分的实现,然后再继续讨论事件驱动型架构实现的具体问题。当然,C...阅读全文
posted @ 2018-03-18 09:45 dax.net 阅读(1010) 评论(7) 编辑
摘要: 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程。虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没能解决我的问题,有些点写的不是特别详细,让人看完之后感觉还是云里雾里。最后,我决定重新复习一下这个经典而古老的问题,并将所得总结于此,然后会有一个实例对这个问题进行演示,希望能够帮助到大家。.NET下Assembly的加载过程.NET下...阅读全文
posted @ 2018-03-07 20:50 dax.net 阅读(3580) 评论(18) 编辑
摘要: 在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容。下面的类图描述了我们已经实现的组件及其之间的关系,貌似系统已经变得越来越复杂了。其中绿色的部分就是上文中新实现的部分,包括一个简单的Event Store,一个事件处理器执行上下文的接口,以及一个基于ASP.NET Core依赖注入框架的执行上下文的实现。接下来,我们打算淘汰Pass...阅读全文
posted @ 2018-02-04 09:46 dax.net 阅读(5715) 评论(22) 编辑
摘要: 在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发、订阅和处理的流程。这种实现太简单了,百十行代码就展示了一个基本工作原理。然而,要将这样的解决方案运用到实际生产环境,还有很长的路要走。今天,我们就研究一下在事件处理器中,对象生命周期的管理问题。事实上,不仅仅是在事件处理器中,我们需要关心对象的生命周期,在整个ASP.NET Core Web API的应用程序里,我们需要...阅读全文
posted @ 2018-01-11 20:33 dax.net 阅读(3462) 评论(16) 编辑
摘要: 很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构。这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地订阅来自于某个渠道的事件消息,并对接收到的消息进行处理,于此同时,它还能够向该渠道发送事件消息,以便订阅该事件消息的消费者能够对消息数据做进一步处理。让我们回顾一下微服务之间通信的几种方式,分为同步和...阅读全文
posted @ 2017-12-21 22:10 dax.net 阅读(6030) 评论(21) 编辑
摘要: HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务端接口的耦合度。很多当今流行的RESTful API开发框架,包括Spring REST,也都默认支阅读全文
posted @ 2017-11-14 22:56 dax.net 阅读(1612) 评论(3) 编辑
摘要: 最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。在文本发布和处理微服务中,我打算使用微软的SQL Server for Linux来做演示,于是也就在自己的docker-compose中加入了MS SQL Server的服务。其实在Docker中运行SQL Server是非常容阅读全文
posted @ 2017-11-09 22:10 dax.net 阅读(1788) 评论(3) 编辑
摘要: 最近一直在开发Apworks框架的案例代码,同时也在一起修复Apworks框架中的Bug和一些设计上的不足。遇到的一个普遍问题是,代码的调试过程需要依赖很多外部系统,比如MongoDB、PostgreSQL、RabbitMQ等。当然可以在本机逐一安装这些服务,然后对服务进行配置,使其满足自己开发调试阅读全文
posted @ 2017-10-23 22:28 dax.net 阅读(22791) 评论(8) 编辑
摘要: 《在ASP.NET Core中使用Apworks快速开发数据服务》一文中,我介绍了如何使用Apworks框架的数据服务来快速构建用于查询和管理数据模型的RESTful API,通过该文的介绍,你会看到,使用Apworks框架开发数据服务是何等简单快捷,提供的功能也非常多,比如对Hypermedia的支持,以及提供丰富的异常信息和调用栈信息。另外,Apworks数据服务可以支持各种类型的仓储(Rep...阅读全文
posted @ 2017-07-12 22:00 dax.net 阅读(1389) 评论(2) 编辑
摘要: 在之前《在ASP.NET Core中使用Apworks快速开发数据服务》一文的评论部分,.NET大神张善友为我提了个建议,可以使用Compile As a Service的Roslyn为语法解析提供支持。在此非常感激友哥给我的建议,也让我了解了一些Roslyn的知识。使用Roslyn的一个很大的好处是,框架无需依赖第三方的组件,并且Roslyn也是.NET Foundation的一个开源项目,为....阅读全文
posted @ 2017-06-06 20:21 dax.net 阅读(2814) 评论(14) 编辑
摘要: 最近我为我自己的应用开发框架Apworks设计了一套案例应用程序,并以Apache 2.0开源,开源地址是:https://github.com/daxnet/apworks-examples,目的是为了让大家更为方便地学习和使用.NET Core、最新的前端开发框架Angular,以及Apworks开发框架。今后会有越来越多的案例代码加入到这个系列中,以更好地展示Apworks框架在基于.NET...阅读全文
posted @ 2017-05-07 20:06 dax.net 阅读(4473) 评论(6) 编辑
摘要: HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单、统一的形式,在API中引入超链接特性,使得API的可发现性(discoverable)更强,并具有自描述的特点。使用了HAL的API会更容易地被第三方开源库所调用,并且使用起来也很方便,开发者可以像处理普通JSON数据那样去处理API数据。有关HAL的更多信息,可以参考官方网站:ht...阅读全文
posted @ 2017-04-12 20:15 dax.net 阅读(1138) 评论(2) 编辑
摘要: 不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架,旨在为分布式企业系统软件开发提供面向领域驱动(DDD)的框架级别的解决方案,并对多种系统架构风格提供支持。这个框架的开发和维护我坚持了很久,一直到2015年,我都一直在不停地重构这个项目。目前这个项目在Github上也得到了将近260的推荐数,很多对技术感兴趣的朋友也一直与我保持着联系和交流,甚至还有...阅读全文
posted @ 2017-04-03 09:56 dax.net 阅读(3440) 评论(10) 编辑
摘要: 3月7日,微软发布了Visual Studio 2017 RTM,与之一起发布的还有.NET Core Runtime 1.1.0以及.NET Core SDK 1.0.0,尽管这些并不是最新版,但也已经从preview版本升级到了正式版。所以,在安装Visual Studio 2017时如果启用了.NET Core开发的相关功能,那么在安装完成后,你可以在命令行直接执行dotnet.exe,此时...阅读全文
posted @ 2017-03-18 19:15 dax.net 阅读(1552) 评论(2) 编辑
摘要: HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单、统一的形式,在API中引入超链接特性,使得API的可发现性(discoverable)更强,并具有自描述的特点。使用了HAL的API会更容易地被第三方开源库所调用,并且使用起来也很方便,开发者可以像处理普通JSON数据那样去处理API数据。有关HAL的更多信息,可以参考官方网站:ht...阅读全文
posted @ 2017-01-20 21:07 dax.net 阅读(1051) 评论(1) 编辑
摘要: 我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能。当设置IISExpress的默认启动路由到Swagger的API文档页面后,在IISExpress启动Web API站点后,会自动重定向到API文档页面,非常方便。这不仅让我能够快速省查API设计的合理性,同时从API的使用角度也为我自己提供了便捷。下图就是我的博客系统...阅读全文
posted @ 2016-12-14 22:29 dax.net 阅读(8135) 评论(12) 编辑
摘要: 2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客。当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些与编程和开发相关的文章。从入行到现在,我至始至终乐于与网友分享自己的所学所得,希望会有更多的同我一样的业内朋友能够在事业上取得成功,也算是为我们的软件事业贡献自己的一份力量吧,这也是我在博客园建博客时...阅读全文
posted @ 2016-12-06 22:09 dax.net 阅读(2053) 评论(37) 编辑
摘要: 家里小朋友读一年级了,最近每天都有一些10以内的加减法口算练习,作为程序员爸爸,自然也是想办法能够偷懒,让电脑出题,给小朋友做些练习。于是,自己在业余时间开发了一个四则运算算式生成器,名为:CalculateIt2。项目是开源的,源码地址是:https://github.com/daxnet/CalculateIt2。也可以在标准的.NET Framework 4.6.1的项目中,通过nuget来...阅读全文
posted @ 2016-09-23 23:21 dax.net 阅读(2059) 评论(9) 编辑
摘要: 本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试。在自己做实验的过程中也碰到了一些问题,经过一些测试和搜索资料,基本解决了这些问题,本文也会对这些问题进行介绍,以免有相同需求的朋友多走弯路。 插件的下载与安装 至撰写本文为止,Visual Stud...阅读全文
posted @ 2016-08-21 20:11 dax.net 阅读(3688) 评论(8) 编辑
摘要: 在上一篇文章中,通过演练指导的方式,介绍了在Docker中运行ASP.NET Core Web API应用程序的过程。本文将介绍Docker for Windows的使用。 先决条件 前两周时间,Docker发布了Docker for Windows的正式版,于是就可以在Windows下运行Dock阅读全文
posted @ 2016-08-19 21:02 dax.net 阅读(36678) 评论(14) 编辑
摘要: 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述。对于.NET Core以及docker的基本概念,网上已经有很多文章对其进行介绍了,因此本文不会再详细讲解这些内容。对.阅读全文
posted @ 2016-08-17 21:40 dax.net 阅读(8202) 评论(13) 编辑
摘要: 在《WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例》文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Framework 4.6.1)开发的DDD/CQRS/微服务架构的案例项目:WeText。文章发出后反响很好,也很感谢大家的关注。在本文中我将介绍如何在Ubuntu 14.04.4 LTS中运行WeText项目的服务端。...阅读全文
posted @ 2016-04-24 13:05 dax.net 阅读(2398) 评论(6) 编辑
摘要: 最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA)。我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架构的应用程序案例,并结合领域驱动设计(DDD)以及命令查询职责分离(CQRS)体系结构模式,对事件驱动的微服务系统架构进行了一些实战性的探索。现将自己的思考和收获整理成文,分享给大家。 微服务架构 ...阅读全文
posted @ 2016-04-22 16:37 dax.net 阅读(12565) 评论(35) 编辑
摘要: 在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API。 模块 首先让我们了解一下“模块”的概念。Raspkate的模块包含了一组能够提供完整业务功能的HTTP处理器(Handler),例如,在Raspkate的源代码库中,默认提供了两个模块:Default和RaspberryPi,它们分别位于两个不...阅读全文
posted @ 2016-03-27 21:52 dax.net 阅读(1947) 评论(4) 编辑
摘要: 最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流行的前端技术做一个简单的Web站点,让树莓派搭载这个站点,通过手机或者平板电脑来控制树莓派。经过一番阅读全文
posted @ 2016-03-22 15:13 dax.net 阅读(2385) 评论(9) 编辑
摘要: 在前面的章节中,我们已经设计了一个简单的领域模型,接下来我们希望能够实现领域模型的持久化及查询。在Apworks中,实现了面向Entity Framework、NHibernate以及MongoDB的仓储基础结构。在本章节中,我将向大家介绍如何在Apworks中使用基于Entity Framework的仓储机制。 搭建基于Entity Framework的基础结构 在使用Apworks提供的仓...阅读全文
posted @ 2015-10-15 22:26 dax.net 阅读(5312) 评论(23) 编辑
摘要: Apworks框架实战(一):Apworks到底是什么? Apworks框架实战(二):开始使用 Apworks框架实战(三):单元测试与持续集成 Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始 Apworks框架实战(五):EasyMemo的领域模型设计 Apworks框架实战(...阅读全文
posted @ 2015-10-03 21:08 dax.net 阅读(6798) 评论(11) 编辑