﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-adaiye</title><link>http://www.cppblog.com/adaiye/</link><description>If you think you can, you can!</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:09:04 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:09:04 GMT</pubDate><ttl>60</ttl><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记(3) 命名规范</title><link>http://www.cppblog.com/adaiye/archive/2007/10/11/33928.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Thu, 11 Oct 2007 01:22:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/10/11/33928.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/33928.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/10/11/33928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/33928.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/33928.html</trackback:ping><description><![CDATA[<p>一组一致的的命名约定对框架的可用性及其重要。 名字要易于理解，同时必须传达每个元素的功能。</p> <h2>大小写约定</h2> <p>标识符的大小写规则</p> <p>PascalCasing：如HtmlTag&nbsp; IOStream</p> <p>camelCasing：如htmlTag&nbsp; ioStream</p> <ul> <li>要把PascalCasing用于由多个单词构成的名字空间、类型、以及成员的名字；  <li>要把camelCasing用于参数的名字。</li></ul> <h2>通用命名约定</h2> <h3><strong>单词的选择</strong></h3> <p>对框架中标识符的名字来说，很重要的一点是一目了然。</p> <p>名字的意思清楚比长度短更重要。名字应该与场景、系统的逻辑组成或物理组成以及为人熟知的概念相对应，而不应该与技术或框架相对应。</p> <ul> <li>要为标识符选择易于阅读的名字；  <li>要更看重可读性，而不是更看重简短性；  <li>不要使用下划线、连字符以及其他任何既非字母也非数字的字符；  <li>不要使用匈牙利命名法；  <li>避免使用与广泛使用的编程语言的关键字有冲突的标识符。</li></ul> <h3><strong>使用单词缩写和首字母缩写词</strong></h3> <p>一般来说，不要在标识符中使用单词缩写或首字母缩写：宁可名字长一点，也不要别人看不懂。&nbsp; 尤其不要使用未被广泛接受的单词缩写和首字母缩写词。</p> <ul> <li>不要使用缩写词或缩略词作为标识符名字的一部分<br>用GetWindow&nbsp; 不用GetWin  <li>不要使用未被广泛接受的首字母缩写词<br>多谓广泛接受：用搜索引擎在网上搜索该首字母缩写词，如果返回的前几个结果与期望相符，那么该首字母缩写词才有资格被称为众所周知。</li></ul> <h3><strong>避免使用语言特有的名字</strong></h3> <ul> <li>要给类型名使用语义上有意义的名字，而不要使用特有的关键字<br>GetLength比GetInt要好  <li>要使用CLR的通用类型名，而不要使用语言特有的别名  <li>要使用常见的名字，比如value或item，而不要重复类型的名字</li></ul> <h3><strong>为已有API的新版本命名</strong></h3> <p>当用新类型和新成员接替或取代已有的类型或成员时，如何选择名字：</p> <ul> <li>使用与旧API相似的名字  <li>要优先使用后缀而不是前缀来表示已有API的新版本<br>这样有助于在浏览文档或使用Intellisense时发现新版本：按字母排序  <li>可以考虑使用全新但有意义的标识符  <li>要使用数字后缀来表示已有API的新版本<br>有些名字（或工业标准）不宜添加后缀或改名  <li>不要在标识符中使用“Ex”“New”等类似的后缀来区分相同API的不同版本  <li>要在引入64位整数（long）而非32位整数进行操作的新版本API时使用“64”后缀，反之亦然。</li></ul> <h2>程序集和DLL的命名</h2> <p>程序集是一个部署单元，同时还代表托管代码程序的身份。虽然程序集可以分布一个或多个文件中，但一般来说一个程序集仅与一个DLL相对应。</p> <p>名字空间与DLL程序集的区别：</p> <blockquote> <p>名字空间：一组逻辑实体</p></blockquote> <blockquote> <p>DLL和程序集：打包和部署时的一个单</p></blockquote> <ul> <li>要为程序集和DLL选择提示性的名字，比如System.Data，这样很容易就知道它的大致功能。  <li>DLL命名：&lt;Company&gt;.&lt;Component&gt;.dll</li></ul> <h2>名字空间的命名</h2> <p>&lt;Company&gt;.(&lt;Product&gt;|&lt;Technology&gt;)[.&lt;Feature&gt;][.&lt;Subnamespace&gt;]</p> <ul> <li>要用公司名称作为名字空间的前缀，不要用缩写  <li>要用稳定的与版本无关的产品名称作为名字空间的第二层  <li>不要根据公司的组织架构来决定名字空间的层次结构，因为公司内部组织的名称一般来说不会持续太长的时间  <li>要使用PascalCasing大小写风格，并用点号来分隔名字空间的各部分。<br>如Microsoft.Office.PowerPoint  <li>考虑适当的时候在名字空间中使用复数形式。&nbsp; 首字母缩写词例外<br>System.Collections<br>System.IO  <li>不要用相同的名字来命名名字空间与位于该名字空间中的类型<br>如：不要将名字空间命名为Debug，然后又在该名字空间中提供一个名为Debug的类。</li></ul> <h3><strong>名字空间和类型冲突</strong></h3> <ul> <li>不要引入太一般化的类型名，比如Element、Node、Log以及Message。</li></ul> <p>不同类型的名字空间，有不同的规范来避免类型名的冲突：</p> <ul> <li>应用程序模型名字空间（application model namespace）<br>属于单个应用程序模型的名字空间经常一起使用，但是它们几乎不合属于其他应用程序模型的名字空间一起使用<br>System.Windows*<br>System.UI*  <li>基础设施名字空间（infrastructure namespace）<br>此类别包含一些在开发常用应用程序时很少会导入的名字空间  <li>核心名字空间（core namespace）<br>包含了所有的System名字空间，但应用程序模块名字空间和基础设施名字空间除外。&nbsp; 包括System、System.IO、System.Xml以及System.Net等等  <li>技术名字空间组（technology namespace group）<br>此类别包含所有那些以相同的两个前缀（&lt;Company&gt;.&lt;Technology&gt;*）开始的名字空间。</li></ul> <h2>类、结构和接口的命名</h2> <p>一般来说类型名应该是名词词组。如果无法为类型找到一个名词词组，那么应该重新考虑类型的总体设计。</p> <p>另一个中重要的考虑因素：最易于识别的名字应该用于最常用的类型。</p> <p>最常用的类型名应该反映出使用场景，而不是继承层次。</p> <ul> <li>要用名词词组来给类型命名。使用PascalCasing风格  <li>不要给类名加前缀<br>只有接口才能（可以）被加前缀“I”，那是因为.NET框架受到COM及Java的影响  <li>考虑让派生类的名字以其基类结尾<br>public class FileStream : Stream {...}  <li>要确保一对类/接口的名字只差一个“I”前缀，如果该类是该接口的标准实现。<br>public interface IComponent {...}<br>public class Component : IComponent {...}</li></ul> <h3><strong>泛型类型参数的命名</strong></h3> <ul> <li>要用描述性的名字来命名  <li>考虑用T来命名参数类型  <li>要给描述性的类型参数名加上T前缀  <li>考虑在类型参数中显示出施加于该类型参数上的限制</li></ul> <h3><strong>枚举类型的命名</strong></h3> <ul> <li>要用单数名词来命名枚举类型，除非它表示的是位域（bit field）  <li>不要给枚举类型的名字添加“Enum”后缀，也不要添加“Flag”、“Flags”等后缀  <li>不要给枚举类型值的名字添加前缀<br>此规范与C++中通常所使用的恰好相反。在C++中给枚举的每个成员加上完成的限定符是很重要的，因为它们可能在枚举名的作用域之外被访问。但是在托管代码中，枚举成员只能通过枚举名的作用域来访问。</li></ul> <h2>类型成员的命名</h2> <p>类型：方法、属性、事件、构造函数、字段</p> <h3><strong>方法的命名</strong></h3> <p>要尽量根据方法所对应的任务来给它们命名，而不要根据一些实现细节。</p> <ul> <li>要用动词或动词词组来命名方法</li></ul> <h3><strong>属性的命名</strong></h3> <ul> <li>要用名词、名词词组或形容词来命名属性  <li>不要让属性名看起来与“Get”方法的名字相似  <li>要用肯定性的短语（CanSeek而不是CantSeek）来命名布尔属性  <li>考虑用属性的类型名来命名属性<br>public enum Color {...}<br>public class Control<br>{<br>&nbsp;&nbsp;&nbsp; public Color Color<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get {...}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set {...}<br>&nbsp;&nbsp;&nbsp; }<br>}</li></ul> <h3><strong>事件的命名</strong></h3> <ul> <li>要用动词或动词短语来命名事件<br>事件总是表示一些动作，要么正在发生，要么已经发生  <li>要用现在时和过去时来赋予事件名之前和之后的概念<br>窗口关闭之前发生的close事件：Closing<br>窗口关闭之后发生的close时间：Closed  <li>不要用Before和After前缀或后缀来区分前置和后置事件  <li>要在命名事件处理函数（用作事件类型的委托）时加上“EventHandler”后缀  <li>要在事件处理函数中用sender和e作为两个参数的名字<br>sender：触发事件的对象，在整个.NET框架中，sender为object类型  <li>要在命名事件的参数类型时加上“EventArgs”后缀</li></ul> <h3><strong>字段的命名</strong></h3> <ul> <li>PascalCasing风格  <li>名词或名词短语  <li>不要给字段名添加前缀</li></ul> <h2>参数的命名</h2> <ul> <li>camelCasing风格  <li>要使用描述性的参数名<br>参数名要具备足够的描述性，使得在大多数情况下，用户根据参数的名字和类型就能够确定它的意思  <li>考虑根据参数的意思而不是参数的类型来命名参数</li></ul> <h2>资源的命名</h2> <p>本地化的资源就好比是属性，可以通过特定的对象来引用。因此，它的命名规范与属性的相似。</p> <ul> <li>要在命名属性关键字（resource key）时使用PascalCasing大小写风格  <li>要使标识符的名字具有描述性而不是使名字变短  <li>不要使用各主要CLR编程语言特有的关键字  <li>要在命名资源时使用字母、数字和下划线  <li>要用点号来给标识符清楚地划分层次  <li>要在为异常消息资源命名是遵循下面的命名约定：<br>资源标识符应该是异常的类型名加一个简短的异常标识符，之间以点号分隔</li></ul><img src ="http://www.cppblog.com/adaiye/aggbug/33928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-10-11 09:22 <a href="http://www.cppblog.com/adaiye/archive/2007/10/11/33928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Adobe Flex 3最有趣的特征之一 :Web设计者和开发者的相遇</title><link>http://www.cppblog.com/adaiye/archive/2007/09/21/32622.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Fri, 21 Sep 2007 06:27:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/21/32622.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/32622.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/21/32622.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/32622.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/32622.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/09/21/32622.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/32622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-21 14:27 <a href="http://www.cppblog.com/adaiye/archive/2007/09/21/32622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈C#之关键字（1）</title><link>http://www.cppblog.com/adaiye/archive/2007/09/20/32568.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Thu, 20 Sep 2007 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/20/32568.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/32568.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/20/32568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/32568.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/32568.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 每一种语言都有非常多的关键字，而且这些关键字也都大同小异，不过毕竟还是有些许的不一样。有些关键字大家碰到的多了，自然就熟悉了，但是有些关键字用得不大多，或者是新引入的，所以就不大熟悉了。我平常在用的时候，就是会碰到一些关键字，感觉有点生疏，平常也会把这些我不懂的关键字的用法了解一下并记录下来。想到应该也有很多跟我同样的人，所以就把我的记录跟大家分享一下。请各位tx多多指正！<br><strong>访问关键字</strong><br>&nbsp;&nbsp;&nbsp; base：用于派生类中访问基类的成员  <ul> <li>调用基类上已被其他方法重写的方法  <p>1 public override void&nbsp;GetInfo()<br>2 {<br>3 base.GetInfo();&nbsp;//&nbsp;调用基类上的GetInfo方法<br>4 }</p> <li>指定创建派生类实例时应用的基类构造函数  <p>1 public&nbsp;MyDerived()&nbsp;:&nbsp;base()&nbsp;//&nbsp;调用基类的构造函数<br>2 {<img alt="" src="http://www.cnblogs.com/Images/dot.gif">}</p></li></ul>&nbsp;&nbsp;&nbsp; 从静态方法中使用base关键字是错误的。<br><strong>转换关键字<br></strong>explicit：用于声明用户定义的显式类型转换运算符  <p>1 class&nbsp;MyType<br>2 {<br>3 public static explicit operator&nbsp;MyType(int&nbsp;i)<br>4 &nbsp;&nbsp;&nbsp;&nbsp;{<br>5 //&nbsp;从int转换到MyType类型的代码<br>6 &nbsp;&nbsp;&nbsp;&nbsp;}<br>7 }  <p><strong></strong>显式转换运算符必须通过类型转换调用  <p>1 int&nbsp;i;<br>2 MyType&nbsp;x&nbsp;=&nbsp;(MyType)i;&nbsp;//&nbsp;int到MyType类型的转换需要进行类型转换  <p>&nbsp;&nbsp;&nbsp; 如果转换操作可能导致异常或信息丢失，则应用explicit关键字标记它。<br>&nbsp;&nbsp;&nbsp; implicit：用于声明用户定义的隐式转换运算符&nbsp;  <p>1 class&nbsp;MyType<br>2 {<br>3 public static implicit operator int(MyType&nbsp;m)<br>4 &nbsp;&nbsp;&nbsp;&nbsp;{<br>5 //&nbsp;从MyType转换到int类型的代码<br>6 &nbsp;&nbsp;&nbsp;&nbsp;}<br>7 }  <p>1 MyType&nbsp;x;<br>2 int&nbsp;i&nbsp;=&nbsp;x;&nbsp;&nbsp;//&nbsp;隐式地调用MyType的MyType到int类型的转换运算符  <p><strong></strong>隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。<br>&nbsp;&nbsp;&nbsp; 一般情况下，调用某一个隐式转换时，应当绝不会引发异常，并且不会造成信息丢失。否则，应将其标记为explicit。<br><strong>方法参数关键字</strong><br>&nbsp;&nbsp;&nbsp; 如果声明方法的参数时没有指明ref或out，该参数将具有与该方法相关的值。这个值在方法中能被更改，但是当程序返回到调用过程时，这种改动不会被保留。<br><strong><br></strong>&nbsp;&nbsp;&nbsp; params：用于指定在参数数目可变时带有参数的方法参数<br>&nbsp;&nbsp;&nbsp; 在方法声明中的params关键字之后不允许引入任何其他参数，但在其前面可以有其他参数。而且在方法声明中只允许使用一个params关键字。  <p>&nbsp;1 public static void&nbsp;UseParams(params int[]&nbsp;list)<br>&nbsp;2 {<br>&nbsp;3 for(int&nbsp;i&nbsp;= 0;&nbsp;i&nbsp;&lt;&nbsp;list.Length;&nbsp;i++)<br>&nbsp;4 &nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(list[i]);<br>&nbsp;6 &nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;7 }<br>&nbsp;8<br>&nbsp;9 public static void&nbsp;Main()<br>10 {<br>11 &nbsp;&nbsp;&nbsp;&nbsp;UseParams（1,2,3）;<br>12 int[]&nbsp;myArray&nbsp;= new int[3]&nbsp;{&nbsp;10,11,12&nbsp;};<br>13 &nbsp;&nbsp;&nbsp;&nbsp;UseParams(myArray);<br>14 }  <p>&nbsp;&nbsp;&nbsp; ref、out&nbsp; 使方法可以引用传递到该方法的那一个变量，当程序转至调用方法时，在方法中对参数所做的任何改动都将传给该变量。<br>&nbsp;&nbsp;&nbsp; ref参数的值将被传递到ref参数，故必须首先初始化；而out参数不然，它的值不会被传递到该out参数，故不必首先初始化，但它必须在方法返回以前为out参数赋值。<br>&nbsp;&nbsp;&nbsp; 属性不是变量，不能作为ref/out参数。</p><img src ="http://www.cppblog.com/adaiye/aggbug/32568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-20 17:12 <a href="http://www.cppblog.com/adaiye/archive/2007/09/20/32568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>人生轨迹的改变，首要在于思维方式的改变。－－转贴 CSDN.NET公司内部论坛：迈向成功的“脑力操” </title><link>http://www.cppblog.com/adaiye/archive/2007/09/09/31901.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Sun, 09 Sep 2007 11:26:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/09/31901.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31901.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/09/31901.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31901.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31901.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/09/09/31901.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/31901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-09 19:26 <a href="http://www.cppblog.com/adaiye/archive/2007/09/09/31901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2.5）框架设计基础</title><link>http://www.cppblog.com/adaiye/archive/2007/09/07/31766.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Fri, 07 Sep 2007 09:06:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/07/31766.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31766.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/07/31766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31766.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31766.html</trackback:ping><description><![CDATA[<p>这篇文章在一定程度上是对前面几篇文章的一个总结。</p> <p>一个成功的通用框架必须是为广大具有不同的需求、技能和背景的开发人员而设计的。框架设计师面临的最大挑战是为这些多样化的用户群提供即简单又功能强大的框架。</p> <ul> <li>要设计即功能强大又易于使用的框架。<br>80/20原则。 要把精力集中在框架中使用最为频繁的部分（20%）  <li>要明确地为具有不同编程风格、需求、技能以及使用不同编程语言的开发人员设计框架。  <li>要了解哪些使用多语言框架的广大开发人员。<br>我们往往会只为自己设计API，而没有清楚地考虑用户的真正需求。</li></ul> <p>渐进框架</p> <blockquote> <p>针对不同的使用场景，为不同的开发团体提供不同的产品，这种多框架的方法在某种程度上说是成功的，比如MS有Visual Basic程序库，有Win32程序库，也有MFC和ATL，但它也存在严重的缺点：多框架使得使用某个框架的开发人员难以将他们的知识转移到下一个技能等级或使用场景（这通常需要另一个框架）。</p> <ul> <li>.NET框架所做的是把VB、MFC、ATL、ASP等这些模型统一起来。无论开发人员使用何种编程语言或者选择何种编程模型，可供使用的API始终都是一致的。<br>一个更好的方法是提供渐进框架（Progresive framework）。&nbsp; 从无到有，慢慢积累知识，并应用到以后更高级的使用场景中去。  <li>.NET框架就是一个渐进框架。<br>渐进框架的目标是覆盖广大的开发人员，但并不是所有可能的开发人员。<br>这也应了没有十全十美这句话：不可能满足每一个开发人员的需求。</li></ul></blockquote> <p>框架设计的基本原则：</p> <blockquote> <p>对用户而言，真正的开发效率来自能够轻易地创造非凡的产品，而并非来自能够轻易地创造垃圾。</p></blockquote> <ol> <li><a href="http://www.blogjava.net/adaiye/archive/2007/08/29/141014.html" target="_blank">场景驱动设计原则</a>  <li><a href="http://www.blogjava.net/adaiye/archive/2007/09/03/142204.html" target="_blank">低门栏原则</a>  <li><a href="http://www.blogjava.net/adaiye/archive/2007/09/05/142869.html" target="_blank">自说明对象原则</a>  <li><a href="http://www.blogjava.net/adaiye/archive/2007/09/05/142941.html" target="_blank">分层架构原则</a></li></ol><img src ="http://www.cppblog.com/adaiye/aggbug/31766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-07 17:06 <a href="http://www.cppblog.com/adaiye/archive/2007/09/07/31766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2.4）分层架构原则</title><link>http://www.cppblog.com/adaiye/archive/2007/09/05/31631.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 05 Sep 2007 08:54:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/05/31631.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31631.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/05/31631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31631.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31631.html</trackback:ping><description><![CDATA[<p>分层设计使得在单个框架中同时提供强大的功能和易用性成为可能。</p>
<ul>
    <li>考虑对框架进行分层，使高层API能提供最佳的开发效率，低层API能提供最强大的功能和最丰富的表现力。<br>通俗地讲，象我这样的菜鸟只能用高层API，太低层都不懂，而牛人们都是想用也更愿意用低层API的强大功能的（个人意见）。ps：这边的高层跟低层不是指高深的意思。而是从易用性方面考虑的！  </li>
    <li>避免把低层API和高层API混在同一名字空间中，如果低层API非常复杂的话（即包含了许多类型）。  </li>
    <li>要确保单个特性域中不同的层能很好的集成在一起。</li>
