[03] 设计模式

摘要: 在上篇文章中我们谈到:当我们通过应用DependencyAttribute特性定义需要自动注入的属性的时候,当这个属性为接口、抽象类或者没有定义无参的构造函数,无论我们调用PIAB的Create方法去创建一个新的对象,还是调用Wrap方法对现有对象进行封装,都会抛出异常。如果说在前文中,我们还对这是否是个BUG抱着“谨慎”的态度,那么在这篇文章中,可以肯定地告诉你:这是一个BUG,而且是一个“致命”的BUG。阅读全文
posted @ 2010-09-22 13:39 Artech 阅读(2627) | 评论 (22) 编辑
摘要: 在《这是EnterLib PIAB的BUG吗?》一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题。问题的起因源于《IoC+AOP的简单实现》这篇文章,因为文中给出的解决方案仅仅支持构造器注入,而不能支持属性注入和方法注入——这是由于EnterLib的PIAB设计本身就存在缺陷。阅读全文
posted @ 2010-09-20 22:44 Artech 阅读(2259) | 评论 (29) 编辑
摘要: 之前园子里也有一些介绍企业库的文章,其中也不乏对Unity的介绍。虽然微软官方声称其为轻量级的IoC框架,但是并不意味着Unity会很简单。相反,也正是因为复杂性,很多人撰文介绍Unity的时候,往往为了面面俱到,导致很多读者不知所云。最终的结果是,了解Unity的读者能够看懂,不懂的人读了还是不懂。在本篇文章中,我试着换一种介绍方式:抓住Unity最本质的东西,剔除一些细枝末节,希望以一种全新的视角让读者了解Unity的本质。阅读全文
posted @ 2010-07-13 22:39 Artech 阅读(7331) | 评论 (51) 编辑
摘要: 继EnterLib 4.1之后,微软P&P部门于几天前成功发布了最新版本的EnterLib 5.0。EnterLib 5.0没有增加新的Application Block,主要对现有Application进行了重构和加强,已经对配置的改进。最主要的还是通过IoC让整个EnterLib具有更好的可可扩展性。5.0并将Unity这个IoC容器融入了EnterLib中,并给你创建增加的IoC容器的机会。阅读全文
posted @ 2010-04-23 10:49 Artech 阅读(5529) | 评论 (13) 编辑
摘要: 之前写了一篇名称为《谈谈关于MVP模式中V-P交互问题》的文章,主要表达本人对于MVP模式下V|P关系,以及它们之间的交互应该采用怎样的原则和方式的看法。园子里的朋友对此展开了一些讨论,尤其是是一个叫做非空的朋友转述了另一篇文章提出的关于CAB中关于MVP模式的14条规则,和本人的观点有很多相似之处,当然也有一些不一致的地方。为此,在本篇文章中,就此进行一些必要的补充。阅读全文
posted @ 2010-04-12 23:56 Artech 阅读(4417) | 评论 (57) 编辑
摘要: In my current project the MVP pattern is used in the supervising controller mode. The MVP pattern is an adaption of the old MVC pattern that incorporates that the capabilities of WinForms views have become smart enough to lift some of the burdens previously implemented in the controller. This applies to e.g. handling click events and data-binding; a presenter only injects the model into the view which阅读全文
posted @ 2010-04-12 16:39 Artech 阅读(1344) | 评论 (1) 编辑
摘要: 在差不多两年的时间内,我们项目组几十来号人都扑在一个项目上面。这是一个基于SCSF的项目,客户是墨尔本一家事业单位。前两周,我奉命负责对某个模块进行审核工作,在此期间,发现了一些问题,也有了一些想法。不过,有些想法可能还不是很成熟,不能完全保证其正确性,有机会写出来讨论一下。今天来说说关于MVP的一些想法。阅读全文
posted @ 2010-03-25 22:38 Artech 阅读(3817) | 评论 (58) 编辑
摘要: 通过上一篇了解了模块内基本的层次划分之后,接下来我们来聊聊PetShop中一些基本基础功能的实现,以及一些设计、架构上的应用如何同WCF进行集成。本篇讨论两个问题:实现分布式的Membership和客户端到服务端上下文(Context)的传递。阅读全文
posted @ 2009-12-07 18:30 Artech 阅读(2541) | 评论 (21) 编辑
摘要: 上篇中我们谈到:将一个生命周期较短的对象(对象A)注册到一个生命周期较长(对象B)的某个事件(Event)上,两者便无形之间建立一个引用关系(B引用A)。这种引用关系导致GC在进行垃圾回收的时候不会将A是为垃圾对象,最终使其常驻内存(或者说将A捆绑到B上,具有了和B一样的生命周期)。这种让无用的对象不能被GC垃圾回收的现象,在托管环境下就是一种典型的内存泄漏问题。我们今天将会着重解释其背后的原因。阅读全文
posted @ 2009-12-06 22:57 Artech 阅读(3980) | 评论 (32) 编辑
摘要: 上一篇文章主要讨论的是PetShop的模块划分,在这一篇文章中我们来讨论在一个模块中如何进行层次划分。模块划分应该是基于功能的,一个模块可以看成是服务于某项功能的所有资源的集合;层次划分侧重于关注点分离(SoC:Separation of Concern ),让某一层专注于某项单一的操作,以实现重用性、可维护性、可测试性等相应的目的。阅读全文
posted @ 2009-12-01 19:57 Artech 阅读(4451) | 评论 (34) 编辑
摘要: 在《WCF技术剖析(卷1)》的最后一章,我写了一个简单基于WCF的Web应用程序,该程序模拟一个最简单的网上订购的场景,所以我将其命名为PetShop。PetShop的目在于让读者体会到在真正的项目开发中,如何正确地、有效地使用WCF。在这个应用中,还会将个人对设计的一些总结融入其中,希望能够对读者有所启发。阅读全文
posted @ 2009-11-30 19:22 Artech 阅读(8682) | 评论 (97) 编辑
摘要: 在EnteLib中,PIAB(Policy Injection Application Block)和Unity的定位是轻量级的AOP框架和IoC容器(Container)。通过PIAB,我们可以将一些业务无关的crosscutting concern定义于相应的CallHandler中,通过Attribute声明或者配置应用到承载业务逻辑的目标方法上。而通过Unity提供的IoC容器(或者DI容器),即UnityContainer,很好地实现了依赖的动态注入,从而实现了组件之间、模块之间或者服务之间的松耦合。在本篇文章中,我们将关注如何将两者有机地关联起来。阅读全文
posted @ 2009-06-28 23:12 Artech 阅读(4903) | 评论 (21) 编辑
摘要: 基于Enterprise Library PIAB的AOP框架已经在公司项目开发中得到广泛的使用,但是最近同事维护一个老的项目,使用到了Enterprise Library 2,所以PIAB是在Enterprise Library 3.0中推出的,所以不同直接使用。为了解决这个问题,我写了一个通过方法劫持(Method Interception)的原理,写了一个简易版的AOP框架。阅读全文
posted @ 2008-11-27 15:13 Artech 阅读(7357) | 评论 (36) 编辑