上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 下一页
摘要: 对于大部分企业应用来用,有一个基本的功能必不可少,那就是Audit Trail。我们采用它记录每一笔业务操作的基本信息,比如操作时间、操作者等。对于高安全级别的应用,我们甚至需要记录每笔业务操作引起的数据的改变。很多人都会想到采用触发器来实现,在这里介绍一种更好的方案:SQLCDC。 阅读全文
posted @ 2010-11-20 00:50 Artech 阅读(17048) 评论(96) 推荐(60) 编辑
摘要: 前一阵子写了不少关于代码生成相关的文章,介绍了一些如何通过VS自动生成代码的解决方案,比如CodeDOM、T4以及ASP.NET的BuildProvider等。现在将它们作一个汇总,给广大读者作一个参考。 阅读全文
posted @ 2010-11-17 21:55 Artech 阅读(23874) 评论(115) 推荐(85) 编辑
摘要: 在这之前,我写了一系列关于代码生成和T4相关的文章,而我现在也试图将T4引入我们自己的开发框架。在实践中遇到了一些问题,也解决了不少问题。如果你也在进行T4相关的开发,相信你也一定会遇到这些问题。为此,特意将这些问题和解决方案与朋友们分享,希望在遇到这些问题的时候少走弯路。本篇文章介绍的是两个重要的话题:程序集锁定和调试。 阅读全文
posted @ 2010-11-16 22:58 Artech 阅读(6637) 评论(18) 推荐(15) 编辑
摘要: Change Data Capture records INSERTs, UPDATEs, and DELETEs applied to SQL Server tables, and makes a record available of what changed, where, and when, in simple relational 'change tables' rather than in an esoteric chopped salad of XML. These change tables contain columns that reflect the column structure of the source table you have chosen to track, along with the metadata needed to understand the c 阅读全文
posted @ 2010-11-16 17:30 Artech 阅读(3537) 评论(3) 推荐(10) 编辑
摘要: 在众多.NET应用下的代码生成方案中,比如CodeDOM,BuildProvider, 我觉得T4是最好的一种。如果你编写T4模板,你不得不面对一个问题——如何引用一个程序集?VS 2010采用了与VS2008不同的程序集引用的解析机制。本篇文章为你介绍在VS2010下5种不同的程序集引用的方式。 阅读全文
posted @ 2010-11-09 23:25 Artech 阅读(15371) 评论(64) 推荐(34) 编辑
摘要: 如今闹得不可开交的3Q大战已经成了一道独特的风景线。这两个中国最大的客户端软件提供商各有拥趸无数,双方铆足了劲相互吐口水、扔砖头,现在貌似到了动刀子了。周、马在媒体上也都将自己标榜为“美貌与智慧并重、英雄与狭义的化生”。但是在我个人的眼中,却只有两个流氓,但是在当今这个混杂的环境中,只有流氓才能生存。 阅读全文
posted @ 2010-11-07 11:23 Artech 阅读(11226) 评论(197) 推荐(170) 编辑
摘要: 之前写了一些关于代码生成的文章,提供了两种不同方式的代码生成解决方案,即CodeDOM+Custom Tool和T4。对于ASP.NET应用,你还有第三种选择——自定义BuildProvider。对于ASP.NET应用的开发者来说,你可能不知道什么是BuildProvider,但是你几乎无时无刻不在使用它所带来的代码生成机制。 阅读全文
posted @ 2010-11-06 22:29 Artech 阅读(7787) 评论(49) 推荐(30) 编辑
摘要: Welcome to the Windows Azure Developer Guidance Map! This map is a consolidated index of Windows Azure content collections for developers. The primary content collections included in this map are: Code Samples, How Tos, Videos, and Training. Within the content collections, the resources are organized by Windows Azure features, common tasks, and common categories for Windows Azure development. 阅读全文
posted @ 2010-11-03 09:23 Artech 阅读(3905) 评论(21) 推荐(12) 编辑
摘要: 在一个基于ASP.NET应用中,我们通常使用Session保存基于某个客户端的状态信息。但是这种单纯使用Session的编程方式具有很多局限。为了实现对客户端状态的有效管理,并提高应用开发效率,在很多年前我们的开发框架体系中就具有相关的编程框架。最近我开始对其进行升级和重新设计,将大体上实现原理写出来与大家分享。 阅读全文
posted @ 2010-10-31 21:08 Artech 阅读(10048) 评论(100) 推荐(54) 编辑
摘要: C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的。相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制。但是即使你知道这个机制,你也很容易在不经意间掉入它制造的陷阱。 阅读全文
posted @ 2010-10-28 20:32 Artech 阅读(10075) 评论(104) 推荐(41) 编辑
摘要: 在《上篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利,本篇文章将为你解决这个问题。 阅读全文
posted @ 2010-10-25 19:34 Artech 阅读(19720) 评论(75) 推荐(44) 编辑
摘要: 在《基于T4的代码生成方式》中,我对T4模板的组成结构、语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码。为了让由此需求的读者对T4有更深的了解,我们通过T4来做一些更加实际的事情——为某个数据表自动生成进行插入、修改和删除的存储过程。 阅读全文
posted @ 2010-10-25 07:37 Artech 阅读(22972) 评论(86) 推荐(66) 编辑
摘要: 在之前写一篇文章《从数据到代码》(上篇、下篇)中,我通过基于CodeDOM+Custom Tool的代码生成方式实现了将一个XML表示的消息列表转换成了相应的C#代码,从而达到了强类型编程的目的。实际上,我们最常用的代码生成当时不是CodeDOM,而是T4,这是一个更为强大,并且适用范围更广的代码生成技术。今天,我将相同的例子通过T4的方式再实现一次 阅读全文
posted @ 2010-10-23 22:25 Artech 阅读(23358) 评论(78) 推荐(98) 编辑
摘要: 《上篇》中我们主要讨论的是程序集和应用程序域的话题,着重介绍了两个不同的程序集加载方式:独占方式和共享方式("中立域"方式);以及基于"进程范围内"的字符串驻留。这篇将关注点放在托管对象创建时"内存的分配"和对"大对象的回收"上。 阅读全文
posted @ 2010-10-20 22:24 Artech 阅读(9563) 评论(105) 推荐(65) 编辑
摘要: 半年之前,PM让我在部门内部进行一次关于“内存泄露”的专题分享,我为此准备了一份PPT。今天无意中将其翻出来,觉得里面提到的关于CLR下关于内存管理部分的内存还有点意思。为此,今天按照PPT的内容写了一篇文章。本篇文章不会在讨论那些我们熟悉的话题,比如“值类型引用类型具有怎样的区别?”、“垃圾回收分为几个步骤?”,而是讨论一些不"不一样"的东西。 阅读全文
posted @ 2010-10-18 22:02 Artech 阅读(12526) 评论(146) 推荐(131) 编辑
摘要: Rob beat me to it. Blogging about T4 (the Text Template Transformation Toolkit) had been on my list literally for a year. He and I were singing its praises last night. Hopefully I can add something small to the conversation. What's the story? Well, T4 is a code generator built right into Visual Studio. To be clear, you HAVE THIS NOW on your system…go play. Now's the time to introduce code generation to y 阅读全文
posted @ 2010-10-17 17:12 Artech 阅读(5562) 评论(1) 推荐(2) 编辑
摘要: 关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则,同时为了让本系列看起来完整,额外写了《扩展篇》收尾。本篇我们写一个简单的验证器,用于验证字符串类型属性成员的长度。 阅读全文
posted @ 2010-10-15 20:42 Artech 阅读(3604) 评论(59) 推荐(24) 编辑
摘要: 自《编程篇》和《设计篇》发布以来,收到了一些反馈,给了很大的启发。为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。 阅读全文
posted @ 2010-10-14 20:11 Artech 阅读(3015) 评论(48) 推荐(22) 编辑
摘要: 没有想到自己头脑发热写了一个简陋版本的所谓“验证框架”能够得到众多网友的推荐。个人觉得这个验证框架有两个主要的特点是:提供复杂逻辑判断和多验证规则的支持。《编程篇》中,我主要介绍了如何通过自定义特性的方式进行验证规则的定义,在本篇中我主要来介绍该验证框架的设计原理和实现。 阅读全文
posted @ 2010-10-13 21:17 Artech 阅读(3954) 评论(54) 推荐(26) 编辑
摘要: 昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。目前仅仅实现基于属性的声明式的验证,即通过自定义特性的方式将相应的Validator应用到对应的属性上,并设置相应的验证规则。在这里我们模拟一个有趣的场景来介绍这个迷你验证框架的使用:找对象,不论是找男朋友还是女朋友,还是不男不女的朋友,都具有一定的标准,在这里我们把这些标准表示成“验证规则”... 阅读全文
posted @ 2010-10-12 16:50 Artech 阅读(5257) 评论(131) 推荐(57) 编辑
摘要: 我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集。比较典型的应用场景包括如下两种:将一个组件或者模块定义成两个或者两个以上程序集,一个程序集需要访问另一个程序集的Internal成员;对一个组件或者模块进行单元测试时候,单元测试用例需要调用定义在被测试组件或者模块的Internal成员。 阅读全文
posted @ 2010-10-06 17:05 Artech 阅读(6842) 评论(15) 推荐(14) 编辑
摘要: 个人觉得EnterLib的EHAB是一个不错的异常处理框架,借助于EHAB,我们可以配置的方式来自定义异常处理策略,从而带来最大的灵活性和可维护性。但是,在我看来,EHAB有一个最大的局限,就是异常处理策略的粒度过大——只能提供基于异常类型级别。本篇文章通过一个自定义异常处理器很好地解决了这个问题。 阅读全文
posted @ 2010-09-25 16:49 Artech 阅读(5876) 评论(33) 推荐(19) 编辑
摘要: 在上篇文章中我们谈到:当我们通过应用DependencyAttribute特性定义需要自动注入的属性的时候,当这个属性为接口、抽象类或者没有定义无参的构造函数,无论我们调用PIAB的Create方法去创建一个新的对象,还是调用Wrap方法对现有对象进行封装,都会抛出异常。如果说在前文中,我们还对这是否是个BUG抱着“谨慎”的态度,那么在这篇文章中,可以肯定地告诉你:这是一个BUG,而且是一个“致命”的BUG。 阅读全文
posted @ 2010-09-22 13:39 Artech 阅读(4843) 评论(22) 推荐(12) 编辑
摘要: 在《这是EnterLib PIAB的BUG吗?》一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题。问题的起因源于《IoC+AOP的简单实现》这篇文章,因为文中给出的解决方案仅仅支持构造器注入,而不能支持属性注入和方法注入——这是由于EnterLib的PIAB设计本身就存在缺陷。 阅读全文
posted @ 2010-09-20 22:44 Artech 阅读(4678) 评论(30) 推荐(6) 编辑
摘要: 在《上篇》中,我们实现了将保存有消息条目的XML向CodeDOM的转换.在下篇中,我们将实现整个代码生成系统的第二个步骤——通过VS扩展实现数据(保存消息条目的XML)向代码文件的自动转换。即通过VS自动生成的代码结构是对数据结构的反映,继而使我们能够强类型的方式操作数据,不但极大地提高开发效率,也降低了出错的可能。 阅读全文
posted @ 2010-09-18 02:05 Artech 阅读(9441) 评论(23) 推荐(18) 编辑
摘要: 这确实是一个让人觉得“无语”的BUG,甚至让我觉得微软在故意和我们开玩笑。这个问题在我刚刚接触WCF的时候就遇到过,换言之,这个问题一直存在于.NET 3.0、3.5和现在的4.0。这是一个关于在你对WCF进行扩展的时候会经常碰到的问题,读者朋友们可以根据下面的步骤来再现这一个问题。 阅读全文
posted @ 2010-09-16 20:34 Artech 阅读(7400) 评论(58) 推荐(17) 编辑
摘要: 我不知道大家对CodeDom的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过VS,你就应该体验过它带给我们在编程上的便利。随便列举三种典型的代码生成的场景:强类型DataSet、Resource和添加Web Reference。总的来说,通过和VS集成的动态代码生成工具使我们可以“强类型”的方式进行编程,进而提供我们的效率并减低错误的几率。除了VS提供的这些典型的代码生成场景中,我们可以根据需要开发一些自定义代码生成器,并且通过VS的扩展实现后台代码的实时生成,从而实现强类型编程的目的。 阅读全文
posted @ 2010-09-16 00:05 Artech 阅读(13185) 评论(61) 推荐(39) 编辑
摘要: 在默认的情况下,EnterLib的PIAB采用基于透明/真实代理的机制实现对方法调用的拦截,进而实现了对横切关注点的动态注入。也正是其来截机制本身的局限,当我们才用PIAB的方式进行对象的创建的时候,要求对象的类型要么实现某一个接口,要么直接继承MarshalByRefObject类型。但不支持通过抽象基类对该类的间接继承,我个人觉得这是微软需要改进的地方。 阅读全文
posted @ 2010-09-15 12:46 Artech 阅读(3342) 评论(26) 推荐(12) 编辑
摘要: 这是一个大得能把牛吓死的话题。上周公司为我们进行企业核心价值(Core Value)的培训,让我们每人写出3条个人价值观。对于这个问题,我之前还真没有人证思考过——到底我的人生信条是什么呢?想了半天,写出了以下三条: 阅读全文
posted @ 2010-09-13 19:46 Artech 阅读(4138) 评论(19) 推荐(20) 编辑
摘要: 洪雅于隋开皇十三年(公元593年)建县,距今已有1400多年历史,地处四川盆地西南边缘,属中亚热带湿润气候,年降雨量1435.5毫米,年日照1006.1小时,年无霜期312天,年平均气温16.6℃。地形由西南向东北呈高低梯次变化,素有“七山二水一分田”之称。最高海拔3522米(瓦屋山旅游区内),最低海拔420米(洪雅县城)。洪雅有个中国最大的国家级森林公园——瓦屋山森林公园;有个四川十大古镇之一的柳江古镇;有毗邻峨眉山的独家胜地——七里坪国际避暑度假区;有四川第二大湖泊——汉王湖;有种独特的江峡风光——槽渔滩风景名胜区;有个世界最大的山顶平台——瓦屋山顶大平台... 阅读全文
posted @ 2010-09-12 14:20 Artech 阅读(5272) 评论(27) 推荐(5) 编辑
摘要: 但是今天发现一个叫做“学IT网”的站点(http://www.xueit.com/),里面转载了博客园几乎所有的技术文章,但是除了表明文章来源于博客园之外,所有文章的作者均被写成“编辑整理”。我不知道该网站是否得到了博客园的授权,即便是得到了授权,有何理由改变博文的署名呢? 阅读全文
posted @ 2010-09-11 20:39 Artech 阅读(5679) 评论(94) 推荐(41) 编辑
摘要: 由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行。具体的现象在《只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题》有过详细的介绍。解决的方案就是对相关的程序集进行强签名,并加到GAC中。程序集签名很好实现——仅仅需要借助VS给项目指定一个签名用的Key File就可以了,但是,VS做得不够好。 阅读全文
posted @ 2010-09-10 23:32 Artech 阅读(8759) 评论(27) 推荐(10) 编辑
摘要: 2010年3月5 日,微软全球CEO 史蒂夫.鲍尔默先生在美国华盛顿大学发表演讲时指出,微软将举全公司之力投入云计算。“我们将把赌注押在云计算领域。”——他表示,此次演讲旨在让人们从更广阔的角度来看待云计算,并由多个维度来了解云计算所带来的变革。和业内许多公司一样,微软认为云技术的革新攸关未来,从5个维度分享了微软对云计算的理解以及微软在相关领域的创新情况。 阅读全文
posted @ 2010-09-10 09:45 Artech 阅读(2743) 评论(1) 推荐(3) 编辑
摘要: 关于如何解决分布式系统中的跨时区问题,上一篇详细介绍了解决方案的实现原理。尽管《原理篇》中介绍了那么多,解决方案的本质就是:在进行服务调用过程中将客户端的时区信息作为上下文传入服务端,并以此作为时间转换的依据。在这一篇中我们根据这个原理通过一个简单的例子来证明其可行性。。 阅读全文
posted @ 2010-09-10 00:23 Artech 阅读(5800) 评论(16) 推荐(6) 编辑
摘要: 《谈谈你最熟悉的System.DateTime[上篇][下篇]》从跨时区的角度对DateTime这个我们熟知的类型进行了深入探讨,它们都是为这篇文章作的准备工作。在接下来的两篇文章中,我们将完整的介绍如果在一个分布式系统中处理时区的问题。 阅读全文
posted @ 2010-09-08 23:50 Artech 阅读(9639) 评论(21) 推荐(11) 编辑
摘要: 在《谈谈你最熟悉的DateTime》一文中,我们从跨时区的角度剖析了我们熟悉的时间类型。如果你采用传统的ADO.NET编程,并用DataSet作为数据实体,可能你会熟悉DataSetDateTime这个类型。这个类型也是为实现跨时区场景设计的,为了对前文的补充,这篇文章就来谈谈基于DataSet的时间处理问题。 阅读全文
posted @ 2010-09-05 11:24 Artech 阅读(7864) 评论(29) 推荐(20) 编辑
摘要: 最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考——时间的处理。具体来说,是分布式应用中如何有效地进行时间的处理以提供对跨时区的支持。不过,对该问题解决方案的介绍我会放在后续的文章中,在这里我们先来介绍一些基础性的内容——谈谈我们熟悉的DateTime类型 阅读全文
posted @ 2010-09-04 10:16 Artech 阅读(16656) 评论(69) 推荐(72) 编辑
摘要: 对EnterLib有所了解的人应该知道,其中有一个名叫PIAB的AOP框架;而整个EnterLib完全建立在另一个叫作Unity的底层框架之上,我们可以将Unity看成是一个IoC的框架。对于一个企业应用来说说,AOP和IoC是我们进行逻辑分离和降低耦合度最主要的方式,而将两者结合起来具有重要的现实意义。 阅读全文
posted @ 2010-09-01 20:11 Artech 阅读(28745) 评论(105) 推荐(78) 编辑
摘要: 在前一篇文章中我曾经说过,现在正在做一个小小的框架以实现采用统一的API实现对上下文(Context)信息的统一管理。这个框架同时支持Web和GUI应用,并支持跨线程传递和跨域传递,和对上下文项目的读写控制。在对后两个特性的支持上,出现一个小小的关于序列化的问题。解决方案只需要改动短短的一行代码,结果却让我折腾了老半天... 阅读全文
posted @ 2010-08-31 20:16 Artech 阅读(6608) 评论(22) 推荐(15) 编辑
摘要: 最近一直在进行公司内部框架的升级工作,其中一个小的部分就是通过HttpSessionState和CallContext建立一套统一的、可扩展的用于管理上下文信息的框架。在为写好的程序编写Unit Test和QuickStart的时候,遇到了两个基于LogicalCallContext的严重问题。导致这两个问题的根源还没有来得及去追踪,或许是微软VS Unit Test框架本身和WebHost本身的一个Bug。现在将其写出来,一来是希望读者在遇到相同情况的时候知道LogicalCallContext可能是影响因素之一,另一方面也希望借助社区的力量快速找到问题的症结。 阅读全文
posted @ 2010-08-29 00:59 Artech 阅读(3598) 评论(7) 推荐(7) 编辑
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 下一页