</ul><img src ="http://www.cppblog.com/adaiye/aggbug/31631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-05 16:54 <a href="http://www.cppblog.com/adaiye/archive/2007/09/05/31631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ListView 日期,数字,字符排序</title><link>http://www.cppblog.com/adaiye/archive/2007/09/05/31629.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 05 Sep 2007 08:36:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/05/31629.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31629.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/05/31629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31629.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31629.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ListView 日期,数字,字符排序&nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/09/05/31629.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/31629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-05 16:36 <a href="http://www.cppblog.com/adaiye/archive/2007/09/05/31629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2.3）自说明对象原则</title><link>http://www.cppblog.com/adaiye/archive/2007/09/05/31613.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 05 Sep 2007 05:09:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/05/31613.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31613.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/05/31613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31613.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31613.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在简单的使用场景中，一定要让框架无需文档就能使用。<br><br>    * 要确保API是直观的，无需查阅参考文档就能用于基本场景<br>      你总不希望写个“Hello World”都去查阅API文档吧。<br>    * 要为所有的API提供优秀的文档。<br>      一方面，并非所有的API都能自说明。不同的人会认为不同的API是自说明的；<br>      另一方面，有些人想在开始使用API之前完全理解它们。&nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/09/05/31613.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/31613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-05 13:09 <a href="http://www.cppblog.com/adaiye/archive/2007/09/05/31613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做礼拜</title><link>http://www.cppblog.com/adaiye/archive/2007/09/03/31451.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Mon, 03 Sep 2007 03:39:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/03/31451.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31451.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/03/31451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31451.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31451.html</trackback:ping><description><![CDATA[<p>又是一周过去了，星期一又来了！早上，在公司里偷个空，写点东东：</p> <p>昨天是星期日：基督徒做礼拜的日子！</p> <p>自从呆子去年去了英国，也有一年多没见到她了。昨天我们越好见面的，还有冲哥和晓丹！昨天也是她要做礼拜的日子：她在英国受洗了！我以前也从来没有见识过基督教做礼拜的场景，所以跟呆子说，也想看看。我到富阳的时候他们的仪式已经开始了，我到的时候，上面是长老在做报告类似的，因为讲得是富阳话，我不大听得懂；不过这个很快也就结束了（大概是在我来之前已经讲了很久了:-P）。然后，他们就开始唱圣歌，唱了很多，我个人感觉那个旋律还不错，也很容易上口，也跟着唱了几首。圣歌中都是些赞颂耶稣，赞颂主的，也有一些是说希望主不要摒弃他们的，还有就是希望主收留他们。呆子，一直都在非常虔诚的唱，而且每次低头祷告的时候都非常虔诚（我作为外人，自然体会不到其中的滋味）。唱完圣歌，过后是讲了一段圣经上的内容，我们四个人，除了呆子，其他的都没有认真的在听，所以也不知道具体地讲了些什么。不过我听到一个故事印象非常深刻：有一对夫妻，妻子是基督徒。故事就讲到那个丈夫，如果打他妻子，她绝对不会还手，而且还是笑脸相迎！ 这个也许就是常说的那个故事：如果有人打你左脸，你要把右脸让他打！这个礼拜好像还有圣餐，不过呆子说我们没有受洗过，不能接受的！</p> <p>后来，也跟呆子聊了很多。也大致了解了基督教的一些东西。她也说她自己变了很多，在英国最重要的事就是找到了自己的主。在我看来她在英国最重要的的确是找到了自己的主，找到了自己一生的寄托。</p> <p>我从来不会觉得因为有宗教信仰，呆子就是另类了。在我看来呆子还是呆子，唯独变的只是她找到了一个可以倾诉的对象！</p><img src ="http://www.cppblog.com/adaiye/aggbug/31451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-03 11:39 <a href="http://www.cppblog.com/adaiye/archive/2007/09/03/31451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2.2）低门栏原则</title><link>http://www.cppblog.com/adaiye/archive/2007/09/03/31441.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Mon, 03 Sep 2007 02:01:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/09/03/31441.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31441.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/09/03/31441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31441.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31441.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 框架必须以易于使用的方式来为普通用户提供一个低门栏。&nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/09/03/31441.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/31441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-09-03 10:01 <a href="http://www.cppblog.com/adaiye/archive/2007/09/03/31441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>连接数据库和相关数据库操作——之我的方法 利用OLEDB</title><link>http://www.cppblog.com/adaiye/archive/2007/08/31/31284.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Fri, 31 Aug 2007 04:28:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/31/31284.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31284.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/31/31284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31284.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31284.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 数据库连接和操作！&nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/08/31/31284.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/31284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-31 12:28 <a href="http://www.cppblog.com/adaiye/archive/2007/08/31/31284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一位软件工程师的6年总结（转）</title><link>http://www.cppblog.com/adaiye/archive/2007/08/31/31279.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Fri, 31 Aug 2007 03:49:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/31/31279.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31279.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/31/31279.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31279.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31279.html</trackback:ping><description><![CDATA[<a  href="http://blog.csdn.net/chary8088/archive/2007/08/31/1766678.aspx"><br></a>
<div class="postText">		一位软件工程师的6年总结 <br><br>作者：成晓旭 <br>&nbsp;<br><br>&#8220;又
是一年毕业时&#8221;，看到一批批学子离开人生的象牙塔，走上各自的工作岗位；想想自己也曾经意气风发、踌躇满志，不觉感叹万千&#8230;&#8230;本文是自己工作6年的经历沉
淀或者经验提炼，希望对所有的软件工程师们有所帮助，早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议，前
面几点旨在确定大的方向，算是废话吧。 <br><br>谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员：PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。 <br><br>1、
分享第一条经验：&#8220;学历代表过去、能力代表现在、学习力代表未来。&#8221;其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道
理有些体会吧。但我相信这一点也很重要：&#8220;重要的道理明白太晚将抱憾终生！&#8221;所以放在每一条，让刚刚毕业的朋友们早点看到哈！ <br><br>2、
一定要确定自己的发展方向，并为此目的制定可行的计划。不要说什么，&#8220;我刚毕业，还不知道将来可能做什么？&#8221;，&#8220;跟着感觉走，先做做看&#8221;。因为，这样的观
点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术，将来成为专家级人物？向管理方向走，成为职业经理人？先熟悉行业和领域，将来自立门
户？还是先在行业里面混混，过几年转行做点别的？这很重要，它将决定你近几年、十年内&#8220;做什么事情才是在做正确的事情！&#8221;。 <br><br>3、
软件开发团队中，技术不是万能的，但没有技术是万万不能的！在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软
件项目团队中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、测试、文档、实施、维护，多少你都要有技术基
础。算我孤陋寡闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个&#8220;高学历的
牛人&#8221;(非技术型)带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句&#8220;再也受不了啦！&#8221;四分五裂、各奔东西。那个项目的&#8220;成功度&#8221;大家可想
而知了。 <br><br>4、
详细制定自己软件开发专业知识学习计划，并注意及时修正和调整(软件开发技术变化实在太快)。请牢记：&#8220;如果一个软件开发人员在1、2年内都没有更新过自
己的知识，那么，其实他已经不再属于这个行业了。&#8221;不要告诉自己没有时间。来自时间管理领域的著名的&#8220;三八原则&#8221;告诫我们：另外的那8小时如何使用将决定
你的人生成败！本人自毕业以来，平均每天实际学习时间超过2小时。 <br><br>5、
书籍是人类进步的阶梯，对软件开发人员尤其如此。书籍是学习知识的最有效途径，不要过多地指望在工作中能遇到&#8220;世外高人&#8221;，并不厌其烦地教你。对于花钱买
书，我个人经验是：千万别买国内那帮人出的书！我买的那些家伙出的书，!00%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖
掉。&#8220;拥有书籍并不表示拥有知识；拥有知识并不表示拥有技能；拥有技能并不表示拥有文化；拥有文化并不表示拥有智慧。&#8221;只有将书本变成的自己智慧，才算是
真正拥有了它。 <br><br>6、
不要仅局限于对某项技术的表面使用上，哪怕你只是偶尔用一、二次。&#8220;对任何事物不究就里&#8221;是任何行业的工程师所不应该具备的素质。开发Windows应用
程序，看看Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序；用VC＋＋、
Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码；除了会用J2EE、
JBoss、Spring、Hibernate等等优秀的开源产品或者框架，抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。
试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你&#8220;知其然且知其所以然&#8221;！ <br>&nbsp;<br>7、
在一种语言上编程，但别为其束缚了思想。&#8220;代码大全&#8221;中说：&#8220;深入一门语言编程，不要浮于表面&#8221;。深入一门语言开发还远远不足，任何编程语言的存在都有其
自身的理由，所以也没有哪门语言是&#8220;包治百病&#8221;的&#8220;灵丹妙药&#8221;。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是：用
面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式？用传统的桌面开发工具(目前主要有VC++、Delphi)进行系
统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源
框架？在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式？为什么一切都必须以个
人、团队在当然开发语言上的传统或者经验来解决问题？？？&#8220;他山之石、可以攻玉&#8221;。 <br><br>8、
养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知，对软件开发人员
而言，有、无经验的一个显著区别是：无经验者完成任何任务时都从头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题（其实这个结论不应该被
局限在软件开发领域、可以延伸到很多方面）。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识
库中。但是，最好还是自己实现，这样没有知识产权、版权等问题，关键是自己实现后能真正掌握这个知识点，拥有这个技能。 <br><br>9、
理论与实践并重，内外双修。工程师的内涵是：以工程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思
想精髓的人（个人观点、欢迎探讨）。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度
来看，这只是外在的东西，并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思
想来解决具体的软件产品研发问题，才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想
与方式，最终形成自己的理论体系和实用方法论。 <br><br>10、心态有多开放，视野就有多开阔。不要抱着自己的技术和成果，等到它们都已经过时
变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机
会。想想自己2000年间开发的那些Windows系统工具，5、6年之后的今天，还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但
进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思想，尽可能地与人交流与分享，或者传授给开发团队的成员。&#8220;与人交换苹果之后，每个人还
是只有一个苹果；但交换思想之后，每个人都拥有两种思想&#8221;，道理大家都懂，但有多少人真正能做到呢？ <br><br>11、尽量参加开源项目的开发、
或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。网络早已不再只是&#8220;虚拟世界&#8221;，网上有很多的开源项目、合作开发项目、外包项目，这都是
涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一
样。如果当他别人拿着合同找你合作，你却这也不会，那也不熟时，你将后悔莫及。 <br><br>12、书到用时方恨少，不要将自己的知识面仅仅局限于
技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明：
&#8220;对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。&#8221;教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。
可见，掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等
知识，有空花时间看看，韬光养晦、未雨绸缪。 <br><br>13、本文的总结与反思： <br><br>A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。 <br><br>B：提高软件知识和技术只是问题的表面，本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理，可以很容易地延伸、应用到生活的其它方面。 <br><br>C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。</div><img src ="http://www.cppblog.com/adaiye/aggbug/31279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-31 11:49 <a href="http://www.cppblog.com/adaiye/archive/2007/08/31/31279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》——学习笔记（2）框架设计的基本原则</title><link>http://www.cppblog.com/adaiye/archive/2007/08/29/31173.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 29 Aug 2007 09:48:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/29/31173.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31173.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/29/31173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31173.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31173.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对用户而言，真正的开发效率来自能够轻易地创造出非凡的产品，而并非来自能够轻易地创造垃圾。&nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/08/29/31173.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/31173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-29 17:48 <a href="http://www.cppblog.com/adaiye/archive/2007/08/29/31173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（1）</title><link>http://www.cppblog.com/adaiye/archive/2007/08/28/31017.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Tue, 28 Aug 2007 06:23:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/28/31017.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/31017.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/28/31017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/31017.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/31017.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如果框架的设计者能够站在使用者背后解释应该如何使用框架，那么就不需要同规范了。&nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/08/28/31017.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/31017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-28 14:23 <a href="http://www.cppblog.com/adaiye/archive/2007/08/28/31017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何获得数据库里所有表的名字（转）</title><link>http://www.cppblog.com/adaiye/archive/2007/08/22/30635.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 22 Aug 2007 14:12:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/22/30635.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/30635.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/22/30635.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/30635.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/30635.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在CSDN上看到这篇文章，感觉很有用，不敢独享，转过来大家一起看看！&nbsp;&nbsp;<a href='http://www.cppblog.com/adaiye/archive/2007/08/22/30635.html'>阅读全文</a><img src ="http://www.cppblog.com/adaiye/aggbug/30635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-22 22:12 <a href="http://www.cppblog.com/adaiye/archive/2007/08/22/30635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>规范？！</title><link>http://www.cppblog.com/adaiye/archive/2007/08/22/30561.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 22 Aug 2007 01:56:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/22/30561.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/30561.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/22/30561.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/30561.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/30561.html</trackback:ping><description><![CDATA[<p> <script type="text/javascript"><!--
google_ad_client = "pub-2823374497557651";
google_ad_width =" 250;
google_ad_height" = 250;
google_ad_format =" "250x250_as";
google_ad_type" = "text_image";
//2007-08-21: youhua
google_ad_channel =" "1405522066";
google_color_border" = "ffffff";
google_color_bg =" "ffffff";
google_color_link" = "333333";
google_color_text =" "000000";
google_color_url" = "008000";
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>  <script type="text/javascript"><!--
google_ad_client = "pub-2823374497557651";
google_ad_width =" 250;
google_ad_height" = 250;
google_ad_format =" "250x250_as";
google_ad_type" = "text_image";
//2007-08-21: youhua
google_ad_channel =" "1405522066";
google_color_border" = "ffffff";
google_color_bg =" "ffffff";
google_color_link" = "333333";
google_color_text =" "000000";
google_color_url" = "008000";
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> </p>
<p>在学校里，一直都知道，做事情（开发）要有规范，应该先怎样，然后怎样，最后做什么，这些都是知道的，而且还是学的重点。可是，真真到了岗位上，真真要自己动手的时候，什么都抛掉了！</p>
<p>只图方便，只图快捷，根本就不管什么可读性，什么可维护性，连注释都没有，更不用说什么文档的。昨晚也想到要好好的写写文档，可是今天到了公司，又不愿意写了。其实，也是另有内情：我实在是不知道，到底该如何下手。</p>
<p>所以，我也请晓鸣能够把他以前写的文档，借我看看，让我好有个参考，看看到底大致该怎么写，应该写些什么内容。</p>
<p>当然，这次，我也暂且先不写，一方面，考虑到，目前为在做的只是一个试用版，日后一定会再做过的；另一方面，钱好像急着想用它，就先完成它再说吧（也许完成后，再来写文档也好，我知道，这个不可取，可总比没有好）。</p>
<p>刚刚，我也想到，等这个完成，给钱之后，让他先去跑跑看；然后，我再抛掉所有的东西，重头做过。到时候要<u>好好</u>的做！</p>
<p>可是，我把这个想法跟晓鸣说了之后，问他我有没有可能重新做过，他却说不大可能。郁闷......看不起我！呵呵......也以此为鉴吧！希望我日后，不要如晓鸣所言，而且，这个算是我的第一个项目，一定要好好做才行。</p>
<p>写此文以记之，望日后自省，望同仁提点！</p>
<p>&nbsp;</p>
<p>PS：我也深刻认识到，没有写文档所带来的麻烦：尽管大致的结构、功能，心理都清楚，可是很多小地方，细节的东西，都是到了临时才会想起来，这样的开发，不仅没有质量保证，而且效率也不高！很多时候，还要仔细地想清楚，到底有没有什么细节没有考虑进去。</p><img src ="http://www.cppblog.com/adaiye/aggbug/30561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-22 09:56 <a href="http://www.cppblog.com/adaiye/archive/2007/08/22/30561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>挫折？鞭策！</title><link>http://www.cppblog.com/adaiye/archive/2007/08/16/30171.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Thu, 16 Aug 2007 13:26:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/16/30171.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/30171.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/16/30171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/30171.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/30171.html</trackback:ping><description><![CDATA[<p>昨天，有提到关于餐馆的事，今天写了一下概要设计（以前好像从来没有写过），还有就是确定了数据的表。在做概要设计的时候（我是按照国标写的），发现，很多项都很烦的样子。主要是我都看不懂这些条目到底要写些什么，所以都搁在那边，不高兴写了。</p>
<p>我知道这是因为我以前都没有做过项目，我也提过了，原来课程上的那些项目只要写些文档就搞定了，而且还是很多人一起写文档，所以并不能真真的理解这个文档的作用，当然也不知道如何下手喽！我也知道文档的重要性，至少学校里的老师和书都是这么说的......呵呵！</p>
<script type="text/javascript"><!--
google_ad_client = "pub-2823374497557651";
google_ad_width =" 468;
google_ad_height" = 60;
google_ad_format =" "468x60_as";
google_ad_type" = "text_image";
//2007-08-16: filemidhaibing
google_ad_channel =" "2572405262";
google_color_border" = "336699";
google_color_bg =" "ffffff";
google_color_link" = "0000ff";
google_color_text =" "000000";
google_color_url" = "008000";
//-->
</script>  <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
<p>下午，草草地写完了概要设计（其实很多条目还空着），然后完成了数据库表的设计，还有点时间多，我就继续了下前几天写的访问数据库的操作。</p>
<p>因为我是一个超级菜鸟，而且是那种没有飞过的菜鸟，所以所有的东西都是从头开始的。关于那个数据库操作，也是前几天我请晓鸣教我的，那天晚上是顺利的去出了menu表中的数据。今天，我想自己依着那天的思路，写一个函数：getDishByName。居然出了个错，于是我马上就僵死在那边了，郁闷啊！只能回头再请教晓鸣了!一遍又在感慨自己的没用......</p>
<p>不过，我还是感觉自己收获颇丰的，特别是那天晓鸣教我具体的数据库操作的时候。因为，我也知道，其实这些都不难，平常在看代码的时候也基本上能懂，但自己却不知道怎么下手写自己的数据库操作函数.......呵呵。可是，那天晓鸣教了下后，感觉豁然开朗......不过今天马上受挫！无奈......</p>
<p>看来，还得不断的努力啊！&nbsp; 呵呵，没有急功近利的意思，只是鞭策一下自己！</p>
<p>各位，多给我提提意见啊，希望知无不言，言无不尽！&nbsp; 谢谢......</p><img src ="http://www.cppblog.com/adaiye/aggbug/30171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-16 21:26 <a href="http://www.cppblog.com/adaiye/archive/2007/08/16/30171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>My first Mashup!</title><link>http://www.cppblog.com/adaiye/archive/2007/08/16/30146.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Thu, 16 Aug 2007 05:31:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/16/30146.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/30146.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/16/30146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/30146.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/30146.html</trackback:ping><description><![CDATA[<p>昨天，在MS上申请了一个Popfly帐户。今天，可以用了。</p>
<p>作为第一次使用Popfly，我选择了创建我的第一个Mashup，是根据它的向导来做的，做得不好，还请大家多多包涵。不过，我把它看作是一个起点......</p>
<iframe style="width: 100%; height: 100%;" src="http://www.popfly.ms/users/adaiye/my%20first%20mashup.small" frameborder="no"></iframe> <img src ="http://www.cppblog.com/adaiye/aggbug/30146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-16 13:31 <a href="http://www.cppblog.com/adaiye/archive/2007/08/16/30146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows编程&amp;mdash;&amp;mdash;Windows编程基础（3）</title><link>http://www.cppblog.com/adaiye/archive/2007/08/15/30077.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 15 Aug 2007 06:05:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/15/30077.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/30077.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/15/30077.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/30077.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/30077.html</trackback:ping><description><![CDATA[<p>续。。。。。。。。</p><p><script type="text/javascript"><!--google_ad_client = "pub-2823374497557651";google_ad_width = 336;google_ad_height = 280;google_ad_format = "336x280_as";google_ad_type = "text_image";//2007-08-26: youhuagoogle_ad_channel = "1405522066";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "000000";google_color_text = "000000";google_color_url = "008000";//--></script><script type="text/javascript"&#160; src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></p>&#160;<p><strong>4. TextBox控件</strong></p>
<p>文本框的主要用途是让用户输入文本，用户可以输入任何字符，也可以限制用户只输入数值。</p>
<p>.NET Framework内置了两个基本控件来提取用户输入的文本：TextBox和RichTextBox。这两个控件都派生于TextBoxBase，而TextBoxBase又派生于Control。</p>
<p>TextBoxBase提供了在文本框中处理文本的基本能力，例如选择文本、剪切和从剪切板上粘帖，以及许多事情。</p>
<p><strong>4.1 TextBox控件的属性</strong></p>
<p>常用属性：</p>
<ul>
    <li>CausesValidation：当控件的这个属性为true，且该控件获得了焦点时，会引发两个事件：Validating和Validated。可以处理这些事件，以便验证失去焦点的控件中数据的有效性。  </li>
    <li>CharacterCasing：这个值表示TextBox是否会改变输入的文本的大小写。可能的值有：</li>
