摘要: .Net提供了通用的框架,可以让你支持数据绑定。你的工作就是为你的应用程序和数据提供一些特殊的事件句柄。Windows表单和Web表单以及子系统都包含了丰富的数据绑定功能。框架库已经包含了所有你须要的工具,因此,你的UI代码应该真实的描述数据源和要显示的属性,以及在把这些元素存储到数据源时须要遵守的规则。你应该集中精力创建数据类型,用于描述显示的参数,然后Winform以及Webform的数据绑定完成其它的。不应该在把数据从用户控件到数据源之间进行传输时写相关的代码(译注:指用数据绑定,而不用其它的方法)。不管怎样,数据必须从你的业务对象关联到UI控件上与用户进行交互。通过创建类型层以及使用数据绑定的概念,你就可以少写很多代码。.Net框架已经 同时在Windows和Web应用程序中为你处理了传输的工作。 阅读全文
posted @ 2008-11-11 13:59 瞪着你的小狗 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 我们要寻求一种避免直接写代码的应用程序配置和信息设置方法,我们已经创建了多种不同的策略来存储配置信息。而我们是要寻求一种正确的方法,我们要不断提高和改我们的想法,关于哪里是放置这些信息的好地方。INI文件?这是Windows3.1做的事,配置信息的结构是受限制的,而且在文件名上可能还会与其它程序程序相冲突。注册表?是的,是这个正确的想法,但它也有它的限制。 阅读全文
posted @ 2008-11-08 08:57 瞪着你的小狗 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 当有问题发生时,它们往往并不是在实验的时候发生的,机器有轻松调试的工具。在很多实际情况中,你不好修正的问题总是发生在用户的机器上,那里没有调试环境,也没有好的方法计算出问题的情况。在实际情况中,有经验的开发人员会创建一个方法,让系统在运行时捕获尽可能多的信息。.Net框架已经包含一些类集合,利用这些集合,你可以做一些通用的调试。而且这些类可以在运行时或者编译时进行配置。如果你利用它们,你就可以轻松的发现在实际运行时的问题。使用框架里已经存在的代码,你可以发送一条诊断信息到一个文件,或者到调试终端。另外,你还可以为你的产品指定特殊的调试输出级别。你应该尽快的在你的开发环境中使用这些功能,以确保你可以利用这些输出信息来修正在实际运行中没有预料到的一些问题。不要自己写诊断库除非你已经明白框架已经提供了哪些。 阅读全文
posted @ 2008-11-08 08:56 瞪着你的小狗 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 许多.net类库中的类都提供了两种不同的处理事件句柄的方法。既可以为其添加事件,也可以重写其基类的事件抽象方法。为什么要为同一件事提供两种不同的方法呢?这是为了对应不同的情况。在实现派生类的时候,更好的选择是重写基类中的抽象方法。 阅读全文
posted @ 2008-11-06 13:31 瞪着你的小狗 阅读(669) 评论(0) 推荐(0) 编辑
摘要: 通信协议的开销与麻烦就是对数据媒体的如何使用。在通信过程中可能要不同的使用媒体,例如电话,传真,地址,和电子邮件。让我们再回头来看看上次的订购情况,当你用电话订购时,你要回答售货员的一系列问题: 阅读全文
posted @ 2008-11-06 13:29 瞪着你的小狗 阅读(461) 评论(0) 推荐(0) 编辑
摘要: 文本框字数(输入还剩多少字) 阅读全文
posted @ 2008-11-04 19:39 瞪着你的小狗 阅读(771) 评论(8) 推荐(0) 编辑
摘要: 并不是所有的人都须要知道所有的事。也不是所有的类型须要是公共的。对于每个类型,在满足功能的情况下,应该尽可能的限制访问级别。而且这些访问级别往往比你想像的要少得多。在一个私有类型上,所有的用户都可以通过一个公共的接口来访问这个接口所定义的功能。 阅读全文
posted @ 2008-11-04 09:31 瞪着你的小狗 阅读(710) 评论(0) 推荐(0) 编辑
摘要: 这一条款实际应该取这个名字:“应该创建大小合理而且包含少量公共类型的程序集”。但这太沉长了,所以就以我认为最常见的错误来命名:开发人员总是把所有的东西,除了厨房里水沟以外(译注:夸张说法,kitchen sink可能是个口语词,没能查到是什么意思,所以就直译了。),都放到一个程序集。这不利于重用其中的组件,也不利于系统中小部份的更新。很多以二进制组件形式存在的小程序集可以让这些都变得简单。 阅读全文
posted @ 2008-11-04 09:28 瞪着你的小狗 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 对于有经验的程序员来说,不论在接触C#之前使用什么语言,都有一些提高代码效率的方法。不过有些做法虽然在之前的语言中有效,但在.Net环境中却适得其反。 这一点在我们尝试手动为C#编译器优化算法时尤为明显。我们的举动往往使得JIT编译无法做出更加有效的优化。那些以优化为目的的工作,结果往往是生成更慢的代码。我们完全不必追求创建最直截了当的代码,有些工作完全可以交给编译器完成。有些过分优化会造成问题,一个典型的例子就是我们为了避免进行函数调用而创建一个又长又复杂的函数。这样的做法会降低.Net应用程序的表现,是和初衷相违背的。让我们来注意一下其中的细节。 阅读全文
posted @ 2008-11-03 17:36 瞪着你的小狗 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 我们一般在类成员上使用new修饰符,来重新定义继承自基类的非虚成员。我们可以这么做并不意味着我们就应该这么做。重新定义非虚方法会导致含混不清的行为。 阅读全文
posted @ 2008-11-02 08:47 瞪着你的小狗 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 转换操作符为类之间引入了一层“替换性(substitutability)”。“替换”意味着一个类的实例可以被替换为另一个类的实例。这对我们来说可以是一种好处:一个派生类的对象可以被当做一个基类对象来使用。 阅读全文
posted @ 2008-11-01 18:23 瞪着你的小狗 阅读(529) 评论(0) 推荐(0) 编辑
摘要: 随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种、各部门。与此同时,应用系统体系的核心、系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了1000万条,可谓海量。那么,如何实现快速地从这些超大容量的数据库中提取数据(查询)、分析、统计以及提取数据后进行数据分页已成为各地系统管理员和数据库管理员亟待解决的难题。 阅读全文
posted @ 2008-10-31 11:13 瞪着你的小狗 阅读(329) 评论(2) 推荐(0) 编辑
摘要: ICloneable 听起来是个好主意:可以为那些支持复制的类型实现ICloneable接口。如果不想支持复制,那就不要实现它。但是我们的类型并非活在真空中。让一个类型支持ICloneable接口会影响它的派生类。一旦类型支持ICloneable接口,那么它所有的派生类也都必须支持它。而且,其所有成员类型也都要支持ICloneable接口,或者有其他创建复制的机制。最后,当我们设计的类型包含交织成网状的对象时,支持深复制将变得很困难。 ICloneable接口在其官方的定义里很巧妙地绕过了这个问题,其定义如下:ICloneable接口或者支持深复制(deep copy),或者支持浅复制(shallow copy)。浅复制指的是新对象包含所有成员变量的副本,如果成员变量为引用类型,那么新对象将和原对象引用同样的对象。 阅读全文
posted @ 2008-10-31 10:55 瞪着你的小狗 阅读(558) 评论(1) 推荐(0) 编辑
摘要: 有时候,我们的类型需要排序关系来支持它们在集合中的排序和搜索。.NET框架定义了两个接口来描述类型的排序关系:IComparable和IComparer。IComparable接口定义了类型的自然排序方式。IComparer则为类型提供了另外的排序方式。我们可以为类型实现各种关系操作符(、=)来提供特定于类型的比较操作,从而避免接口实现所带来的运行时开销。本条款讨论如何通过两个接口IComparable和IComparer,来为类型实现排序关系,从而支持使用.NET框架对我们的类型进行排序,并帮助其他用户通过这些操作获取最佳的性能。 阅读全文
posted @ 2008-10-30 18:55 瞪着你的小狗 阅读(765) 评论(1) 推荐(0) 编辑
摘要: 持久化(persistence)是类型的一个核心特性。这种特性往往是在我们忽略支持它们的时候,才会被注意到。如果我们的类型没有正确地支持序列化(serialization),那么其他开发人员在使用我们的类型作为成员或者基类的时候将有许多工作要做。他们必须自己实现这样的标准特性。如果不访问类型的私有实现细节,要想为类型正确实现序列化几乎是不可能的。如果我们自己不支持序列化,让类的用户来添加序列化支持将会很困难,甚至根本做不到。 阅读全文
posted @ 2008-10-30 10:16 瞪着你的小狗 阅读(833) 评论(0) 推荐(0) 编辑