浅谈依赖注入

最近几天在看一本名为Dependency Injection in .NET 的书,主要讲了什么是依赖注入,使用依赖注入的优点,以及.NET平台上依赖注入的各种框架和用法。在这本书的开头,讲述了软件工程中的一个重要的理念就是关注分离(Separation of concern, SoC)。依赖注入不是目的,它是一系列工具和手段,最终的目的是帮助我们开发出松散耦合(loose coupled)、可维护、可测试的代码和程序。这条原则的做法是大家熟知的面向接口,或者说是面向抽象编程。

关于什么是依赖注入,在Stack Overflow上面有一个问题,如何向一个5岁的小孩解释依赖注入[……]

查看更多……

最好的流程是没有流程

  英文原文The Best Process Is No Process

  前年,Wikispeed团队掀起了一场业界风暴。它们把敏捷实践应用到了最传统的行业:汽车制造业。它们在3个月的时间里就研发了一款绿色汽车,而这原本需要经历10-25年的产品生命周期。

  而且,得益于独立组件的测试驱动开发,这款新车的设计具有很高的质量标准。这款车还遵循了非常高的安全标准。他们只用了3天的时间就研制出了一个漂亮的车体。这款车采用了业内能够达到五星安全等级的最轻的底盘。他们在迭代中快速应对变化。这些全都不是什么问题,因为他们在设计中非常注重模块化。他们可以把它由一辆敞蓬车改装成敞蓬的小型卡车,而这只需要改[……]

查看更多……

怎样尊重一个程序员

  得知一位久违的同学来到了旧金山湾区,然而我见到他时,这人正处于一生中最痛苦的时期。他告诉我,自己任职的公司在他加入之前和之后,判若两人。录取的时候公司对他说,我们对你在实习期间的表现和学术背景非常满意,你不用面试,甚至不用毕业拿学位,直接就可以加入我们公司成为正式员工。然而短短一年后的今天,这位同学已经完全感觉不到公司对自己技能的尊重。Manager让他做一些乱七八糟没技术含量的事情,还抱怨说他做事太慢,并且在他的evaluation上很是写了一笔。在人格尊严和工作安全感的双重打击之下,这位同学压力非常大,周末经常偷偷地加班,仍然无法让manager满意。

  我很了解这位同学的能力,在任何[……]

查看更多……

面向对象设计七大原则

要把软件做得非常灵活又要便于维护是一个很困难的事情。灵活的软件他的结构就复杂,维护起来就困难。有得必有失,关键就在于如何处理这两者,使得大于失。软件的设计开发应遵循以下六大原则: 
1. OCP 
全称:“Open-Closed Principle” 开放-封闭原则 

说明:对扩展开放,对修改关闭。 
优点:按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性、灵活性、稳定性都比较好。当已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能。增加的新模块对原有的模块完全没有影响[……]

查看更多……

(转) 新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序

 我自己一开始工作(2002年)就从事WEB开发(ASP.NET方向),到现在已经13个年头了,从初级程序员到技术经理、开发部经理、项目总监,后来合伙创业失败,转入到企业管理培训和咨询行业工作了5年,以开阔视野、提升全面能力、积累人脉资源。2014年进入到一家上市公司刚投资组建不久的移动互联网创业团队,最初主要负责产品设计,但很多设计好的功能和想法,开发团队的技术无法实现。实在没有办法,只好自己重新研究现代WEB前端技术,做好标准和范例,开发好最难的前端部分,再交给开发团队实现后端。几个月后,开发团队交出来的成果还是差强人意,公司让我接管开发部,亲自领导开发团队。于是我招聘了拥有十多年工作经验[……]

查看更多……

CSS3 Background

background-size

css3属性详解

Background大家一定不会陌生,但是CSS3开始,给这个Background属性增加了几个新的属性值 :Background-size,Background-clipBackground-origin。那么从今天开始分几节内容分别来介绍一下background-size,background-clip,background-origin等新属性。今天的主题是Background-size,在开始介绍Backgrond-size之前,大家一起来回忆一下CSS2Background中带有的一些属性:

   back[......]

查看更多......

(转) 细说ASP.NET的各种异步操作

开始

在上篇博客【C#客户端的异步操作】, 我介绍了一些.net中实现异步操作的方法,在那篇博客中,我是站在整个.net平台的角度来讲述各种异步操作的实现方式, 并针对各种异步操[……]

查看更多……

asp.net页面指令和事件

 

@Page指令  定义页面属性

@Page指令允许为ASP.NET页面(.aspx)指定解析和编译页面时使用的属性和值。这是最常用的指令。ASP.NET页面是ASP.NET的一个重要部分,所以它有许多属性。表3-4总结了@Page指令的可用属性。

表 3-4

属    性

说    明

AspCompat

若其值为True,就允许页面在单线程的单元中执行,这个属性的默认设置是False。

Async

指定ASP.NET页面是同步或异步处理

AutoEventWireUp

设置为True时,指定页面事件自动触发。这个属性的默认设置是T[……]

查看更多……

比较一下以“反射”和“表达式”执行方法的性能差异

由于频繁地使用反射会影响性能,所以ASP.NET MVC采用了表达式树的方式来执行目标Action方法。具体来说,ASP.NET MVC会构建一个表达式来体现针对目标Action方法的执行,并且将该表达式编译成可执行代码。编译后的可执行代码体现为一个委托对象,该委托对象会被缓存起来以用于针对同一个Action方法的执行。为了让大家能够和直观地理解两种(直接利用反射和利用表达式编译后的委托对象)方法执行在性能上的差异,我们来做一个简单的实例演示。我们在一个控制台应用中定义了如下一个Foobar类型,它的Invoke方法就是我们需要测试的目标方法。简单起见,我们没有为它定义任何参数,方法本身也不需[……]

查看更多……