</ul>
<ol>
    <ol>
        <li>Lower：文本框中输入的所有文本都转换为小写；  </li>
        <li>Normal：不变；  </li>
        <li>Upper：都转换为大写。</li>
    </ol>
</ol>
<ul>
    <li>MaxLength：这个值指定输入到TextBox中的文本的最大字符长度。如果设为0，表示最大字符长度仅受限于可用的内存。  </li>
    <li>Multiline：表示该控件是否是一个多行控件。多行控件可以显示多行文本。  </li>
    <li>PasswordChar：指定是否用密码字符替换在单行文本框中输入的字符。如果Multiline属性为true，这个属性就不起作用。  </li>
    <li>ReadOnly：这个Boolean值表示文本是否为只读。  </li>
    <li>ScrollBars：指定多行文本框是否显示滚动条。  </li>
    <li>SelectedText：在文本框中选择的文本。  </li>
    <li>SelectionLength：在文本中选择的字符数。如果这个值设置得比文本中的字符数大，则控件会把它重新设置为字符总数减去SelectionStart的值。  </li>
    <li>SelectionStart：文本框中被选中文本的开头。  </li>
    <li>WordWrap：指定在多行文本框中，如果一行的宽度超出了控件的宽度，其文本是否应自动换行。</li>
</ul>&#160;
<p><strong>4.2 TextBox控件的事件</strong></p>
<p>TextBox提供了以下所示的事件：</p>
<ul>
    <li>Enter、Leave、Validating、Validated：这4个事件按照列出的顺序引发。它们统称为焦点事件，当控件的焦点发生改变时引发，但有两个例外：Validating和Validated仅在控件接收了焦点，且其CausesValidation属性设置为true时引发。接收焦点的控件引发事件的原因是有时即使焦点改变了，我们也不希望验证控件的有效性。  </li>
    <li>KeyDown、KeyPress、KeyUp：这三个事件称为&#8220;键事件&#8221;。它们可以监视和改变输入到控件中的内容。KeyDown和KeyUp接收与所按下键对应的键码，这样就可以确定是否按下了特殊的键Shift或Control和F1。另一方面，KeyPress接收与键对应的字符。这表示字母a的值与A的值不同。  </li>
    <li>Change：只要文本框的文本发生了改变，就会引发该事件。</li>
