原文出处: Mark Michaelis 为什么使用依赖关系注入? 使用 .NET,通过 new 运算符(即,new MyService 或任何想要实例化的对象类型)调用构造函数即可轻松实现对象实例化。遗憾的是,此类调用会强制实施客户端(或应用程序)代码到已实例化对象的紧密耦合的连接(硬编码的引用)...
分类:攻城湿
38 篇文章锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被...
单例模式是广为流传的设计模式中的一种。本质上,单例模式是一个只允许创建一个实例,并提供对这个实例简单的访问途径的类。一般而言,单例模式在创建实例时 不允许传递任何参数-否则不同参数导致不同的实例创建,就会出现问题!(如果同一个实例可以被同参的不同请求所访问,那么工厂模式会更适合。)这篇文章只 针对无...
说明: 控制错误日志的详细程度 语法: Log Level级别 默认值: Log Level warn Level Description Example emerg Emergencies – system is unusable紧急 – 系统无法使用 Child cannot open lock...
C#接口有三种用途: 一、提供方法、属性、事件的抽象。 这是接口最常见的用途。在面向对象的设计中,接口是软件架构可扩展性的重要保证因素,与抽象类配合使用,使得框架结构具有“被注入”的特性,从而提高系统的扩展性。 二、用作泛型约束。 在这种情况下,接口可以仅仅是一个类型,其中可以不带任何方法、属性或事...
自从我用了EF,每次都很关心是否有潜在的性能问题。所以每次我写LINQ查询,都会使用SQL Profiler看一下实际生成的SQL语句,以便发现潜在的性能问题。也强烈建议大家这么去做,以免日后软件大了出了问题很难查。 一、只选择某列或某些列 有些时候,在C#里写LINQ虽然看着舒服,但性能不一定好,...
一. group by 1.GROUP BY子句主要用于对WHERE中得到的结果进行分组,也就是说它是在WHERE子句之后执行,对经过WHERE筛选后的结果按照某些列进行分组,之后进行相应的处理工作。 注意:如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就...
我花了一周的时间评估比较了一下各种消息队列产品,非常的有趣。我做这个事的动机是因为一个客户有一个很高性能需求。他们的消息信息突破了1百万个并发。目前他们使用的是SQL server,并不理想,我建议他们使用消息队列服务器。 为了对一些相似的候选产品获得一个全面的但是粗浅的性能上的了解,我们它们放在一...
互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)。 本文简要介绍持续集成的概念和做法。 一、概念 持续集成指的是,频繁地(一天多次)将代码集成到主干。 它的好处主要有两个。 **(1)快速发现错误。**每完成一点更...
程序中记录日志一般有两个目的:Troubleshooting和显示程序运行状态。好的日志记录方式可以提供我们足够多定位问题的依据。日志记录大家都会认为简单,但如何通过日志可以高效定位问题并不是简单的事情。这里列举下面三个方面的内容,辅以代码示例,总结如何写好日志,希望对他人有所启发和帮助: 怎样记日...