将在代码中实现软件破解。至于代码,背后的架构设计或者设计思路或者模式很重要,但我觉得更重要的是好的命名。混淆或错误的命名不仅让我们难以理解代码,更糟糕的是,它会误导我们的思维,导致对代码的理解完全错误。相反,好的命名可以让我们的代码非常容易阅读和理解,也可以正确的向读者表达事物的本质和逻辑,从而大大增强代码的可维护性,阅读命名好的文章非常光滑的。会有一种享受的感觉。还有一点你可能没有感受到的就是好的命名和良好的命名习惯。由于我们总是对每个概念的名称要求很高,所以我们会思考名称所表达的概念是否正确,名称是否正确。正确表达事物的本质或正确反映动作的逻辑。所以,这种思考命名的好习惯,反过来又可以帮助我们改正之前一些错误的设计和代码实现;比如你之前可能有一个地方名字可能不准确,然后你发现还有一个地方需要用这个名字,而且更合理。所以你会发现这个名字不适合以前的地方,所以你会认为以前的地方可能需要用别的名字,或者你会发现以前的地方的设计从根本上是有问题的。这是一个名称如何促使您思考您的设计是否正确的示例。代码命名混乱或错误的主要原因:没有理解事物的本质;了解事物的本质,却不知道命名的重要性或懒得好好命名;了解事物的本质,也知道命名的重要性,但不会命名好的事物;养成良好命名习??惯的一些想法:对自己严格自律,写代码的时候要有很强的自律意识和严格的自律意识,要把每一个名字都起好;您必须努力分析和思考您当前正在命名的事物或逻辑的本质;这个很关键,如果你不深入思考,就会导致这个东西命名错误,因为你还没有想清楚你命名的东西是什么;在自律意识和一定分析能力的基础上,注意命名方法;知道什么时候用动词,什么时候用名词;形容词放在哪里,动词放在哪里,名词放在哪里;也就是说,主谓动词Youmustbeabletouseit;您的任何属性的名称必须与其实际含义一致;你的任何方法所做的必须与方法名称的含义一致;从代码的命名就可以看出写代码的人在编程的时候是否思路清晰。如果你起错了一个名字,可能表明你没有理解名字背后的含义;让你的程序中每个相似地方的命名风格始终保持一致。一会儿不用大写,一会儿用小写;一会儿全称,一会儿简称;一会儿帕斯卡命名法,一会儿骆驼命名法或者匈牙利命名法;不出现重复命名;因为通常名称是有嵌套关系的,比如类在命名空间中,方法在类中,如果一个概念在命名空间中表达,那么就不需要在类上再次表达;对于属性或者类名,名词应该永远在前面,名词决定了属性代表什么,前面的部分用来修饰名词;例如,如果您现在有一个服务,然后有一个关于订单的服务,您可以将其命名为OrderService。这个命名告诉我们这是一个服务,然后是订单服务;另一个例子是CancelOrderCommand。我们看到这个就知道这是一个Command,也就是一个命令,那么什么是命令呢?是取消订单的命令,CancelOrder表示取消订单;对于方法,它应该总是以动词开头,以名词结尾;例如,订单。Add,Item是名词,表示订单商品;在C#中,我们通常使用骆驼和Pascal命名法,而不是匈牙利命名法。我认为主要有两个原因:1)VS强大的intellisense提示的存在,我们不需要高亮变量的类型,但我认为这只是次要原因;2)真正的原因,正如我上面所说,对于一个变量来说,名词是放在第一位的,名词决定了这个变量代表什么。比如有一个变量叫totalCount,我们一看就知道是个计数,然后这个计数肯定是int或者long,就不用强调它的类型了。再比如remotingRequest,httpRequest,这种,我们也一眼就知道是requests,一个是remotingrequest,一个是httprequest。remoting,http用于修改请求。请求判断这个变量是什么(意思是我们知道它的类型),然后remoting,http就是进一步说明请求的业务意义或者当前上下文。就像disabledButton,我们一看就知道它是一个按钮,那么它是一个什么样的Button呢,它就是一个disabled按钮。因此,一个好的名字本身会让我们很容易知道这个名字是什么,它的类型是什么,有什么商业意义,所以没有必要加上类型缩写作为前缀;多学英文,多看国外优秀的开源项目中的命名技巧,对我们命名会有很大的帮助;通过一些不太好的代码命名来分析一些简单的命名问题。上面代码有很多问题,我们一一分析:方法参数,**字母,一会儿大写P,一会儿小写p,不一致;第二个参数后面出现额外的空格,这是不应该的;为什么参数_paramsTable有下划线,而其他参数没有下划线,不一致;publishRequest属于骆驼命名法,而iSignCounter、sStageIsOK属于另一种命名法,在c++中广泛使用,不一致;foreach循环中,参数名是instParam,但是后面的集合叫arrParams4SignActions,比较对称,应该叫arrInstParam;方法的前两行,有多余的空格,导致代码格式和排版混乱;从上面的代码我们可以知道,很多问题正是通过这些细节才能发现的。我们在写代码的时候,只要多用心,多注意排版是否美观一致,命名是否统一,那么代码就会写的漂亮很多。接下来我们看其他的代码:上面的代码中,两个参数的名字不一致。projectid中i为小写,publishId参数中i为大写,均应为大写;ViewData中的key,有一段时间是一个全大写的UPDATE,后面又是另外一个名字,不一致;上面标出的两个红框虽然只有一行代码,但是一个有括号,一个没有,不一致;第二个如果有多余的空行,格式混乱;上面代码中,在函数中,一会儿用了IList,是接口,一会儿用了Dictionary,不是接口,不一致;它应该全部使用接口,或者根本不使用接口;listOriginal和receiverList的名称不一致,要么是所有列表的开头,要么是所有列表的结尾;foreach循环中,变量类型为TDMSOriginalRequirement,但是变量名是originalItem,集合名是listOriginal,所以三者要统一;比如foreach(Assemblyassemblyinassemblies)+"..."这个地方没有空格,加号两边应该有空格。这是一种令人困惑且不精确的格式;变量createUser并不理想,create是一个动词,createUser的组合是创建用户的意思,而他这里要表达的意思是creator的意思,所以应该叫createdUser或者creator;为什么originalItemFormat和originalItem可以等价,这是不合理的。如果等价,则从头开始命名为originalItemFormat;而format是一个东西,动词放在**里,是什么东西?上述类的几个私有字段中,有的有命名空间,有的没有,或者没有,或者两者都有;通常,命名空间在上面声明,不需要在后面出现;ILog记录器;这句话有两个问题:1)logger为什么没有下划线,不统一;2)为什么类名是ILog,而变量名是logger,要统一,要么类名是ILogger,要么变量名是_log;上面两个私有方法,一个是大写开头,一个是小写开头,不一致容易混淆;它应该是一致的;通过上面的例子,我们知道我们不小心多写了一个空格或者空行,或者字母大小写不一致,都会导致命名不一致;如果你不养成注意代码命名一致性的习惯,那么你写出的代码很可能就是上面这样。感觉很糟糕。上面我举的例子都是简单的命名问题,还有更深层次的命名问题,比如如何让命名和背后的实现内容保持一致,这就需要我们不断地练习了。这不是短时间内可以完成的事情。在我看来,要搞好命名,归根结底:1)首先要认识到命名的重要性;2)必须端正态度,认真写代码;3)尽量推敲每一个名字是否和实际做的一致,即命名的准确性;4)时刻注意命名的一致性;养成良好的命名习惯不是为了别人,也不是为了公司,而是为了提高自己的编程能力和理解事物的能力。
