摘要:
LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。从技术角度而言,LINQ定义了大约40个查询操作符,如select、from、in、where以及order by(C#中)。使用这些操作符可以编写查询语句。不过,这些查询还可以基于很多类型的数据,每个数据类型都需要一个单独的LINQ类型。看图,不解释 阅读全文
posted @ 2013-02-05 13:35
于为
阅读(199)
评论(0)
推荐(0)
摘要:
划分职责:根据方法实现的逻辑来安排方法所在的类。 举例理解:这个重构的方法是对单一职责原则(SRP)的贯彻,在Coding的时候,我们不仅仅需要把方法中的逻辑单一化(主要使用 Extract Method),还要把类中的方法安置合理化。比如说有个Book()的类,那么对于Book的一些操作,如增加减少书,设置书的属性那可以交给这个类做;而如另一些方法,如买书,租书就可以交给Custom()的类来处理,因为买书,租书的逻辑主体都是Custom。 项目实例:就个人而言,这个重构方法我觉得大家在Coding的时候都会注意到,因为谁都会把相关的方法放在一个类中;唯一可能出现的问题就是出现大神类(G.. 阅读全文
posted @ 2013-02-05 10:48
于为
阅读(225)
评论(0)
推荐(0)
摘要:
提取工厂类:使用一个简单工厂类来新建对象实例。 举例理解:对于一个客户端事件,我们可能需要初始化一个对象实例,并调用其中的几个方法做一系列的操作。如果客户端事件经常需要扩展,那可能每次初始化的对象实例可能都是不同的,那么为了把这个初始化对象的动作封装起来,为了使这个行为更加便于维护,我们就需要把初始化对象的动作交给简单工厂类来统一完成。 项目实例:做过一个小型的购物商城。其中有个需求简述如下:管理员可以通过后台自助增删改当前商品的打折比例和打折类型。一开始我们想的都很简单,以为用户仅仅是打折而已,OK,加个下拉列表然后里面放上1-9折就行了,然后售价X这个折数就好了。想不到设计好后,当时就.. 阅读全文
posted @ 2013-02-05 10:46
于为
阅读(238)
评论(0)
推荐(0)
摘要:
提取接口:当有多余一个类使用另外一个类中的方法时,可以考虑引入接口,解除这种依赖。 举例理解:比如说类A中有个方法为Call(Type T),类B和类C中都有方法都要调用Call这个方法,那么我们推荐引入一个接口,这样传参时可以直接new一个接口,可以解除调用方法和实现方法之间的耦合关系。面向接口编程也算是OO中比较重要的吧。 项目实例:一般而言在设计的时候,对于比较可能扩展的部分都会用接口或者是抽象方法来处理,对于接口,个人并不是很喜欢,因为接口写好了要修改就很困难,只能再加新的接口,这对设计的要求很高,抽象方法相对好用点。下面的代码扩展于原文的Demo Code,希望可以讲得稍微详细点.. 阅读全文
posted @ 2013-02-05 10:34
于为
阅读(661)
评论(0)
推荐(0)
摘要:
使用多态替换条件:指在进行类型检查和执行某些类型操作时,最好将算法封装在类中,并且使用多态来对代码中的调用进行抽象 举例理解:看定义可能比较迷糊,其实说的简单一点,对于使用分支语句并且分支条件是和类型检查相关的程序段,如 if(type == typeof(TypeA)){...}else if(type == typeof(TypeB)){...},可以把{...}中的Code,尝试放到if的条件中去。然后通过检查Type就可以直接返回需要的东东了,这样做可以利用已有的继承层次进行计算,比较便于维护。如果还是觉得说的太抽象,可以看看下面的代码感觉一下。 项目实例:用WPF做一个网游的客户.. 阅读全文
posted @ 2013-02-05 10:30
于为
阅读(381)
评论(0)
推荐(0)
摘要:
封装集合:将集合中的某些方法封装起来,这些方法一般会牵扯到其他的逻辑。 举例理解:比如你给一个List<T>里面加一个对象的同时,可能还有一个计数器在计算List中对象的个数,我们不用暴露计数器,这样List.Add()和List.Remove()我们就可以封装起来了。 项目实例:我记得我有个项目需要不断的从数据库中读取User的Guid然后狂发Mail。开始的想法很简单,根据Window ID 去 CorpDirectory 抓Guid和Mail Address就好了。实际情况也就这么简单,但是后来Debug的时候发现程序很慢,弄了半天终于发现是这个抓Guid和Mail的动作太慢 阅读全文
posted @ 2013-02-05 10:25
于为
阅读(276)
评论(0)
推荐(0)
摘要:
5.提取主类:提取一个基类,抽象出共有方法,比较常用的重构,这里的基类也许并不存在,需要自己新建立。 用法场景:当有一个类中的某个方法需要经常被其他的类调用的时候,说明这个方法重用率很高,可以考虑把它抽象出来,放到一个基类中。//重构前publicclass Dog{ publicvoid EatFood() { // eat some food } publicvoid Groom() { // perform grooming }}//重构后publicclass Animal{ ... 阅读全文
posted @ 2013-02-05 10:21
于为
阅读(145)
评论(0)
推荐(0)
摘要:
本文主要讲几个涉及到继承方面的重构,继承一般会涉及到抽象类,接口,我们通常把有相似Func的类提取同类项,也就是抽象出接口或者抽象类;这样做的好处不言而喻,可以方便的扩展,修改,维护子类的共有方法,属性,索引等等。使用基类不仅仅是把各个子类联系起来了,更是降低了各个子类间的耦合度,再次体现了面向接口、继承编程的思想。 1.提升方法:指将方法向继承链的上层迁移的过程。 用法场景:当子类A中的一个方法需要被多个子类调用的时候,需要把这个方法提升到基类中,而不能让其它的子类都去Call子类A中的这个方法。这样做唯一的缺点是扩充了基类的接口、增加了其复杂性,因此需谨慎使用。只有当一个以上的子类需... 阅读全文
posted @ 2013-02-05 10:17
于为
阅读(190)
评论(0)
推荐(0)
摘要:
概念:本文中的”使用多态代替条件判断”是指如果你需要检查对象的类型或者根据类型执行一些操作时,一种很好的办法就是将算法封装到类中,并利用多态性进行抽象调用。正文:本文展示了面向对象编程的基础之一“多态性”, 有时你需要检查对象的类型或者根据类型执行一些操作时,一种很好的办法就是将算法封装到类中,并利用多态性进行抽象调用。如下代码所示,OrderProcessor类的ProcessOrder方法根据Customer的类型分别执行一些操作,正如上面所讲的那样,我们最好将OrderProcessor类中这些算法(数据或操作)封装在特定的Customer 子类中。using System;using 阅读全文
posted @ 2013-02-05 10:15
于为
阅读(233)
评论(0)
推荐(0)
摘要:
概念: 本文中的”尽快返回”是指把原来复杂的条件判断等语句用尽快返回的方式简化代码。正文:如首先声明的是前面讲的”分解复杂判断“,简单的来说,当你的代码中有很深的嵌套条件时,花括号就会在代码中形成一个长长的箭头。我们经常在不同的代码中看到这种情况,并且这种情况也会扰乱代码的可读性。下代码所示,HasAccess方法里面包含一些嵌套条件,如果再加一些条件或者增加复杂度,那么代码就很可能出现几个问题:1,可读性差 2,很容易出现异常 3,性能较差using System.Collections.Generic;using System.Linq;using LosTechies.DaysOfRef 阅读全文
posted @ 2013-02-05 10:14
于为
阅读(233)
评论(0)
推荐(0)
摘要:
概念:本文中的”去除中间人对象”是指把 在中间关联而不起任何其他作用的类移除,让有关系的两个类直接进行交互。正文:有些时候在我们的代码会存在一些”幽灵类“,设计模式大师Fowler称它们为“中间人”类,“中间人”类除了调用别的对象之外不做任何事情,所以“中间人”类没有存在的必要,我们可以将它们从代码中删除,从而让交互的两个类直接关联。如下代码所示,Consumer类要得到AccountDataProvider的数据,但中间介入了没起任何作用的AccountManager类来关联,所以我们应当移除。using LosTechies.DaysOfRefactoring.PullUpField.Af 阅读全文
posted @ 2013-02-05 10:13
于为
阅读(197)
评论(0)
推荐(0)
摘要:
概念:本文中的”为布尔方法命名”是指如果一个方法带有大量的bool参数时,可以根据bool参数的数量,提取出若干个独立的方法来简化参数。正文:我们现在要说的重构并不是普通字面意义上的重构,它有很多值得讨论的地方。当一个方法带有大量的bool参数时,会导致方法很容易被误解并产生非预期的行为,根据布尔型参数的数量,我们可以决定提取出若干个独立的方法来。具体代码如下:using LosTechies.DaysOfRefactoring.BreakResponsibilities.After;namespace LosTechies.DaysOfRefactoring.SampleCode.Renam 阅读全文
posted @ 2013-02-05 10:12
于为
阅读(201)
评论(0)
推荐(0)
摘要:
概念:本文中的”去除上帝类”是指把一个看似功能很强且很难维护的类,按照职责把自己的属性或方法分派到各自的类中或分解成功能明确的类,从而去掉上帝类。正文:我们经常可以在一些原来的代码中见到一些类明确违反了SRP原则(单一原则),这些类通常以“Utils”或“Manager”后缀结尾,但有时这些类也没有这些特征,它仅仅是多个类多个方法的组合。另一个关于上帝类的特征是通常这些类中的方法被用注释分隔为不同的分组。那么久而久之,这些类被转换为那些没有人愿意进行归并到合适类的方法的聚集地,对这些类进行重构是将类中的代码按照职责分派到各自的类中,这样就解除了上帝类,也减轻了维护的负担。using Syste 阅读全文
posted @ 2013-02-05 10:11
于为
阅读(204)
评论(0)
推荐(0)
摘要:
概念:本文中的”避免双重否定”是指把代码中的双重否定语句修改成简单的肯定语句,这样即让代码可读,同时也给维护带来了方便。正文:避免双重否定重构本身非常容易实现,但我们却在太多的代码中见过因为双重否定降低了代码的可读性以致于非常让人容易误解真正意图。存在双重否定的代码具有非常大的危害性,因为这种类型的代码容易引起错误的假设,错误的假设又会导致书写出错误的维护代码,最终会导致bug产生。具体可以看下面的代码:using System.Collections.Generic;using LosTechies.DaysOfRefactoring.SampleCode.BreakMethod.Aft.. 阅读全文
posted @ 2013-02-05 10:10
于为
阅读(206)
评论(0)
推荐(0)
摘要:
概念:本文中的”引入契约式设计”是指我们应该对应该对输入和输出进行验证,以确保系统不会出现我们所想象不到的异常和得不到我们想要的结果。正文:契约式设计规定方法应该对输入和输出进行验证,这样你便可以保证你得到的数据是可以工作的,一切都是按预期进行的,如果不是按预期进行,异常或是错误就应该被返回,下面我们举的例子中,我们方法中的参数可能会值为null的情况,在这种情况下由于我们没有验证,NullReferenceException异常会报出。另外在方法的结尾处我们也没有保证会返回一个正确的decimal值给调用方法的对象。using System;using System.Collections. 阅读全文
posted @ 2013-02-05 10:09
于为
阅读(160)
评论(0)
推荐(0)
摘要:
概念:本文中的”分解复杂判断”是指把原来复杂的条件判断等语句用尽快返回等方式简化代码。正文:简单的来说,当你的代码中有很深的嵌套条件时,花括号就会在代码中形成一个长长的箭头。我们经常在不同的代码中看到这种情况,并且这种情况也会扰乱代码的可读性。如下代码所示,HasAccess方法里面包含一些嵌套条件,如果再加一些条件或者增加复杂度,那么代码就很可能出现几个问题:1,可读性差。 2,很容易出现异常。 3,性能较差。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 阅读全文
posted @ 2013-02-05 10:08
于为
阅读(241)
评论(0)
推荐(0)
摘要:
概念:本文中的“引入参数对象”是指当一个方法的参数过多或者过为复杂时,可以考虑把这些参数封装成一个单独的类。正文:如果一个方法所需要的参数大于5个,理解该方法的签名就变得比较困难,因为这样感觉参数很长、样式不好并且没有分类,所以我们有必要把参数进行封装。namespace LosTechies.DaysOfRefactoring.SampleCode.ParameterObject.Before{ public class Registration { public void Create(decimal amount, Student student, IEnume... 阅读全文
posted @ 2013-02-05 10:07
于为
阅读(328)
评论(0)
推荐(0)
摘要:
概念:本文中的”分解方法”是指把我们所做的这个功能不停的分解方法,直到将一个大方法分解为名字有意义且可读性更好的若干个小方法。正文:如下代码所示,因为现实中AcceptPayment方法不会做这么多的事情。,所以我们通过几次分解将 AcceptPayment拆分成若干个名字有意义且可读性更好的小方法。using System.Collections.Generic;using System.Linq;namespace LosTechies.DaysOfRefactoring.SampleCode.BreakMethod.Before{ public class CashRegister... 阅读全文
posted @ 2013-02-05 10:06
于为
阅读(237)
评论(0)
推荐(0)
摘要:
概念:本文中的”合并继承”是指如果子类的属性和方法也适合于基类,那么就可以移除子类,从而减少依赖关系。正文:上一篇我们讲到“提取子类”重构是指当基类中的一个责任不被所有的子类所需要时,将这些责任提取到合适的子类中。而我们今天所要讲的的“合并继承”重构一般用在当我们觉得不需要子类的时候。如下代码所示,StudentWebSite子类除了有一个属性用来说明网站是否是活动的外没有别的责任,在这种情形下我们意识到IsActive属性可以应用到所有的网站,所以我们可以将IsActive属性上移到基类中,并去掉StudentWebSite类。using System.Collections.Generic 阅读全文
posted @ 2013-02-05 10:05
于为
阅读(199)
评论(0)
推荐(0)
摘要:
概念:本文中的”提取子类”是指把基类中的一些不是所有子类都需要访问的方法调整到子类中。正文:当你的基类中存在一些方法不是所有的子类都需要访问,你想将它们调整到子类中时,这个重构会变得很有用了。如下代码所示,我们需要一个 Registration类用来处理学生选课的信息。但是当Registration类开始工作后,我们意识到我们会在两种不同的上下文中使用Registration类,NonRegistrationAction和Notes只有在我们处理未注册情况下才用到。所以我们将NonRegistration和Notes提到单独的NonRegistration类中。using System;nam 阅读全文
posted @ 2013-02-05 10:04
于为
阅读(207)
评论(0)
推荐(0)
摘要:
概念:本文中的“提取工厂类”是指如果要创建的对象很多,则代码会变的很复杂。一种很好的方法就是提取工厂类。正文:一般来说我们需要在代码中设置一些对象,以便获得它们的状态,从而使用对象,所谓的设置通常来说就是创建对象的实例并调用对象的方法。有时如果要创建的对象很多,则代码会变的很复杂。这便是工厂模式发挥作用的情形。工厂模式的复杂应用是使用抽象工厂创建对象集,但我们在这里只是使用基本的工厂类创建对象的一个简单应用。如下代码所示,New方法包含创建类的整个逻辑,如果现在要创建的类比较多而且逻辑比较复杂的话(如根据不同条件创建对象,什么时候创建对象),我们的New方法逻辑会变得很大,同时代码也变得很难维 阅读全文
posted @ 2013-02-05 10:03
于为
阅读(177)
评论(0)
推荐(0)
摘要:
概念:本文中的“使用条件判断代替异常”是指把没有必要使用异常做判断的条件尽量改为条件判断。正文:如下代码所示,在日常的编码中我们经常需要用到异常来控制程序流,Start方法里面用trycatch做条件判断,我们知道这里没有必要使用这种方式,因为你不需要做类型不可控的类型转换,也不需要处理异常行为,所以我们应该对它进行重构。namespace LosTechies.DaysOfRefactoring.ReplaceException.Before{ public class Microwave { private IMicrowaveMotor Motor { get;... 阅读全文
posted @ 2013-02-05 10:02
于为
阅读(182)
评论(0)
推荐(0)
摘要:
概念:本文中的“提取父类”是指类中有一些字段或方法,你想把它们提取到父类中以便同一继承层次的其它类也可以访问他们,这个和之前的很多重构有异曲同工之处。正文:Dog类中的EatFood和Groom有可能被其他类用到,因为他们都是动物的一些公有性质,所以这个时候我们就会考虑对它进行提炼。namespace LosTechies.DaysOfRefactoring.ExtractSuperclass.Before{ public class Dog { public void EatFood() { // eat some food ... 阅读全文
posted @ 2013-02-05 10:01
于为
阅读(174)
评论(0)
推荐(0)
摘要:
概念:本文中的“封装条件”是指条件关系比较复杂时,代码的可读性会比较差,所以这时我们应当根据条件表达式是否需要参数将条件表达式提取成可读性更好的属性或者方法,如果条件表达式不需要参数则可以提取成属性,如果条件表达式需要参数则可以提取成方法。正文:如下代码所示,PerformCoolFunction里面的if条件判断比较复杂,看起来有点杂乱,所以就把它提出来。using System;namespace LosTechies.DaysOfRefactoring.EncapsulateConditional.Before{ public class RemoteControl { ... 阅读全文
posted @ 2013-02-05 10:00
于为
阅读(169)
评论(0)
推荐(0)
摘要:
概念:本文中的“移除重复内容”是指把一些很多地方都用到的逻辑提炼出来,然后提供给调用者统一调用。正文:如下代码所示,ArchiveRecord和CloseRecord都会用到Archived =true; 和DateArchived =DateTime.Now; 这两条语句,所以我们就可以对它进行重构。using System;namespace LosTechies.DaysOfRefactoring.RemoveDuplication.Before{ public class MedicalRecord { public DateTime DateArchived... 阅读全文
posted @ 2013-02-05 09:59
于为
阅读(200)
评论(0)
推荐(0)
摘要:
概念:本文中的“分离职责”是指当一个类有许多职责时,将部分职责分离到独立的类中,这样也符合面向对象的五大特征之一的单一职责原则,同时也可以使代码的结构更加清晰,维护性更高。正文:如下代码所示,Video类有两个职责,一个是处理video rental,另一个是计算每个客户的总租金。我们可以将这两个职责分离出来,因为计算每个客户的总租金可以在Customer计算,这也比较符合常理。usingSystem.Collections.Generic;usingSystem.Linq;namespaceLosTechies.DaysOfRefactoring.BreakResponsibilities. 阅读全文
posted @ 2013-02-05 09:58
于为
阅读(151)
评论(0)
推荐(0)
摘要:
概念:本文中的“提取方法对象”是指当你发现一个方法中存在过多的局部变量时,你可以通过使用“提取方法对象”重构来引入一些方法,每个方法完成任务的一个步骤,这样可以使得程序变得更具有可读性。正文:如下代码所示,Order类中的Calculate方法要完成很多功能,在之前我们用“提取方法”来进行重构,现在我们采取“提取方法对象”来完成重构。using System.Collections.Generic;namespace LosTechies.DaysOfRefactoring.ExtractMethodObject.Before{ public class OrderLineItem ... 阅读全文
posted @ 2013-02-05 09:57
于为
阅读(158)
评论(0)
推荐(0)
摘要:
概念:本文中的“分解依赖” 是指对部分不满足我们要求的类和方法进行依赖分解,通过装饰器来达到我们需要的功能。正文:正如下面代码所示,如果你要在你的代码中加入单元测试但有一部分代码是你不想测试的,那么你应用使用这个的重构。下面的例子中我们应用静态类来完成某些工作,但问题是在单元测试时我们无法mock静态类,所以我们只能引入静态类的装饰接口来分解对静态类的依赖。从而我们使我们的调用类只需要依赖于装饰接口就能完成这个操作。namespace LosTechies.DaysOfRefactoring.BreakDependencies.Before{ public class AnimalFee... 阅读全文
posted @ 2013-02-05 09:56
于为
阅读(183)
评论(0)
推荐(0)
摘要:
概念:本文中的“使用策略类” 是指用设计模式中的策略模式来替换原来的switch case和if else语句,这样可以解开耦合,同时也使维护性和系统的可扩展性大大增强。正文:如下面代码所示,ClientCode类会更加枚举State的值来调用ShippingInfo的不同方法,但是这样就会产生很多的判断语句,如果代码量加大,类变得很大了的话,维护中改动也会变得很大,每次改动一个地方,都要对整个结构进行编译(假如是多个工程),所以我们想到了对它进行重构,剥开耦合。namespace LosTechies.DaysOfRefactoring.SwitchToStrategy.Before{ .. 阅读全文
posted @ 2013-02-05 09:55
于为
阅读(176)
评论(0)
推荐(0)
摘要:
概念:本文中的把某些计算复杂的过程按照功能提取成各个小方法,这样就可以使代码的可读性、维护性得到提高。正文:如下代码所示,CalculateGrandTotal方法里面包含了多个逻辑,第一计算subTotal 的总和,第二subTotal 要循环减去discount,也就是计算Discounts,第三就是计算Tax。所以我们可以根据功能把他们拆分成三个小方法。using System.Collections.Generic;namespace LosTechies.DaysOfRefactoring.ExtractMethod.Before{ public class Receipt ... 阅读全文
posted @ 2013-02-05 09:54
于为
阅读(139)
评论(0)
推荐(0)
摘要:
概念:本文中的“提取接口” 是指超过一个的类要使用某一个类中部分方法时,我们应该解开它们之间的依赖,让调用者使用接口,这很容易实现也可以降低代码的耦合性。正文:如下代码所示,RegistrationProcessor类只使用到了ClassRegistration类中的Create方法和Total 字段,所以可以考虑把他们做成接口给RegistrationProcessor调用。namespace LosTechies.DaysOfRefactoring.ExtractInterface.Before{ public class ClassRegistration { ... 阅读全文
posted @ 2013-02-05 09:53
于为
阅读(181)
评论(0)
推荐(0)
摘要:
概念:本文中的“使用委派代替继承”是指在根本没有父子关系的类中使用继承是不合理的,可以用委派的方式来代替。如下代码所示,Child和Sanitation(公共设施)是没有逻辑上的父子关系,因为小孩不可能是一个公共设施吧!所以我们为了完成这个功能可以考虑使用委派的方式。namespace LosTechies.DaysOfRefactoring.ReplaceInheritance.Before{ public class Sanitation { public string WashHands() { return "Cleaned... 阅读全文
posted @ 2013-02-05 09:52
于为
阅读(213)
评论(0)
推荐(0)
摘要:
概念:本文中的改名(方法,类,参数)是指在写代码的时候对类、方法、参数、委托、事件等等元素取一个有意义的名称。正文:如下代码所示,加入一个公司建立一个员工的类,类中有一个员工名字的字段和一个按照小时计算员工收入的方法,那么下面代码的取名就显得很难理解了,所以我们会重构名称。namespace LosTechies.DaysOfRefactoring.Rename.Before{ public class Person { public string FN { get; set; } public decimal ClcHrlyPR() { ... 阅读全文
posted @ 2013-02-05 09:51
于为
阅读(238)
评论(0)
推荐(0)
摘要:
概念:本文中的降低字段和前篇的提升字段正好相反,就是把基类中只有某些少数类用到的字段降低到使用它们的子类中。正文:如下代码所示,基类Task类中的_resolution字段只会在子类BugTask中用到,所以就考虑把它放到BugTask类中。namespace LosTechies.DaysOfRefactoring.PushDownField.Before{ public abstract class Task { protected string _resolution; } public class BugTask : Task { } ... 阅读全文
posted @ 2013-02-05 09:50
于为
阅读(163)
评论(0)
推荐(0)
摘要:
概念:本文中的降低方法和前篇的提升方法整好相反,也就是把个别子类使用到的方法从基类移到子类里面去。正文:如下代码所示,Animal类中的方法Bark只有在其子类Dog中使用,所以最好的方案就是把这个方法移到子类Dog中。namespace LosTechies.DaysOfRefactoring.PushDownMethod.Before{ public abstract class Animal { public void Bark() { // code to bark } } public class... 阅读全文
posted @ 2013-02-05 09:49
于为
阅读(147)
评论(0)
推荐(0)
摘要:
概念:本文中的提升字段和前面的提升方法颇为相似,就是把子类公用的字段提升到基类中,从而达到公用的目的。正文:如下代码所示,Account的两个子类CheckingAccount和SavingsAccount都有minimumCheckingBalance 字段,所以可以考虑把这个字段提到基类中。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace LosTechies.DaysOfRefactoring.PullUpField.Before{ public a... 阅读全文
posted @ 2013-02-05 09:49
于为
阅读(158)
评论(0)
推荐(0)
摘要:
摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的。记得当时一口气看完了整个系列并没有多少感觉,因为这些基本上项目都在使用,只是我们没有专门把它标示和整理出来,所以也没有引起多大的重视。现在突然接手这个重构项目,由于团队成员技术和经验参差不齐,所以有必要专门整理一个重构的纲要,当然这个系列也非常适合做新系统的代码规范参考,只要有代码的地方,这个重构规范就很有价值。周末也不想出去闲逛,因为在刚到这个美丽的城市,没有亲戚或者朋友,所以才能静下心 阅读全文
posted @ 2013-02-05 09:48
于为
阅读(191)
评论(0)
推荐(0)
摘要:
摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的。记得当时一口气看完了整个系列并没有多少感觉,因为这些基本上项目都在使用,只是我们没有专门把它标示和整理出来,所以也没有引起多大的重视。现在突然接手这个重构项目,由于团队成员技术和经验参差不齐,所以有必要专门整理一个重构的纲要,当然这个系列也非常适合做新系统的代码规范参考,只要有代码的地方,这个重构规范就很有价值。周末也不想出去闲逛,因为在刚到这个美丽的城市,没有亲戚或者朋友,所以才能静下心 阅读全文
posted @ 2013-02-05 09:47
于为
阅读(164)
评论(0)
推荐(0)
摘要:
摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的。记得当时一口气看完了整个系列并没有多少感觉,因为这些基本上项目都在使用,只是我们没有专门把它标示和整理出来,所以也没有引起多大的重视。现在突然接手这个重构项目,由于团队成员技术和经验参差不齐,所以有必要专门整理一个重构的纲要,当然这个系列也非常适合做新系统的代码规范参考,只要有代码的地方,这个重构规范就很有价值。周末也不想出去闲逛,因为在刚到这个美丽的城市,没有亲戚或者朋友,所以才能静下心 阅读全文
posted @ 2013-02-05 09:46
于为
阅读(213)
评论(0)
推荐(0)
摘要:
前言 本博没有转载的习惯,但鉴于已经很久不做海康视频监控的二次开发,又有许多网友找到我和我交流,还鼓励他们也把他们的心得写下来与大家一起分享,所以建立此贴把大家都关联起来。本贴持续更新,欢迎把自己文章的链接发给我,感谢大家的支持!正文 一、C++ 1.1 网友yanyanzi519@126.com的文章 (2012-3-16 添加): 1.1.1 流媒体二次开发 -- C++ 1.1.2 流媒体开发 -- C# 二、C# DVR【推荐】官方设备网络SDK_Java C# Demo C#版 海康威视客户端Demo 板卡 三、补充201... 阅读全文
posted @ 2013-02-05 09:37
于为
阅读(2053)
评论(2)
推荐(0)
摘要:
正文1.IntPtr转换成byte[]publicbyte[]ConvertToBytes(IntPtrdataBuf,intlength){byte[]byteBuf=newbyte[length];Marshal.Copy(dataBuf,byteBuf,0,length);returnbyteBuf;}2.读写INI文件一般用于读写配置文件///<summary>///读写INI文件///</summary>publicclassIniFile{///<summary>///文件INI名称///</summary>publicstringP 阅读全文
posted @ 2013-02-05 09:36
于为
阅读(515)
评论(0)
推荐(0)
摘要:
前言视频监控的分屏技术实际上就是通过动态Panel + 动态指定其Location和Size来实现的,还需要一个计算分屏数目的算法,本文将弥补视频监控系列中动态分屏的功能,权当续文吧 : )正文1.先“上菜”再讲做法:——上图~~2.动态Panel///<summary>///动态创建面板///</summary>///<paramname="xy">Panel的XY坐标</param>///<paramname="wh">Panel的大小</param>privatePanelCr 阅读全文
posted @ 2013-02-05 09:35
于为
阅读(637)
评论(0)
推荐(1)
摘要:
前言 PlayCtrl.dll都忘记到底是朋友翻的还是自己翻的了,有朋友需要,我就贴上来吧。正文 一、文件下载 注意:文件可能随时更新,欢迎使用中遇到问题及时反馈给我。下载后把后缀改成.cs就行了。 HikPlayer.txt 二、部分API///<summary>///播放器///</summary>publicsealedclassHikPlayer{#regionConstMemberVariables//#defineWINVER//0x0700Windows7//0x0600WindowsVista//0x0502Windows2003Server//0x04 阅读全文
posted @ 2013-02-05 09:34
于为
阅读(442)
评论(0)
推荐(0)

浙公网安备 33010602011771号