随笔分类 -  .NET

摘要:上次一篇“你写的try…catch真的有必要吗”引起了很多朋友的讨论。本次我在code review又发现了一个问题,那就是有人有意无意的写出了return null这样的代码,例如: public User GetUser(Guid userId) { ... 阅读全文
posted @ 2015-11-27 23:57 richiezhang 阅读(8439) 评论(58) 推荐(19) 编辑
摘要:系列主题:基于消息的软件架构模型演变 一、反应式编程(Reactive Programming) 1、什么是反应式编程:反应式编程(Reactive programming)简称Rx,他是一个使用LINQ风格编写基于观察者模式的异步编程模型。简单点说Rx = Observables + LINQ + Schedulers。 2、为什么会产生这种风格的编程模型?我在本系列文章开始的时候说过一个使... 阅读全文
posted @ 2015-11-18 16:09 richiezhang 阅读(18072) 评论(61) 推荐(74) 编辑
摘要:系列主题:基于消息的软件架构模型演变 既然这个系列的主题是”基于消息的架构模型演变“,少不了说说Actor模型。Akka.net是一个基于Actor模型的分布式框架。如果你对分布式应用还非常陌生,当别人在谈”分布式“、”云计算“等名词时你感到茫然,那么本篇文章将带你进行一次分布式开发之旅。 一、什么是Actor模型 Actor模型由Carl Hewitt于上世纪70年代早期提出并在Erlang... 阅读全文
posted @ 2015-11-07 19:59 richiezhang 阅读(19422) 评论(58) 推荐(79) 编辑
摘要:一、什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版。注意是Authorization(授权),而不是Authentication(认证)。用来做Authentication(认证)的标准叫做openid connect,我们将在以后的文章中进行介绍。 二、名词定义 理解OAuth中的专业术语能够帮助你理解其流程模式,OAuth中常用的名... 阅读全文
posted @ 2015-10-28 22:57 richiezhang 阅读(24463) 评论(123) 推荐(112) 编辑
摘要:系列主题:基于消息的软件架构模型演变.net中事件模型很优雅的实现了观察者模式,同时被大量的使用在各种框架中。如果我们非要给事件模型挑毛病,我觉得有两点:实现起来略微繁琐正如我们上篇文章分析,事件模型在特定的情况下会发生内存泄漏于是我们想到了更加简单易用的模型:EventAggregator,正如该... 阅读全文
posted @ 2015-10-25 20:06 richiezhang 阅读(2225) 评论(0) 推荐(6) 编辑
摘要:系列主题:基于消息的软件架构模型演变在Winform和Asp.net时代,事件被大量的应用在UI和后台交互的代码中。看下面的代码: private void BindEvent() { var btn = new Button(); ... 阅读全文
posted @ 2015-10-25 18:29 richiezhang 阅读(2347) 评论(2) 推荐(2) 编辑
摘要:一个优秀的架构师总是能对各种解决方案的优点和对应成本之间取得良好的平衡,而这种能力背后是架构师丰富的经验和广阔的知识体系。基于消息的软件建构模型则是架构师必备的知识点,本文将详细描述该模型的演变过程。 还记得第一次跟师傅打交道,他问我“Hi yang,你的功能设计的怎么样了?”我有点不以为然,不就是 阅读全文
posted @ 2015-10-25 18:29 richiezhang 阅读(9122) 评论(35) 推荐(19) 编辑
摘要:我之所以对函数式代码感兴趣是因为函数式代码富有表现力,可以使用简短、紧凑的代码完成工作,同时能对特定的问题给出优雅的解决方案。现代的编程语言不约而同的朝着面向对象、函数式、动态、解释执行的方向发展,例如Ruby,Swift。而另一些语言则更加强调函数式编程,如F#,Scala,这种语言有着强大的类型... 阅读全文
posted @ 2015-10-16 01:08 richiezhang 阅读(12897) 评论(1) 推荐(1) 编辑
摘要:前段时间在周末给朋友做了一个小程序,用来记录他们单位的一些调度信息(免费,无版权问题)。把代码分享出来。整个程序没有做任何架构。但是麻雀虽小,用到的技术也没少。WebApi+Castle+AutoMapper+Ef+angular,日志记录Log4net。初学者可以学习借鉴,虽然做的比较仓促,但是自我感觉代码写的还是比较规范。 git地址:https://git.oschina.net/richi... 阅读全文
posted @ 2015-10-14 22:31 richiezhang 阅读(1466) 评论(2) 推荐(5) 编辑
摘要:string.IsNullOrEmpty()这个方法算得上是.net中使用频率最高的方法之一。此方法是string的一个静态方法,类似的静态方法在string这个类中还有很多。那么这样的方法作为静态方法是否合理呢?如果我们从面向对象的角度出发,我们会发现这种方案不是十分符合面向对象的设计原则。 什么 阅读全文
posted @ 2015-10-11 14:40 richiezhang 阅读(4831) 评论(17) 推荐(7) 编辑
摘要:随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本。而新功能的开发又常常依赖于旧代码,阅读旧代码所花费的时间几乎要大于写新功能的时间。 我前几天看了一本书,书中有这么一句话: “复杂的代码往往都是新手所写,只有经验老道的高手才能写出简单,富有表现力的代码” 此话 阅读全文
posted @ 2015-09-26 14:07 richiezhang 阅读(18740) 评论(110) 推荐(137) 编辑
摘要:很多人喜欢用Try...Catch把每一个方法都包裹起来,可是真的有必要么?为什么要这样做?我估计是大家被BUG吓怕了,生怕生产环境出现各种莫名其妙的错误,比如最经典的NullReferenceException,可问题是你用Try...Catch包裹起来后错误是不会爆出来了,但是执行结果是你想要的... 阅读全文
posted @ 2015-09-02 17:06 richiezhang 阅读(13140) 评论(104) 推荐(35) 编辑
摘要:大家是如何对webApi写测试的呢?1.利用Fiddler直接做请求,观察response的内容。2.利用Httpclient做请求,断言response的内容。3.直接调用webApi的action,这种方式的测试跟真实的调用还是有一定差距,不够完美。接下来我介绍一种webApi的in-memor... 阅读全文
posted @ 2015-07-19 14:49 richiezhang 阅读(5284) 评论(1) 推荐(5) 编辑
摘要:当我们用在MVC总使用IoC时,大家的Controller生命周期(lifestyle)是以哪种方式注册的呢?之前我一直没有思考过这个问题。众所周知在MVC开发过程中,大部分的组件都是以PerWebRequest的方式注册到容器的,Controller也不例外,以Castle为例,注册Control... 阅读全文
posted @ 2015-07-12 12:28 richiezhang 阅读(1132) 评论(0) 推荐(0) 编辑
摘要:表达式树是LINQ To everything 的基础,同时各种类库的Fluent API也 大量使用了Expression Tree。还记得我在不懂expression tree时,各种眼花缭乱的API 看的我各种膜拜,当我熟悉expression tree 后恍然大悟,不用看代码也能知道别人的API 是如何设计的(^_^)。 接下来这篇博客就谈谈如何使用expression t... 阅读全文
posted @ 2015-06-07 13:14 richiezhang 阅读(2016) 评论(6) 推荐(5) 编辑
摘要:由于项目需求,需要使用angular 实现列表的增、删、改,并且列表支持拖拽。看了下angular-ui 里面的sortable组件,使用起来也是非常简单,几十行代码就完成了所需功能。我现在懒得想如何使用jquery完成该功能,不过我能肯定的是使用jquery完成这个功能,代码至少多几倍效果如下:本... 阅读全文
posted @ 2015-04-12 18:22 richiezhang 阅读(1709) 评论(0) 推荐(0) 编辑
摘要:提起函数式编程,大家一定想到的是语法高度灵活和动态的LISP,Haskell这样古老的函数式语言,往近了说ruby,javascript,F#也是函数式编程的流行语言。然而自从.net支持了lambda表达式,C#虽然作为一种指令式程序设计语言,在函数式编程方面也毫不逊色。我们在使用c#编写代码的过... 阅读全文
posted @ 2015-04-06 15:59 richiezhang 阅读(16091) 评论(5) 推荐(5) 编辑
摘要:系列主题:基于消息的软件架构模型演变 说起观察者模式,估计在园子里能搜出一堆来。所以写这篇博客的目的有两点: 观察者模式是写松耦合代码的必备模式,重要性不言而喻,抛开代码层面,许多组件都采用了Publish-Subscribe模式,所以我想按照自己的理解重新设计一个使用场景并把观察者模式灵活使用在其中 我想把C#中实现观察者模式的三个方案做一个总结,目前还没看到这样的总结 现在我们来假设... 阅读全文
posted @ 2015-03-29 16:38 richiezhang 阅读(16078) 评论(11) 推荐(20) 编辑
摘要:我们经常使用的一些框架例如:EF,Automaper,NHibernate等都提供了非常优秀的Fluent Interface, 这样的API充分利用了VS的智能提示,而且写出来的代码非常整洁。我们如何在代码中也写出这种Fluent的代码呢,我这里介绍3总比较常用的模式,在这些模式上稍加改动或者修饰... 阅读全文
posted @ 2015-03-22 18:42 richiezhang 阅读(4180) 评论(1) 推荐(14) 编辑
摘要:C#中的线程四(System.Threading.Thread)1.最简单的多线程调用System.Threading.Thread类构造方法接受一个ThreadStart委托,改委托不带参数,无返回值 1 public static void Start1() 2 { 3 Console.WriteLine("this is main thread!:{0},{1}", System.Threading.Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.Name); 4 System.Thread... 阅读全文
posted @ 2014-04-11 10:25 richiezhang 阅读(2834) 评论(0) 推荐(0) 编辑