随笔分类 -  [14] 框架设计

摘要:今天写《WCF技术剖析(卷2)》关于《WCF扩展》一章,举了“如何通过WCF扩展实现与IoC框架(以Unity为例)集成”(《通过自定义ServiceHost实现对WCF的扩展[实例篇]》)的例子。为了展示Unity如何实现几种典型的注入方式(构造器注入、属性注入和方法注入),我写了一个简单的小程序。如果读者对Unity或者IoC没有太多概念,我觉得这个小程序对于你初步地认识它们具有一定的帮助意义。如果你对Unity或者IoC有深入的认识,请忽略本文。 阅读全文
posted @ 2011-09-15 17:52 Artech 阅读(20998) 评论(36) 推荐(41) 编辑
摘要:当我们在设计一个框架的时候,必然会涉及一系列的配置。为了让使用者更好地使用你提供的框架,让他们能够容易地维护这些配置是一项基本的要求。对于一些配置过于复杂的框架,比如EnterLib,比如WCF,往往会提供一个配置的工具。但是,不过这样的配置工具是否提供,手工编译配置文件是在所难免的。如果在通过VS编辑配置的时候,能够提供智能感知和提示性描述的支持,这无疑会使配置的编辑变得非常的容易。这里是一个简单的例子。 阅读全文
posted @ 2011-04-20 16:00 Artech 阅读(5996) 评论(25) 推荐(7) 编辑
摘要:《上篇》主要介绍如何通过DataBinder实现批量的数据绑定,以及如何解决常见的数据绑定问题,比如数据的格式化。接下来,我们主要来谈谈DataBinder的设计,看看它是如何做到将作为数据源实体的属性值绑定到界面对应的控件上的。 阅读全文
posted @ 2011-03-27 21:19 Artech 阅读(8626) 评论(29) 推荐(19) 编辑
摘要:在《一句代码实现批量数据绑定》中,我通过界面控件ID与作为数据源的实体属性名之间的映射实现了批量数据绑定。由于里面频繁涉及对属性的反射——通过反射从实体对象中获取某个属性值;通过反射为控件的某个属性赋值,所以这不是一种高效的操作方式。为了提升性能,我通过IL Emit的方式创建了一个PropertyAccessor组件,以实现高效的属性操作。如果你看了我在文中给出的三种属性操作性能的测试结果,相信会对PropertyAccessor的作用有深刻的印象。 阅读全文
posted @ 2011-03-24 21:23 Artech 阅读(7797) 评论(41) 推荐(16) 编辑
摘要:对于一个以数据处理为主的应用中的UI层,我们往往需要编写相当多的代码去实现数据绑定。如果界面上的控件和作为数据源的实体类型之间存储某种约定的映射关系,我们就可以实现批量的数据绑定。为了验证这种想法,我写了一个小小的组件 阅读全文
posted @ 2011-03-23 22:53 Artech 阅读(10031) 评论(67) 推荐(45) 编辑
摘要:对于数据库设计来说,多对多(或者一对多)是一种常见的数据关系,比如联系人和地址之间的关系。我们通常采用建立关系表的方式来表示这种关系,比如我们创建一张表来存储联系人和地址之间的关系。如果我们最终需要通过存储过程的方式来维护他们之间的关系,该如何做呢?本篇文章给你一个具体的例子来演示如果采用存储过程来建立和删除实体之间的关系。 阅读全文
posted @ 2011-03-16 16:41 Artech 阅读(6929) 评论(17) 推荐(7) 编辑
摘要:继续讨论EF中使用存储过程的问题,这回着重讨论的是为存储过程的参数进行赋值的问题。说得更加具体一点,是如何为实体映射的Delete存储过程参数进行赋值的问题。关于文中涉及的这个问题,我个人觉得是EF一个有待改进的地方,不知道各位看官是否同意? 阅读全文
posted @ 2011-03-13 16:02 Artech 阅读(5216) 评论(6) 推荐(9) 编辑
摘要:本篇文章通过实例的方式,讨论两个在EF使用存储过程的主题:如何通过实体和存储过程的映射实现逻辑删除;对于具有自增长类型主键的数据表,在进行添加操作的时候如何将正确的值反映在实体对象上。 阅读全文
posted @ 2011-03-13 00:13 Artech 阅读(6223) 评论(4) 推荐(8) 编辑
摘要:最近一段时间的工作任务是如何将EF引入到我们的开发框架,进行相应的封装、扩展,使之成为一个符合在特定场景下进行企业级快速开发的ORM。在此过程中遇到了一些挑战,也有一些心得。为了向大家分享这些心得,接下来我会写一系列相关的文章。第一个主题是关于在EF中使用存储过程的问题 阅读全文
posted @ 2011-03-05 10:04 Artech 阅读(23141) 评论(29) 推荐(24) 编辑
摘要:IoC的目的就是通过解析注册的依赖注入信息,最终创建出我们希望的某个对象。而只有通过配置的方式来定义IoC容器需要的注入信息,才能实现灵活的设计。所以,如果将两者集成起来,让IoC容器能够解析通过配置定义的“依赖注入”信息,具有很大的现实意义。接下来,我们将通过Unity为例,介绍IoC和自定义进行无缝集成的实现方案。 阅读全文
posted @ 2011-01-20 20:40 Artech 阅读(6589) 评论(22) 推荐(26) 编辑
摘要:软件设计有一句话叫做“约定优于配置”,很多人将其作为拒绝配置的理由。但是,在很多场景中,配置是提供应用灵活度的首要甚至是唯一途径。对于框架的设计者来说,对于配置的驾驭是一项基本的技能。本篇文章通过一个简单而使用的例子,通过自定义配置的形式实现“插件式”设计。 阅读全文
posted @ 2011-01-05 20:23 Artech 阅读(7678) 评论(58) 推荐(38) 编辑
摘要:之前写了两篇文章《.NET资源并不限于.ResX文件》(上篇、下篇),介绍了如何通过自定义ResourceManager的方式来扩展资源的存储形式。在本篇文章中我们将实现自定义ResourceManager和ASP.NET之间的集成,让ASP.NET现有的资源编程方式支持我们希望的资源存储方式。 阅读全文
posted @ 2010-12-30 22:43 Artech 阅读(6584) 评论(23) 推荐(13) 编辑
摘要:在《上篇》中我们谈到ResourceManager在默认的情况下只能提供对内嵌于程序集的.resources资源文件的存取。为了实现对独立二进制.resources资源文件的支持,我们自定义了BinaryResoruceNManager。在本篇中我们还将创建两个自定义的ResourceManager,以实现对独立.resx资源文件和自定义结构的XML资源文件的支持。 阅读全文
posted @ 2010-12-17 23:03 Artech 阅读(9885) 评论(25) 推荐(14) 编辑
摘要:为了构建一个轻量级的资源管理框架以满足简单的本地化(Localization)的需求,我试图直接对现有的Resource编程模型进行扩展。虽然最终没能满足我们的需求,但是这两天也算对.NET如何进行资源的存取进行了深入的学习,所以将我对此的认识通过博文的方式与诸位分享。在本篇文章中,我会通过自定义ResourceManager让资源的存储形式不仅仅局限于.ResX文件,你可以根据需要实现任意的存储方式,比如结构化的XML、数据库表,甚至是通过远程访问获取资源。 阅读全文
posted @ 2010-12-16 21:47 Artech 阅读(10806) 评论(55) 推荐(52) 编辑
摘要:对于大部分企业应用来用,有一个基本的功能必不可少,那就是Audit Trail。我们采用它记录每一笔业务操作的基本信息,比如操作时间、操作者等。对于高安全级别的应用,我们甚至需要记录每笔业务操作引起的数据的改变。很多人都会想到采用触发器来实现,在这里介绍一种更好的方案:SQLCDC。 阅读全文
posted @ 2010-11-20 00:50 Artech 阅读(17007) 评论(96) 推荐(60) 编辑
摘要:关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则,同时为了让本系列看起来完整,额外写了《扩展篇》收尾。本篇我们写一个简单的验证器,用于验证字符串类型属性成员的长度。 阅读全文
posted @ 2010-10-15 20:42 Artech 阅读(3598) 评论(59) 推荐(24) 编辑
摘要:自《编程篇》和《设计篇》发布以来,收到了一些反馈,给了很大的启发。为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。 阅读全文
posted @ 2010-10-14 20:11 Artech 阅读(3008) 评论(48) 推荐(22) 编辑
摘要:没有想到自己头脑发热写了一个简陋版本的所谓“验证框架”能够得到众多网友的推荐。个人觉得这个验证框架有两个主要的特点是:提供复杂逻辑判断和多验证规则的支持。《编程篇》中,我主要介绍了如何通过自定义特性的方式进行验证规则的定义,在本篇中我主要来介绍该验证框架的设计原理和实现。 阅读全文
posted @ 2010-10-13 21:17 Artech 阅读(3942) 评论(54) 推荐(26) 编辑
摘要:昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。目前仅仅实现基于属性的声明式的验证,即通过自定义特性的方式将相应的Validator应用到对应的属性上,并设置相应的验证规则。在这里我们模拟一个有趣的场景来介绍这个迷你验证框架的使用:找对象,不论是找男朋友还是女朋友,还是不男不女的朋友,都具有一定的标准,在这里我们把这些标准表示成“验证规则”... 阅读全文
posted @ 2010-10-12 16:50 Artech 阅读(5250) 评论(131) 推荐(57) 编辑
摘要:个人觉得EnterLib的EHAB是一个不错的异常处理框架,借助于EHAB,我们可以配置的方式来自定义异常处理策略,从而带来最大的灵活性和可维护性。但是,在我看来,EHAB有一个最大的局限,就是异常处理策略的粒度过大——只能提供基于异常类型级别。本篇文章通过一个自定义异常处理器很好地解决了这个问题。 阅读全文
posted @ 2010-09-25 16:49 Artech 阅读(5862) 评论(33) 推荐(19) 编辑