随笔分类 -  .NET

摘要:使用Domain-Driven创建Hypermedia API 在现实世界中我们会遇到各种各样的复杂场景,没有一种API设计方式可以应对所有的场景。区别于”Consumer-Driven Contract”,本文将描述另外一种设计API的方式:Domain-Driven API。这不是API设计的标 阅读全文
posted @ 2021-01-02 16:48 richiezhang 阅读(414) 评论(1) 推荐(0) 编辑
摘要:一、DIP原则 高层模块不应该依赖于底层模块,二者都应该依赖于抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 该原则理解起来稍微有点抽象,我们可以将该原则通俗的理解为: "依赖于抽象” 。 该规则告诉我们,程序中所有的依赖关系都应该终止于 ,从而达到松耦合的目的。因为我们在应用程序中编写的大多数 阅读全文
posted @ 2016-11-14 21:58 richiezhang 阅读(3754) 评论(0) 推荐(11) 编辑
摘要:Masstransit作为.Net平台下的一款优秀的开源产品却没有得到应有的关注,这段时间有机会阅读了Masstransit的源码,我觉得我有必要普及一下这个框架的使用。 值得一提的是Masstransit的源码写的非常优秀,值得每个想提高自己编程能力的.Net选手阅读,整个代码看起来赏心悦目。反之,每次打开自己公司项目的时候心情都异常沉重。所以不是.Net不行,还是咱们水平不行。 学会了Mass... 阅读全文
posted @ 2016-08-02 21:49 richiezhang 阅读(5666) 评论(24) 推荐(21) 编辑
摘要:微软给我们提供了一种非常好用的数据库迁移方案,但是我发现周围的同学用的并不多,所以我还是想把这个方案整理一下。.NET选手看过来,特别是还在通过手工执行脚本来迁移数据库的同学们,当然你也可以选择EF的Migration方案和FluentMigrator,但是下面我介绍的这种方案符合我对团队协作的所有 阅读全文
posted @ 2016-07-31 19:48 richiezhang 阅读(2952) 评论(7) 推荐(3) 编辑
摘要:在DDD开发过程中,一个良好的Uow设计必不可少,我心目中的Uow设计应该具备以下几点: 1、有着良好的抽象,有着恰如其分的命名; 2、能够应付不同的组件,比如你的系统中可能会存在EfUnitOfWork、RedisUnitOfWork; 3、易于使用,不用开发者显示调用。Uow在一个用户请求开始到 阅读全文
posted @ 2016-06-17 10:35 richiezhang 阅读(2017) 评论(0) 推荐(2) 编辑
摘要:RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具。消息队列的使用场景大概有3种: 1、系统集成,分布式系统的设计。各种子系统通过消息来对接,这种解决方案也逐步发展成一种架构风格,即“通过消息传递的架构”。 2、 阅读全文
posted @ 2016-05-16 06:50 richiezhang 阅读(28064) 评论(42) 推荐(107) 编辑
摘要:领域驱动设计之单元测试最佳实践(二) 一直以来,我试图找到一种有效的单元测试模式,使得“单元测试”真正能够在团队中流行起来,让单元测试不再是走过场,而是让单元测试切切实实成为提高代码质量的途径。 本文将描述一种以EF Code First模式实现的领域驱动项目实施单元测试的方案。 在描述这一方案之前,让我们看看这一最佳实践源于何种考虑和最终实现的目标: 1、以MVC项目为例,如果将单元测试的重... 阅读全文
posted @ 2016-05-02 10:00 richiezhang 阅读(5390) 评论(35) 推荐(18) 编辑
摘要:领域驱动设计之单元测试最佳实践(一) 介绍完了DDD案例,我们终于可以进入主题了,本方案的测试代码基于Xunit编写,断言组件采用了FluentAssertions,类似的组件还有Shouldly。另外本案例使用了Code Contracts for .NET,如果不安装此插件,可能有个别测试不能正确Pass。 为了实现目标中的第二点:"尽量不Mock,包括数据库读取部分”,我尝试过3种方案:... 阅读全文
posted @ 2016-05-02 10:00 richiezhang 阅读(1414) 评论(0) 推荐(1) 编辑
摘要:通过阶乘计算来认识尾递归。阶乘可以用下面的表达式来描述: n!=n*(n-1)*(n-2)…3*2*1 根据上面的表达式我们可以概括出下面的算法来计算阶乘: n!=n*(n-1)! 函数调用: 下面的替换模型描述了计算机是如何执行这一代码的: 当我们使用一个过大的数值,例如求:Factorial(5 阅读全文
posted @ 2016-04-19 22:23 richiezhang 阅读(1621) 评论(0) 推荐(0) 编辑
摘要:有幸参与了一些领域驱动的项目,读了一些文章,也见识了一些不伦不类的架构,感觉对领域驱动有了更进一步的认识。所以今天跟大伙探讨一下领域驱动设计,同时也对一些想要实践领域驱动设计却又无处下手,或者一些正在实践却又说不上领域驱动设计到底好在哪的朋友一些指引方向。当然对于”领域驱动设计”这个主题而言从来不乏 阅读全文
posted @ 2016-04-10 01:59 richiezhang 阅读(13220) 评论(59) 推荐(45) 编辑
摘要:凡是写过一些代码的程序猿都能够意识到应该避免重复的代码和逻辑。我们通过提取方法,提取抽象类等等措施来达到这一目的。我们总能时不时的听到类似这样的话:”把这些公用的类放到shared项目去,别的项目还要使用。。。“,什么算是公用(重复)的代码?是不是公用(重复)的代码就要放到一个叫shared的地方? 阅读全文
posted @ 2016-03-31 22:54 richiezhang 阅读(8885) 评论(16) 推荐(3) 编辑
摘要:ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline)。日志记录、用户认证、MVC等模块都以中间件(Middleware)的方式注册在管道中。显而易见这样的设计非常松耦合并且非常灵活,你可以自己定义任意功能的Middleware注册在管道中。这一设计非常适用于“请求-响应”这样的场景——消息从管道头流入最后反向流出。 在本文中暂且为这种模式起名叫做“管道-中间件(Pi... 阅读全文
posted @ 2016-03-24 14:36 richiezhang 阅读(2133) 评论(5) 推荐(9) 编辑
摘要:本文将对微软下一代ASP.NET框架做个概括性介绍,方便大家进一步熟悉该框架。 在介绍ASP.NET Core 1.0之前有必要澄清一些产品名称及版本号。ASP.NET Core1.0是微软下一代ASP.NET 框架,在这之前ASP.NET版本稳定在ASP.NET 4.6,对应的.NET Frame 阅读全文
posted @ 2016-03-18 21:00 richiezhang 阅读(12044) 评论(46) 推荐(62) 编辑
摘要:MVC模型以低耦合、可重用、可维护性高等众多优点已逐渐代替了WebForm模型。能够灵活使用MVC提供的扩展点可以达到事半功倍的效果,另一方面Asp.net MVC优秀的设计和高质量的代码也值得我们去阅读和学习。 本文将介绍Asp.net MVC中常用的八个扩展点并举例说明。 一、ActionRes 阅读全文
posted @ 2016-02-04 21:02 richiezhang 阅读(10453) 评论(47) 推荐(105) 编辑
摘要:IDisposable是.Net中一个很重要的接口,一般用来释放非托管资源,我们知道在使用了IDisposable的对象之后一定要调用IDisposable.Dispose()方法,或者使用.Net提供的关键字using来达到这一目的,如: public void ReadFile()... 阅读全文
posted @ 2016-01-24 13:08 richiezhang 阅读(1348) 评论(2) 推荐(3) 编辑
摘要:不知从何时起,我不太轻易去设计抽象类了,一方面是因为我写的业务确实没有设计抽象类的需求,另一方面则基于以下三个考虑:1、面向对象编程中建议多使用“组合”而不是使用“抽象”,原因在于“组合”更加灵活。2、因为要公用一个“方法”,就迫不及待的设计出抽象关系,很容易造成抽象类不够SRP,久而久之抽象类成了... 阅读全文
posted @ 2016-01-10 17:12 richiezhang 阅读(950) 评论(0) 推荐(2) 编辑
摘要:这两周我需要对一个历史遗留的功能做一些扩展,正如很多人不愿意碰这些历史遗留的代码一样,我的内心也同样对这样的任务充满反抗。这些代码中充斥着各种null判断(你写的return null正确吗?),不规范的变量命名,层层嵌套的if…else语句。显然面对这样的代码我无从下手,更别提什么重构、单元测试了 阅读全文
posted @ 2015-12-25 08:54 richiezhang 阅读(1479) 评论(16) 推荐(2) 编辑
摘要:系列主题:基于消息的软件架构模型演变 NServiceBus 是一个.Net平台下开源的消息服务框架,这类产品有时也被称作ESB(Enterprise Service Bus)——企业服务总线。NServicebus官方地址:http://particular.net/git: https://github.com/Particular/NServiceBusNServiceBus原作者Udi D... 阅读全文
posted @ 2015-12-14 14:26 richiezhang 阅读(9975) 评论(47) 推荐(40) 编辑
摘要:又到了周末的code review环节,这次code review发现了一个对async/await的理解问题。让我们直奔主题: var foodsSearch = new FoodSearchService().SearchAsync(); var fruitsSearch = new FruitSearchService().SearchAsync... 阅读全文
posted @ 2015-12-05 00:08 richiezhang 阅读(3814) 评论(24) 推荐(10) 编辑
摘要:在上一篇”使用OAuth打造webapi认证服务供自己的客户端使用“的文章中我们实现了一个采用了OAuth流程3-密码模式(resource owner password credentials)的WebApi服务端。今天我们来实现一个js+html版本的客户端。一、angular客户端angula... 阅读全文
posted @ 2015-11-28 13:11 richiezhang 阅读(8215) 评论(6) 推荐(14) 编辑