</ul><img src ="http://www.cppblog.com/adaiye/aggbug/30077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-15 14:05 <a href="http://www.cppblog.com/adaiye/archive/2007/08/15/30077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Come ON！</title><link>http://www.cppblog.com/adaiye/archive/2007/08/14/30019.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Tue, 14 Aug 2007 13:17:00 GMT</pubDate><guid>http://www.cppblog.com/adaiye/archive/2007/08/14/30019.html</guid><wfw:comment>http://www.cppblog.com/adaiye/comments/30019.html</wfw:comment><comments>http://www.cppblog.com/adaiye/archive/2007/08/14/30019.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/adaiye/comments/commentRss/30019.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adaiye/services/trackbacks/30019.html</trackback:ping><description><![CDATA[<p>钱一直在提关于餐馆的计划，昨天，提到了关于界面的设计问题，我也提出了我自己的一些看法，感觉应该如何如何。</p>
<p>对于这个，郭老师，好像也很支持的样子，感觉他也是有兴趣做这一块的事情的。我也认识到，我现在确实也没什么事情在做（或者说是能做），所以，我也主动提出由我来做做看（当时，好像是指界面）。</p>
<center> <script type="text/javascript"><!--
google_ad_client = "pub-2823374497557651";
google_ad_width =" 468;
google_ad_height" = 60;
google_ad_format =" "468x60_as";
google_ad_type" = "text_image";
//2007-08-14: blogjavagonggao
google_ad_channel =" "9800615504";
//--">
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> </center>
<p>今天，在提起来的时候，我也感觉我非常想做这个系统，毕竟可以是我的一个切入口，学习和工作的切入口。我要好好的努力，抓住这个机会。况且，郭老师，也提过我可以做做这个系统，毕竟可以（要）慢慢地锻炼起来。</p>
<p>另一方面，我也认识到，其实这个系统不难，而且郭老师和晓鸣最近也很忙，所以我也是应该是主要的参与人员，或者说，基本上要由我来完成，我也想挑战一下。当然，期间会得到很多来自郭老师、晓鸣还有钱的帮助。</p>
<p>今天算是计划启动吧，初步确定启动。</p>
<p>定一下明天的任务：确定界面的选择（不过按照钱的意思，好像是三种方案都要做出来 ......然后，还有就是写一下需求文档，再有就是稍微确定下详细设计）。</p>
<p>&nbsp;</p>
<p>Come on！</p><img src ="http://www.cppblog.com/adaiye/aggbug/30019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adaiye/" target="_blank">adaiye</a> 2007-08-14 21:17 <a href="http://www.cppblog.com/adaiye/archive/2007/08/14/30019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>