随笔分类 -  .NET

.NET。
.NET:字符集和编码学习总结
摘要:背景一直没有深入的学习字符集和编码的知识(现在也没有深入),今天查阅了一些资料,弄明白了一些事情,本文就简单记录一下。字符集和编码字符集是指一些符号组成的集合,编码是对指定字符集如何表示为字节的一种规则,一个字符集可以由多种编码。参考文章:http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html。.NET支持多少种编码?默认编码是什么?测试程序1 public static void 打印所有编码规则总数()2 {3 Console.WriteLine(string.For... 阅读全文

posted @ 2013-08-21 23:10 幸福框架 阅读(2826) 评论(4) 推荐(5) 编辑

.NET:遇到并发问题,什么样的情况下需要自动重试?
摘要:背景多用户系统会出现并发问题,应对并发问题的两种方式是“悲观锁”和“乐观锁”,多数情况下都会采用“乐观锁”,这引发了一个问题,如果检查出乐观并发异常如何重试?是让最终用户手工重试?还是让系统自动重试?如何做出这个决策?本文就给我的一点想法。想法虽小,记下来不容易忘。何时选择:让最终用户手工重试如果并发修改涉及的数据是用户直接参与修改的,就让用户手工重试。注:因为用户重试一般是另外一个独立的请求,编程上比较容易处理,服务器只需要抛出并发异常即可。何时选择:让系统自动重试如果并发修改涉及的数据不是用户直接参与修改的,就让系统自动重试。注:因为自动重试是在一个独立的请求,编程上需要注意一个问题:自动 阅读全文

posted @ 2013-08-19 18:07 幸福框架 阅读(1752) 评论(2) 推荐(4) 编辑

.NET:再论异常处理,一个真实的故事
摘要:背景关于是使用枚举或布尔类型来表示方法执行状态,还是使用异常,可以参考这里的文章:http://www.google.ee/search?q=site%3Awww.cnblogs.com%2Fhappyframework%2F%20%E5%BC%82%E5%B8%B8。今天贴出一个真实的场景(一个朋友重构之前和之后的代码)供大家参考。一个朋友的示例重构前重构后示例分析重构前使用枚举或布尔类型来表示方法执行状态,导致程序中出现了大量的if(xxx){ //异常流程处理 },这部分代码会充斥到所有地方,程序中包括了对异常路径的处理,随着调用栈的深度增加,编程更不爽,如:需要在下层的枚举状态之上再扩 阅读全文

posted @ 2013-08-06 18:06 幸福框架 阅读(2581) 评论(15) 推荐(5) 编辑

.NET:负载平衡的主意事项
摘要:允许局域网发现和共享。设置固定IP。网站的IP设置为“全部未分配”。注意:如果停止IIS的话,不会对负载平衡有影响,负载还是会分配停止了的IIS所在在的电脑,只有停止服务器了,负载不会再分配给停止了的电脑。 阅读全文

posted @ 2013-08-04 12:25 幸福框架 阅读(348) 评论(0) 推荐(1) 编辑

.NET:在C#中模拟Javascript的setTimeout方法
摘要:背景每种语言都有自己的定时器(Timer),很多人熟悉Javascript中的setInterval和setTimeout,在Javascript中为了实现平滑的动画一般采用setTimeout模拟setInterval,这是因为:setTimeout可以保证两次定时任务之间的时间间隔,而setInterval不行(小于设置的间隔时间)。C#中如何模拟setTimeout呢?System.Timers.Timer模拟setInterval代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 u 阅读全文

posted @ 2013-07-29 09:03 幸福框架 阅读(4057) 评论(0) 推荐(1) 编辑

.NET:国际化和本地化
摘要:背景国际化(i18n)和本地化(l10n)是高端程序的必备技术,可惜从业五年从没有尝试过,下一步准备做一个多用户的博客系统,想支持多语言,今天就学习了一下,写出来,希望大家批评。收集的资料I18N:http://baike.baidu.com/view/372835.htm。CultureInfo:http://msdn.microsoft.com/en-us/library/System.Globalization.CultureInfo.aspx。.NET - Localization using Resource file:http://www.codeproject.com/Artic 阅读全文

posted @ 2013-07-24 00:12 幸福框架 阅读(9291) 评论(10) 推荐(10) 编辑

.NET:为什么不能在子类或外部发布C#事件
摘要:背景一个朋友问了一个问题:“为什么不能在子类或外部发布C#事件?”,我说我不知道,要看看生产的IL代码,下面我们看看。测试代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace EventStudy 8 { 9 class Program10 {11 static void Main(string[] args)12 ... 阅读全文

posted @ 2013-07-19 00:09 幸福框架 阅读(2138) 评论(17) 推荐(2) 编辑

幸福框架:用户想看到的操作日志也要使用AOP吗?
摘要:背景日志无论是对于开发人员、运维人员和最终用户都是一笔财富,是不是所有类型的日志都要AOP呢?本着交流的目的,这里先说一些看法,希望大家多批评。常见的日志类型异常日志概念:记录异常的日志。考虑:日志框架需要对不同的异常采用不同的日志方式,比如:那些为了向UI层返回消息的异常是不用记录到日志的,对于未期望异常也需要有不同的日志输入方式。方式:AOP,适合在边界类使用(靠近系统边界的地方)。事务:不需要参与业务事务。服务对象:开发人员、运维人员。示例: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 阅读全文

posted @ 2013-07-12 09:10 幸福框架 阅读(1775) 评论(0) 推荐(0) 编辑

.NET:用T4消除代码重复,对了,也错了
摘要:背景我需要为int、long、float等这些数值类型写一些扩展方法,但是我发现他们不是一个继承体系,我的第一个思维就是需要为每个类型重复写一遍扩展方法,这让我觉得非常不爽,但是我还是不情愿的写了,等int和long写完后,我突然觉得我可以让T4帮我写,而且C#支持部分类,就更爽了。用T4实现模板(写代码的代码) 1 2 3 4 5 6 7 using System; 8 using System.Collections.Generic; 9 using System.Linq;10 using System.Text;11 using System.Threading.Tasks... 阅读全文

posted @ 2013-07-11 08:50 幸福框架 阅读(2569) 评论(4) 推荐(3) 编辑

.NET:关于数据模型、领域模型和视图模型的一些思考
摘要:背景数据模型、领域模型和视图模型是“模型”的三种角色,一些架构用一种类型表示这三种角色,如:传统三层架构。也有一些架构用两种类型表示这三种角色,如:结合ORM的领域驱动架构。非常少见的场景是用三种类型表示这三种角色,我只在个别领域这么弄过,如:工作流引擎。今天只说一个话题:是否有必要为视图模型引入独立的类型?还是用一种类型表达领域模型和视图模型这两种角色比较方便?引入一些词汇:A方案:用一种类型表达领域模型和视图模型这两种角色,又叫公开领域模型到视图(Open Domain To View)。B方案:为视图模型引入独立的类型,又叫使用数据传输对象(DTO)。A方案因为领域模型和视图模型是一个类 阅读全文

posted @ 2013-07-04 00:35 幸福框架 阅读(3714) 评论(12) 推荐(3) 编辑

.NET:为什么需要逆变和协变
摘要:为啥需要协变和逆变?我目前想到的理由是:逆变和协变的目的是支持多态。一个小例子不明白为啥输出的是false和true。 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace InOutStudy 8 { 9 class Program10 {11 static void Main(string[] args)12 {13 ... 阅读全文

posted @ 2013-06-29 15:23 幸福框架 阅读(772) 评论(0) 推荐(0) 编辑

.NET:之前用过的一个技术架构
摘要: 阅读全文

posted @ 2013-06-23 23:55 幸福框架 阅读(530) 评论(3) 推荐(0) 编辑

DTO vs. Assembly(转载)
摘要:DTO vs. AssemblyWe probably need to make a strong statement about data transfer objects. Do we like or hate them? Well, it depends. DTOs are an excellent tool for explaining to kids the difference between theory and practice—that is, if kids can understand DTOs.DTOs are a must-have in theory; in pra 阅读全文

posted @ 2013-06-20 09:19 幸福框架 阅读(833) 评论(0) 推荐(0) 编辑

.NET:异常以及异常处理框架探析(转载)
摘要:概述 一般情况下,企业级应用都对应着复杂的业务逻辑,为了保证系统的健壮,必然需要面对各种系统业务异常和运行时异常。 不好的异常处理方式容易造成应用程序逻辑混乱,脆弱而难于管理。应用程序中充斥着零散的异常处理代码,使程序代码晦涩难懂、可读性差,并且难于维护。 一个好的异常处理框架能为应用程序的异常处理提供统一的处理视图,把异常处理从程序正常运行逻辑分离出来,以至于提供更加结构化以及可读性的程序架构。另外,一个好的异常处理框架具备可扩展性,很容易根据具体的异常处理需求,扩展出特定的异常处理逻辑。 另外,异常处理框架从一定程度上依赖并体现系统架构层次。系统架构决定了系统中各个子系统,各个层... 阅读全文

posted @ 2013-06-17 20:27 幸福框架 阅读(1676) 评论(0) 推荐(0) 编辑

.NET:栈的生长与消亡
摘要:背景多数情况下我们不需要关心栈的变化,不过个别场景下还是需要对此有所了解,如:指针操作,下文会给出一个具体的示例。另外,理解栈的变化对于理解作用域也有一定的好处,因为C#的局部变量作用域是基于栈的。栈的变化规则方法调用会导致栈的生长,具体包括两个步骤:一、插入方法返回地址(下图中的Fn:);二、将实际参数按值(可以使用ref或out修饰)拷贝并插入到栈中(可以使用虚参数访问)。遇到局部变量定义会向栈中插入局部变量。遇到return语句会导致栈消亡,一直消亡到方法返回地址,并把return的返回值设置到方法返回地址中。这里先不考虑中括号导致的栈的消亡。简单的示例最后的小测试,输出的啥内容? 1 阅读全文

posted @ 2013-06-13 23:17 幸福框架 阅读(1295) 评论(2) 推荐(3) 编辑

.NET:也谈谈.NET中的引用类型和值类型
摘要:背景引用类型和值类型的区别好像是一个经典的面试问题,也是一个非常基础的问题,今天试着写一下,一则为了以后新入职的毕业生学习,二则希望高手批评。几个事实值类型的局部变量始终分配在栈中,局部变量中存储的是值。引用类型的局部变量始终分配在栈中,局部变量中存储的是值地址(引用),地址指向的值(对象)分配在堆中。值类型的成员变量始终内敛存储在对象中(堆中),内敛存储的是值。引用类型的成员变量始终内敛存储在对象中(堆中),内敛存储的是值地址(引用),地址指向的值(对象)分配在堆中的另外一个区域。一个进程拥有多个AppDomain。一个AppDomain拥有一个堆。一个进程可以运行多个线程。一个线程拥有一个 阅读全文

posted @ 2013-06-12 23:22 幸福框架 阅读(1365) 评论(5) 推荐(1) 编辑

.NET:如何应对边界异常?
摘要:背景为什么语言引入了异常一直没有思考过这个问题,但是异常确实让我的编程生活更快乐,今天早上似乎找到了这个问题的答案:exception之于call stack就像break和continue之于while或for、就像return之于method,总结为一句话:异常只是一种返回机制。为什么异常让程序更简洁代码里只有正常的处理逻辑。 1 /// 2 /// 创建。 3 /// 4 public ActionResult Create(TAggregateRoot item) 5 { 6 t... 阅读全文

posted @ 2013-06-07 08:12 幸福框架 阅读(1996) 评论(6) 推荐(8) 编辑

.NET:离线悲观锁 之 过期策略支持
摘要:背景之前写了一篇文章防止并发修改 之 离线悲观锁代码示例(离线悲观锁),这篇文章回避了一个问题,就是如何处理用户直接关闭浏览器后导致的锁占用问题。本文就介绍一个思路。思路思路1这是之前已经提供过的思路,只是没有贴出来,就是:当会话结束的时候清除所有用户持有的锁,这会导致个别锁在会话期间被长时间占用(可能超过几个小时)。思路2引入一个后台线程,每隔指定的分钟就清理一下被长时间占用的锁,如:清理那些占用超过10分钟的锁,这回导致一定的线程成本,因为这个线程需要频繁的运行。思路3引入过期策略,是否被锁完全取决于两个条件:是否拥有锁以及是否过期,这个思路下过期的锁会成为一种垃圾,如何清理这种垃圾又是一 阅读全文

posted @ 2013-06-05 08:11 幸福框架 阅读(1273) 评论(2) 推荐(0) 编辑

.NET:防止并发修改 之 离线悲观锁代码示例(离线悲观锁)
摘要:背景系统会出现并发,上篇文章我介绍了如何使用“离线乐观锁”保证并发,离线乐观锁适合处理那些重新编辑成本不大的单据,如果某个单据用户花了10分钟进行编辑,提交时你告诉他出现并发了,他心里肯定会骂娘的,今天介绍的“离线悲观锁”就可以避免这种情况。思路小明签出了源代码,小强就不能签出了,我们目前的源代码系统就是用的这种悲观策略。实现核心代码离线悲观锁管理器接口 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Ta 阅读全文

posted @ 2013-05-30 08:12 幸福框架 阅读(2931) 评论(19) 推荐(6) 编辑

.NET:防止并发修改 之 离线乐观锁代码示例(菜鸟必读)
摘要:背景小明和小强同时签出了源代码,如果小强先提交,那么提交成功是合理的,接着小明提交了修改,这时源代码服务器就会告诉小明有人在他读取之后做了修改,问他如何处理,源代码服务器会让小明把修改合并后再提交。这就是乐观锁策略,当然源代码服务也可以配置为悲观锁以避免并行修改。合理的规避并发修改是企业应用中不能回避的问题,但现实场景是,很多团队都回避这个问题。今天我介绍一下如何使用离线乐观锁处理并发修改。相关文章:再谈在线悲观锁、离线悲观锁、在线乐观锁和离线乐观锁。思路CAS:Compare And Swap,只有当要修改的值在我读取后没有被修改,才会被交换(修改)。CAS是多线程领域的术语,比如:无锁的环 阅读全文

posted @ 2013-05-29 08:26 幸福框架 阅读(3844) 评论(27) 推荐(4) 编辑

导航

我要啦免费统计