自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

转载 敏捷软件开发揭秘

前言本篇文章将对敏捷软件开发的方法论及其应用做基本介绍,将描述团队是如何通过协作来完成共同目标的。本篇文章不仅仅适合软件开发人员阅读,同时也适合于团队负责人、项目经理、产品经理、开发经理、测试人员、QA经理、QA工程师、技术文档专员、用户体验设计师等任何涉及软件交付的人员。文章重点介绍技术团队是如何通力协作来计划、构建和交付软件的。但文中没有具体代码的编写,也没有对特定技术的介绍,并...

2013-06-27 08:11:00 220

转载 改进ConcurrentDictionary并行使用的性能

上一篇文章“ConcurrentDictionary 对决 Dictionary+Locking”中,我们知道了 .NET 4.0 中提供了线程安全的ConcurrentDictionary<TKey, TValue> 类型,并在某些特定的使用条件下会产生问题。在ConcurrentDictionary<TKey, TValue> 类中有一个方法 GetO...

2013-06-19 18:38:00 374

转载 ConcurrentDictionary 对决 Dictionary+Locking

在 .NET 4.0 之前,如果我们需要在多线程环境下使用 Dictionary 类,除了自己实现线程同步来保证线程安全之外,我们没有其他选择。很多开发人员肯定都实现过类似的线程安全方案,可能是通过创建全新的线程安全的字典类型,或者仅是简单的用一个类封装一个 Dictionary 对象,并在所有方法中加上锁机制,我们称这种方案叫“Dictionary + Locks”。但现在,我...

2013-06-19 15:04:00 182

转载 单元测试 Mocking 类库需具备的特性

一个优秀的单元测试 Mocking 类库,需要具备如下几个特性:易用性:有非常明确的 API ,易于使用并易于记忆。健壮性:行为结果始终一致,并保持准确。帮助性:当程序出错时,给出尽可能明确的原因提示。如果我们所使用的类库没有满足上述条件,编写测试用例的过程将变得复杂和困难,使用类库不仅没有节省时间,反而可能使我们更加迷惑。在这种条件下,我们可能更愿意删除测试用例...

2013-06-18 16:22:00 138

转载 LoadTest内存和线程Troubleshooting实战

在端午节放假的三天中,我对正在开发的 Service 进行了 LoadTest,尝试在增大压力的条件下发现问题。该 Service 为独立进程的 WCF 服务,宿主于 WindowsService,其接收其他 Service 的调用,并根据业务流程调用不同的依赖 Service。问题现象果真,假期归来,问题来了。内存正常在 200M 左右,已经膨胀到 4.5G,同时正常线程数...

2013-06-17 15:42:00 76

转载 EntityFramework用法探索(八)事务处理

使用前文中描述的Retail示例,在Customer对象的Mapping中设置Name属性:1 this.Property(t => t.Name)2 .IsRequired()3 .HasMaxLength(256);要求该属性不能为空,并且长度不超过256。我们构造一个有效的Customer对象,再...

2013-06-09 21:55:00 121

转载 EntityFramework用法探索(七)线程安全实践

