[05] 开源框架

摘要: Unity是微软P&P部门开发的一个轻量级IoC框架,通过Interception机制可以实现基于三种拦截机制的AOP。不过Unity仅仅提供“显式”拦截机制,以致我们为了注册可被拦截的类型会多写很多代码和配置。本篇文章通过UnityContainer的扩展提供了一种“自动”拦截机制。阅读全文
posted @ 2011-12-01 23:12 Artech 阅读(2074) | 评论 (14) 编辑
摘要: 个人觉得EnterLib的EHAB是一个不错的异常处理框架,借助于EHAB,我们可以配置的方式来自定义异常处理策略,从而带来最大的灵活性和可维护性。但是,在我看来,EHAB有一个最大的局限,就是异常处理策略的粒度过大——只能提供基于异常类型级别。本篇文章通过一个自定义异常处理器很好地解决了这个问题。阅读全文
posted @ 2010-09-25 16:49 Artech 阅读(2731) | 评论 (30) 编辑
摘要: 在上篇文章中我们谈到:当我们通过应用DependencyAttribute特性定义需要自动注入的属性的时候,当这个属性为接口、抽象类或者没有定义无参的构造函数,无论我们调用PIAB的Create方法去创建一个新的对象,还是调用Wrap方法对现有对象进行封装,都会抛出异常。如果说在前文中,我们还对这是否是个BUG抱着“谨慎”的态度,那么在这篇文章中,可以肯定地告诉你:这是一个BUG,而且是一个“致命”的BUG。阅读全文
posted @ 2010-09-22 13:39 Artech 阅读(2627) | 评论 (22) 编辑
摘要: 之前园子里也有一些介绍企业库的文章,其中也不乏对Unity的介绍。虽然微软官方声称其为轻量级的IoC框架,但是并不意味着Unity会很简单。相反,也正是因为复杂性,很多人撰文介绍Unity的时候,往往为了面面俱到,导致很多读者不知所云。最终的结果是,了解Unity的读者能够看懂,不懂的人读了还是不懂。在本篇文章中,我试着换一种介绍方式:抓住Unity最本质的东西,剔除一些细枝末节,希望以一种全新的视角让读者了解Unity的本质。阅读全文
posted @ 2010-07-13 22:39 Artech 阅读(7331) | 评论 (51) 编辑
摘要: 微软EnterLib的PIAB是一个比较好用的轻量级的AOP框架,自身也提供了一系列的CallHandler,其中CachingCallHandler直接利用HttpRuntime的Cache实现了基于方法级别的缓存。但是,PIAB发布到现在,CachingCallHandler就一直存着一个问题:如果目标方法具有Out参数并且返回类型不是void,会抛出IndexOutOfRangeException,如果返回类型为void,out参数也不会被缓存。不知道微软对此作何考虑,反正我觉得这是一个不可原谅的Bug。阅读全文
posted @ 2009-12-21 23:07 Artech 阅读(1749) | 评论 (23) 编辑
摘要: Enterprise Library是微软P&P部门开发的众多Open source框架中的一个,最新的版本已经出到了4.1。由于接触Enterprise Library已经有很长的一段时间,在实际的项目中使用的频率也很高。对此有了一些积累,希望通过这个新的系列和广大网友一起分享和交流。本系列假设读者已经对Enterprise Library有一定的了解,故而不会对各个Application Block的基本原理和编程模型进行介绍,而把侧重点放在Enterprise Library深层次的实现原理、设计模式的应用、有效扩展和最佳实践上阅读全文
posted @ 2009-11-21 18:12 Artech 阅读(6429) | 评论 (1) 编辑
摘要: 在上篇中,我详细介绍了如何通过自定义ClientMessageInspector和ErrorHandler,实现WCF与微软企业库中的Exception Handling Application Block(EHAB)之间的集成。本篇中,我们对其加以改进,使你不需要再为每个操作应用相同的FaultContractAttribute。阅读全文
posted @ 2009-11-18 20:49 Artech 阅读(2501) | 评论 (5) 编辑
摘要: 在《WCF技术剖析(卷1)》的最后一章,我给出了一个具体的应用WCF的分布式应用实例,我把这个实例命名为PetShop。看过本书的读者,一定还记得我还通过WCF扩展实现了于微软企业库(Enterprise Library)异常处理应用块(Exception Handling Application Block:EHAB)的集成,现在我们可以详细来讲述这是如何实现的。阅读全文
posted @ 2009-11-16 00:20 Artech 阅读(2379) | 评论 (14) 编辑
摘要: 在这之前,我写过深入介绍MS EnterLib PIAB的文章(参阅《MS Enterprise Library Policy Injection Application Block 深入解析[总结篇]》),也写过WCF与PIAB的集成(参阅:《WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成》)、WCF与Unity的集成(参阅《WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成》)以及Unity与PIAB的集成(参阅《Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block的集成》、阅读全文
posted @ 2009-06-29 16:03 Artech 阅读(5422) | 评论 (57) 编辑
摘要: 在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) 编辑
摘要: 开门见山,使用MS Enterprise Library的DAAB(Data Access Application Block)获取数据时抛出异常。具体场景如下,通过Database对象的ExecuteReader执行两段Select语句,前一句是不合法的,后一句是正确的。为了避免第一次执行出错导致程序的终止,特意将其放到Try/Catch酷快中。两次数据库操作通过TrsanctionScope的形式纳入同一个Transaction中,具体的代码如下所示。 阅读全文
posted @ 2009-04-22 15:36 Artech 阅读(2927) | 评论 (24) 编辑
摘要: 基于Enterprise Library PIAB的AOP框架已经在公司项目开发中得到广泛的使用,但是最近同事维护一个老的项目,使用到了Enterprise Library 2,所以PIAB是在Enterprise Library 3.0中推出的,所以不同直接使用。为了解决这个问题,我写了一个通过方法劫持(Method Interception)的原理,写了一个简易版的AOP框架。阅读全文
posted @ 2008-11-27 15:13 Artech 阅读(7357) | 评论 (36) 编辑
摘要: 这个工具执行一组批处理,也可以看成是一个Sequential Workflow的执行器,我把它成为Batch Job Executor。在使用Batch Job Executor过程中,通过配置可以对批处理的每个步骤、或者是Workflow的每个Activity进行自由地定义。从功能上将,这个小工具仅仅是个小玩意儿,不登大雅之堂。 不过考虑到Batch Job Executor的涉及和实现是基于Enterprise Library典型的实现方式,比如基于EL的配置和对象创建方式,对于那些希望进一步了解EL的读者,或许可以通过这个小小的例子一窥EL的设计原理。对于那些EL的设计不时很了解的读者,对于以下的内容,可能在理解上可能比较困难。最好是下载源代码,结合下面的介绍,希望会帮助了更好的理解EL。阅读全文
posted @ 2008-11-17 11:07 Artech 阅读(4327) | 评论 (8) 编辑
摘要: [From J.D Meier’s Blog:http://blogs.msdn.com/jmeier/default.aspx] Today we released our patterns & practices App Arch Guide 2.0 Beta 1. This is our guide to help solution architects and developers make the most of the Microsoft platform. It's a distillation of many lessons learned. It’s principle-based and pattern-oriented to provide 阅读全文
posted @ 2008-10-28 15:28 Artech 阅读(1709) | 评论 (0) 编辑
摘要: 微软Enterprise Library ELAB(Exception Handling Application Block)提供了一种基于策略(Policy)的异常处理方式,在不同的环境中,比如多层架构中不同的层次中,我们可以定义不同的异常处理策略。对于ELAB来说,Exception Handling Policy = Exception Type + Exception Handler(s) ,也就是说异常处理策略规定了对于某种类型的类型需要通过那些Exception Handler去处理。从这种意义上讲,ELAB的异常处理机制是基于Exception Type的,异常的类型是我们处理异常的最小粒度。对于一个确定的异常处理策略,在不同场合抛出的同种类型的异常,都会使用相同的Exception Handler去处理。在很多情况下,这种基于异常类型级别的异常处理并不能解决我们实际异常处理的问题。阅读全文
posted @ 2008-09-26 10:46 Artech 阅读(5642) | 评论 (14) 编辑
摘要: 最近在做一个Smart Client Software Factory的项目。熟悉SCSF或者CAB的都应该很清楚MVP这种设计模式。MVP是MVC的一种变体,View和Mode分别关注于UI的呈现和业务模型,View和Mode完全分离,View通过Presenter实现对业务模型的访问,Presenter“间接”地调用View实现对UI的操作。对于MVP中的异常处理,我们是直接通过Enterprise Library的Exception Handling Application Block来实现的。具体的做法是:在View中的每个控件的事件中添加try/catch block, 并在catch中通过ExceptionPolicy实现对异常的处理。这样导致的问题是,相同的代码重复散阅读全文
posted @ 2008-08-22 09:29 Artech 阅读(4456) | 评论 (19) 编辑
摘要: 对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理、有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作)、Scalability(将数据进行缓存,减轻了对Database等资源的压力)和Availability(将数据进行缓存,可以应对一定时间内的网络问题、Web Service不可访问问题、Database的崩溃问题等等)。Enterprise Library的Caching Application Block为我们提供了一个易用的、可扩展的实现Caching的框架。借助于Caching Application Block,Administrator和Developer很容易实现基于Caching的管理和编程。由于Caching的本质在于将相对稳定的数据常驻内存,以避免对Persistent stor阅读全文
posted @ 2008-08-11 11:47 Artech 阅读(8000) | 评论 (45) 编辑
摘要: Policy Injection Application Block(PIAB)是Enterprise Library众多Application Block中的一个。在我看来,PIAB和后来的Unity Application Block的推出在Enterprise Library的发展历程中具有重要的意思,它标志着Enterprise Library向真正框架上面发展。不再是仅仅关注于某个具体功能实现(比如Logging、Caching、DA、Security等等)。PIAB提供了一种易用的、可扩展的机制是你能够将你需要的Policy应用到对应的目标对象上。PIAB是为你实现AOP提供了又一个不错的选择。对了让读者全面地了解PIAB,能够灵活的使用PIAB为你项目开发服务,我先后写了6篇文章。现在将他们集中在一起,以飨读者。阅读全文
posted @ 2008-08-08 09:15 Artech 阅读(10813) | 评论 (18) 编辑
摘要: Enterprise Library是微软P&P部门开发的众多Open source框架中的一个,最新的版本已经出到了4.0。由于接触Enterprise Library已经有很长的一段时间,在实际的项目中使用的频率也很高。对此有了一些积累,希望通过这个新的系列和广大网友一起分享和交流。本系列假设读者已经对Enterprise Library有一定的了解,故而不会对各个Application Block的基本原理和编程模型进行介绍,而把侧重点放在Enterprise Library深层次的实现原理、设计模式的应用、有效扩展和最佳实践上。今天我们讨论的内容是如何通过自定义UnityContainerExtension实现Unity和PIAB的集成.阅读全文
posted @ 2008-08-06 09:19 Artech 阅读(10027) | 评论 (53) 编辑
摘要: PIAB为我们提供了一个很好地实现AOP的方式。AOP旨在实现Business Logic和Non-Business Infrastructure Logic的分离。通过PIAB,我们将这些业务无关的逻辑定义在一个个的CallHandler中,然后通过Attribute或者Configuration的方式,将我们所需的CallHandler运用到相应的目标对象中。从这个意义上讲,PIAB具有很好的Flexibility和Extensibility。但是,就我看来PIAB也具有一些不足之处,其最大的局限性在于:不能控制运用到某个Method的多个方法的执行顺序。而让CallHandler按照我们希望的顺序进行调用是非常有必要的。阅读全文
posted @ 2008-02-21 09:40 Artech 阅读(5798) | 评论 (30) 编辑
摘要: 本系列的第一部分对PIAB使用场景进行了简单的介绍,作中阐述了通过PI(Policy Injection)的方式实现了Business Logic和Non-Business Infrastructure Logic的分离,从而实现了AOP(Aspect Oriented Programming)。在第二部分中详细介绍PIAB的实现机制:通过自定义RealProxy的方式实现了Method Injection。通过这几天接收到的网友的留言阅读全文
posted @ 2008-02-19 09:15 Artech 阅读(6907) | 评论 (41) 编辑
摘要: 前面一篇文章中,我对Enterprise Library中的PIAB (Policy Injection Application Block)作了简单的介绍。在这篇文章主要谈谈我个人对PIAB设计和实现原理的一些理解。在介绍过程中,我尽量采用由浅入深出的方式,同时结合例子、Source Code。希望通过本片文章让大家对PIAB有一个全面、深刻的认识。阅读全文
posted @ 2008-01-31 09:45 Artech 阅读(9312) | 评论 (42) 编辑
摘要: 在过去的半年里,定期或者不定期地写点东西已经成为了我的一种习惯。可是最近两个月来一直忙于工作的事情一直足够的时间留给自己,虽然给自己列了很长一串写作计划,可是心有余而力不足。这一段工作主要是帮助公司开发一套分布式的开发框架,对一些技术和设计方法有了一些新的认识。这两天的工作主要是如何把Enterprise Library V3.1的PIAB(Policy Injection Application Block)引入到我们自己的框架中,为此对PIAB进行了一些研究,借此机会与大家一起分享。阅读全文
posted @ 2008-01-29 12:54 Artech 阅读(10617) | 评论 (50) 编辑