随笔分类 -  [02] 编程技巧

上一页 1 ··· 8 9 10 11 12 13 14 下一页
摘要:在众多.NET应用下的代码生成方案中,比如CodeDOM,BuildProvider, 我觉得T4是最好的一种。如果你编写T4模板,你不得不面对一个问题——如何引用一个程序集?VS 2010采用了与VS2008不同的程序集引用的解析机制。本篇文章为你介绍在VS2010下5种不同的程序集引用的方式。 阅读全文
posted @ 2010-11-09 23:25 Artech 阅读(15338) 评论(64) 推荐(34) 编辑
摘要:之前写了一些关于代码生成的文章,提供了两种不同方式的代码生成解决方案,即CodeDOM+Custom Tool和T4。对于ASP.NET应用,你还有第三种选择——自定义BuildProvider。对于ASP.NET应用的开发者来说,你可能不知道什么是BuildProvider,但是你几乎无时无刻不在使用它所带来的代码生成机制。 阅读全文
posted @ 2010-11-06 22:29 Artech 阅读(7775) 评论(49) 推荐(30) 编辑
摘要:C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的。相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制。但是即使你知道这个机制,你也很容易在不经意间掉入它制造的陷阱。 阅读全文
posted @ 2010-10-28 20:32 Artech 阅读(10064) 评论(104) 推荐(41) 编辑
摘要:在《上篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利,本篇文章将为你解决这个问题。 阅读全文
posted @ 2010-10-25 19:34 Artech 阅读(19711) 评论(75) 推荐(44) 编辑
摘要:在《基于T4的代码生成方式》中,我对T4模板的组成结构、语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码。为了让由此需求的读者对T4有更深的了解,我们通过T4来做一些更加实际的事情——为某个数据表自动生成进行插入、修改和删除的存储过程。 阅读全文
posted @ 2010-10-25 07:37 Artech 阅读(22947) 评论(86) 推荐(66) 编辑
摘要:在之前写一篇文章《从数据到代码》(上篇、下篇)中,我通过基于CodeDOM+Custom Tool的代码生成方式实现了将一个XML表示的消息列表转换成了相应的C#代码,从而达到了强类型编程的目的。实际上,我们最常用的代码生成当时不是CodeDOM,而是T4,这是一个更为强大,并且适用范围更广的代码生成技术。今天,我将相同的例子通过T4的方式再实现一次 阅读全文
posted @ 2010-10-23 22:25 Artech 阅读(23349) 评论(78) 推荐(98) 编辑
摘要:我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集。比较典型的应用场景包括如下两种:将一个组件或者模块定义成两个或者两个以上程序集,一个程序集需要访问另一个程序集的Internal成员;对一个组件或者模块进行单元测试时候,单元测试用例需要调用定义在被测试组件或者模块的Internal成员。 阅读全文
posted @ 2010-10-06 17:05 Artech 阅读(6821) 评论(15) 推荐(14) 编辑
摘要:在《上篇》中,我们实现了将保存有消息条目的XML向CodeDOM的转换.在下篇中,我们将实现整个代码生成系统的第二个步骤——通过VS扩展实现数据(保存消息条目的XML)向代码文件的自动转换。即通过VS自动生成的代码结构是对数据结构的反映,继而使我们能够强类型的方式操作数据,不但极大地提高开发效率,也降低了出错的可能。 阅读全文
posted @ 2010-09-18 02:05 Artech 阅读(9434) 评论(23) 推荐(18) 编辑
摘要:这确实是一个让人觉得“无语”的BUG,甚至让我觉得微软在故意和我们开玩笑。这个问题在我刚刚接触WCF的时候就遇到过,换言之,这个问题一直存在于.NET 3.0、3.5和现在的4.0。这是一个关于在你对WCF进行扩展的时候会经常碰到的问题,读者朋友们可以根据下面的步骤来再现这一个问题。 阅读全文
posted @ 2010-09-16 20:34 Artech 阅读(7396) 评论(58) 推荐(17) 编辑
摘要:我不知道大家对CodeDom的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过VS,你就应该体验过它带给我们在编程上的便利。随便列举三种典型的代码生成的场景:强类型DataSet、Resource和添加Web Reference。总的来说,通过和VS集成的动态代码生成工具使我们可以“强类型”的方式进行编程,进而提供我们的效率并减低错误的几率。除了VS提供的这些典型的代码生成场景中,我们可以根据需要开发一些自定义代码生成器,并且通过VS的扩展实现后台代码的实时生成,从而实现强类型编程的目的。 阅读全文
posted @ 2010-09-16 00:05 Artech 阅读(13169) 评论(61) 推荐(39) 编辑
摘要:由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行。具体的现象在《只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题》有过详细的介绍。解决的方案就是对相关的程序集进行强签名,并加到GAC中。程序集签名很好实现——仅仅需要借助VS给项目指定一个签名用的Key File就可以了,但是,VS做得不够好。 阅读全文
posted @ 2010-09-10 23:32 Artech 阅读(8734) 评论(27) 推荐(10) 编辑
摘要:关于如何解决分布式系统中的跨时区问题,上一篇详细介绍了解决方案的实现原理。尽管《原理篇》中介绍了那么多,解决方案的本质就是:在进行服务调用过程中将客户端的时区信息作为上下文传入服务端,并以此作为时间转换的依据。在这一篇中我们根据这个原理通过一个简单的例子来证明其可行性。。 阅读全文
posted @ 2010-09-10 00:23 Artech 阅读(5777) 评论(16) 推荐(6) 编辑
摘要:《谈谈你最熟悉的System.DateTime[上篇][下篇]》从跨时区的角度对DateTime这个我们熟知的类型进行了深入探讨,它们都是为这篇文章作的准备工作。在接下来的两篇文章中,我们将完整的介绍如果在一个分布式系统中处理时区的问题。 阅读全文
posted @ 2010-09-08 23:50 Artech 阅读(9606) 评论(21) 推荐(11) 编辑
摘要:在《谈谈你最熟悉的DateTime》一文中,我们从跨时区的角度剖析了我们熟悉的时间类型。如果你采用传统的ADO.NET编程,并用DataSet作为数据实体,可能你会熟悉DataSetDateTime这个类型。这个类型也是为实现跨时区场景设计的,为了对前文的补充,这篇文章就来谈谈基于DataSet的时间处理问题。 阅读全文
posted @ 2010-09-05 11:24 Artech 阅读(7849) 评论(29) 推荐(20) 编辑
摘要:最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考——时间的处理。具体来说,是分布式应用中如何有效地进行时间的处理以提供对跨时区的支持。不过,对该问题解决方案的介绍我会放在后续的文章中,在这里我们先来介绍一些基础性的内容——谈谈我们熟悉的DateTime类型 阅读全文
posted @ 2010-09-04 10:16 Artech 阅读(16624) 评论(69) 推荐(72) 编辑
摘要:在前一篇文章中我曾经说过,现在正在做一个小小的框架以实现采用统一的API实现对上下文(Context)信息的统一管理。这个框架同时支持Web和GUI应用,并支持跨线程传递和跨域传递,和对上下文项目的读写控制。在对后两个特性的支持上,出现一个小小的关于序列化的问题。解决方案只需要改动短短的一行代码,结果却让我折腾了老半天... 阅读全文
posted @ 2010-08-31 20:16 Artech 阅读(6599) 评论(22) 推荐(15) 编辑
摘要:有一次和人谈起关于事务的话题,谈到怎样的资源才能事务型资源。除了我们经常使用的数据库、消息队列、事务型文件系统(TxF)以及事务性注册表(TxR)等,还有那些资源直接可以纳入事务进行状态的管理呢?我说如果我们按照.NET事务模型的规范对相应的资源进行合理的封装,原则上我们可以让任何可编程的资源成为事务型资源。本篇文章中,我将通过简单的编程将一个普通的变量变成支持事务,让变量的值也可以回滚,以确保事务前后的数据一致性。 阅读全文
posted @ 2010-08-16 22:09 Artech 阅读(10419) 评论(61) 推荐(40) 编辑
摘要:最近园子里发表了一些讨论“事件(Event)”的文章,我也来凑个热闹,谈谈我对事件的一些粗浅的认识。本文不谈设计模式(主要是观察者模式),只从运行时的角度来分析事件这个对象到底是个什么东西?它有那么神秘吗?为了更好的分析事件,本文将会编写一些例子来模拟事件的订阅机制。本文对事件的分析可以概括为下面三句话:1.事件本质上是一个MulticastDelegate对象; 2.MulticastDelegate对象是多个Delegate对象的链表;3.Delegate = Object + MethodInfo,委托的执行最终通过反射来完成。 阅读全文
posted @ 2010-07-10 13:56 Artech 阅读(11905) 评论(29) 推荐(34) 编辑
摘要:“异常处理对于最终的开发人员是透明的”,就我个人的项目经验来讲,这是一种理想的状态。由于异常策略是一般是通过配置动态配置的,不需要反映在代码上面。如果能够通过框架的方式提供异常处理的实现,使开发人员无需编写任何异常处理的代码,只需要关注业务流程的实现就可以了,这不仅能够提高开发的效率,也能够提高系统的可维护性。 阅读全文
posted @ 2010-03-26 21:33 Artech 阅读(19484) 评论(92) 推荐(73) 编辑
摘要:在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息;或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次之间数据。在这篇文章中,我创建了一个称为ApplicationContext的组件,对上下文信息进行统一的管理。 阅读全文
posted @ 2010-02-25 21:00 Artech 阅读(11803) 评论(53) 推荐(23) 编辑

上一页 1 ··· 8 9 10 11 12 13 14 下一页