在前文中,我们通过Unity来注册各种类型和WiringUp。 1 IUnityContainer container = new UnityContainer() 2 .RegisterType(typeof(IRepository<>), typeof(Repository<>), new ContainerContro...

2013-06-06 22:46:00 91

转载 EntityFramework用法探索(六)静态Repository

在上文中,我们引入了Unity,用来帮助构建各个Repository和UnitOfWork。同时,我们将UnityContainer注入到了ServiceLocator的实现中,1 UnityServiceLocator locator = new UnityServiceLocator(container);2 ServiceLocator.Se...

2013-06-06 22:01:00 95

转载 EntityFramework用法探索(五)引入Unity

在上文的EntityFramework用法中,我们引入了Repository模式和UnitOfWork模式。探索还没有结束,我们引入Unity依赖注入容器。那用Unity做什么呢?在上文中,我们手工定义了CustomerRepository中DbContext的,1 DbContext context = new RETAILContext();2 ...

2013-06-06 21:22:00 133

转载 EntityFramework用法探索(四)Repository和UnitOfWork

以上一篇CodeFirst生成代码为基础,继续探索使用方式。引入Repository模式,定义最简单的IRepository接口,仅包含增删改查接口,1 public interface IRepository<T>2 where T : class3 {4 IQueryable<T> Query();5 ...

2013-06-06 21:13:00 151

转载 EntityFramework用法探索(三)CodeFirst流畅API

Code First Fluent API,使用流畅API来定义模型映射。同样使用与上文Database First 模式相同的例子,假设需要设计一个零售系统,我们先构建一个 Customer 类。1 public class Customer2 {3 public long Id { get; set; }4 public string...

2013-06-06 21:00:00 59

转载 EntityFramework用法探索(二)CodeFirst

Code First,顾名思义,要先写Code,而不是先建立数据库内容。同样使用与上文 Database First 模式相同的例子,假设需要设计一个零售系统,我们先构建一个 Customer 类。 1 [Table("Customer", Schema = "STORE")] 2 public class Customer 3 { 4 [Ke...

2013-06-06 20:59:00 70

转载 EntityFramework用法探索(一)DatabaseFirst

EntityFramework数据库优先方式,很明显,我们需要先设计数据库模型。假设我们需要设计一个零售系统,需要一些表结构:生成数据库建表SQL 1 USE [RETAIL] 2 ; 3 4 IF SCHEMA_ID(N'STORE') IS NULL EXECUTE(N'CREATE SCHEMA [STORE]'); 5 ; ...

2013-06-06 20:20:00 58

转载 单元测试的两种方式

在单元测试中,可通过两种方式来验证代码是否正确地工作。一种是基于结果状态的测试,一种是基于交互行为的测试。测试结果与测试行为之间有什么区别呢?基于结果状态的测试,也就意味着我们需要验证被测试代码需要返回正确的结果。 1 [TestMethod] 2 public void TestSortNumberResult() 3 { 4 ...

2013-06-05 16:59:00 250

转载 编写更好的C#代码

引言开发人员总是喜欢就编码规范进行争论,但更重要的是如何能够在项目中自始至终地遵循编码规范,以保证项目代码的一致性。并且团队中的所有人都需要明确编码规范所起到的作用。在这篇文章中,我会介绍一些在我多年的从业过程中所学习和总结的一些较好的实践。举例为先我们先来看一个 FizzBuzz 示例。FizzBuzz 要求编写一个程序,遍历从 1 到 100 的数字。其中如果某数字是 3...

2013-06-03 13:47:00 108

转载 使用Unity进行AOP对象拦截

Unity是一款知名的依赖注入容器,其支持通过自定义扩展来扩充功能。在Unity软件包内默认包含了一个对象拦截(Interception)扩展定义。本篇文章将介绍如何使用对象拦截功能来帮助你分离横切关注点(Separation of cross-cutting concerns)。对象拦截简介对象拦截是一种AOP(Aspect-oriented programming)编程的实践...

2013-06-01 23:28:00 164

转载 C#使用Emit构造拦截器动态代理类

在AOP编程概念介绍中,常见的示例为拦截对象,并在对象的某方法执行前和执行后分别记录日志。而最常用的拦截方式是使用动态代理类,用其封装一个日志拦截器,当方法被执行时进行日志记录。日志拦截器类 1 public class Interceptor 2 { 3 public object Invoke(object @object, string @method,...

2013-06-01 18:16:00 118

转载 C#使用Emit生成构造函数和属性

假设我们需要一个名叫Kitty的类,其在Pets程序集下。 1 // specify a new assembly name 2 var assemblyName = new AssemblyName("Pets"); 3 4 // create assembly builder 5 var assemblyBuilder = A...

2013-06-01 16:07:00 125

转载 秒懂C#通过Emit动态生成代码

首先需要声明一个程序集名称,1 // specify a new assembly name2 var assemblyName = new AssemblyName("Kitty");从当前应用程序域获取程序集构造器,1 // create assembly builder2 var assemblyBuilder = AppDomain.Current...

2013-06-01 14:28:00 198

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除