摘要: 虽然本书所提供的实例、代码均源于java,但是不管我们是使用什么编程语言,编写出"好代码"对于一个想成为优秀的程序员都应该是最基本的。 良好的方法命名、适宜的注释、短小的方法、各种环境下的变量命名等等,这都是大师在多年编程中总结下来的经验之谈。 在网上经常会看到很多牛人是这么说的:“项目要注意可扩展、灵活性”、“要为以后的需求变更提供好的接口”、“要灵活使用设计模式”等等,仿佛各种各样的项目功能,在设计之初就已经是如此完备,能应付各种各样突如其来的需求变更,能一下子构建出如此完备的功能,更是我们这些新手所不能及,所崇拜的。 然而通读本书之后,我得到的体会则是一开始编写完成的 阅读全文
posted @ 2012-04-07 22:28 ahl5esoft 阅读(1563) 评论(6) 推荐(0) 编辑
摘要: CLR via C#(第三版) 你必须知道的.NET(第二版) 编码:隐匿在计算机软硬件背后的语言 代码整洁之道 重构:改善既有代码的设计 数据结构与算法:C#语言描述 程序员修炼之道:从小工到专家 编程珠玑(第2版) 深入理解计算机系统(第2版) 数据挖掘概念与技术(第2版) 高效程序员的45个习 阅读全文
posted @ 2012-03-26 22:22 ahl5esoft 阅读(1347) 评论(1) 推荐(0) 编辑
摘要: 由于以前平时上班、业余大部分的时间都是在开发上,每次需要更改一些模块、功能,往往都是需要做相当大的调整,于是乎我便有了计划要来一个长期的恶补,静下心来好好的阅读一些经典的书籍。虽然很多人会有这样的感受,那就是读了几本书,但是能从书里面学到、记下的知识根本不多,很多的知识点都只是停留在朦朦胧胧的状态(别人问起来并不能很完整的、准确的回答,但是自己心里面却有着点点滴滴的见解)。 古人有云:“读书百变,其义自见。”。我也有着自己的见解,读了前面几本书,也许有着一些朦胧,但是在以后的阅读当中,也可能会因为其他作者的不同见解,让自己突然开窍呢。 在我读完《CLR》的时候,我就有一些这样、那样的疑... 阅读全文
posted @ 2012-03-26 20:43 ahl5esoft 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 自从选择购入港版Lumia800以后,一直想尝试制作一款自己的手机软件,但是寻觅了很久一直不知道从哪个方面下手(一直挣扎到底要不要做,总是找理由拖延)。终于在一个偶然的机会,我在公司查找到了一些资料,希望把它存储到手机上,然后回到家以后再详细查看,结果发现手机没有安装笔记软件,于是便有了想自己做一个笔记软件的想法,借着上个周末的休闲时间,构思了一下软件大概的功能,便开始了我第一个windows phone软件的设计。 能完成该软件的设计,要感谢Allen Lee提供的WP7有约文章,让我有对于Windows Phone有了一些了解。 该笔记软件主要适用于记录的,也提供了一些分类。软件部... 阅读全文
posted @ 2012-03-20 23:39 ahl5esoft 阅读(1487) 评论(7) 推荐(2) 编辑
摘要: 花了将近2个星期的时间将本书大致的读了一遍,虽然本书只有250页(这个数字的确不好>_<),但是讲述了程序员应该如何从一个普通程序员成长为成熟程序员,再由成熟程序员成长为优秀程序员的一些过程和要点,对边编程技巧、客户需求、面向过程思想、面向对象思想等,需要掌握的范围和实践的范围给出了一些建议,的确让我在当前的迷茫理清了一条路线。 读完本书之后(关于EOM的解释,我个人是直接略读的,呵呵),让我感觉作者对于以兴趣而成为一个程序员的看法不是很赞同,作者认为以兴趣为主的程序员,不容易成为一个优秀的程序员,因为在作者的眼中,优秀程序员必须具备:1、心怀理想;2、充满激情;3、市场意识(文章 阅读全文
posted @ 2012-03-09 07:11 ahl5esoft 阅读(877) 评论(0) 推荐(0) 编辑
摘要: 这本《CLR via C#(第三版)》洋洋洒洒763页,我也仅仅是精读了第三版,略过了前面2个版本,此书涵盖了C#的许多方面,从开头的CLR的基础部分到后期关于线程的方方面面,在长达4个月的品读当中,给了我不少C#上基础的补充也给我带来了不少的挑战,许许多多的知识点在我的脑袋里面仍然是迷迷糊糊的,甚至是一些很基础的知识,到我读完的这个时刻,也是被我忘得干干净净。 在开始阅读本书之前,我有一次在看老赵的文章,文章中出现的一句关于CLR编译过程的话,我起初在看到之时,对于CLR编译的过程也是完全不知道,看了老赵一番讲解之后,我便有了想阅读此书的想法(这本书在我的书架上已经呆了很长时间了,我硬... 阅读全文
posted @ 2012-03-06 22:32 ahl5esoft 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 因为个人在业余有尝试在做一个游戏项目,所有的功能都是使用ajax的,因此要使用JSON作为媒介,然而如果是使用集成的类库进行JSON的转化,带来的影响就是一个类在传输到页面上的时候,其实仅仅只是需要其中的几个属性而已,如果嵌套的层数比较多,例如:一个类中包含其他的类或泛型或数组,这样子,数据加起来以后多出了不少。也许有人会创建一些额外的类去来处理,那的确是可以解决这种问题,但是不同的功能所使用到的数据要是个有差别的话,那么增加类则就变成了一个无底的深渊了。 很早就有这个想法要把文章写出来,可能是自己比较懒吧,总是因为公司的工作、业余游戏的开发或是其他问题没能完成这个事情,今天终于下定决心... 阅读全文
posted @ 2012-02-29 14:54 ahl5esoft 阅读(4721) 评论(20) 推荐(3) 编辑
摘要: 昨天跟朋友聊天,发现他们的项目数据层使用的是最基础的纯SQL语句+SqlParameter进行数据交互的,大家知道SELECT、UPDATE、CREATE对于表的依赖性比较大,然后删除语句却不一样,它的语法比较简单,大致有以下几种: 1、DELETE FROM TableName 2、DELETE FROM TableName WHERE ID = idValue 3、DELETE FROM TableName WHERE ID IN (id1, id2, id3, id4....) 于是我们要实现这个简单的功能来简化比较常用的删除就比较容易了,主要保留2个数据,1个是TableN... 阅读全文
posted @ 2012-02-07 10:25 ahl5esoft 阅读(1934) 评论(2) 推荐(1) 编辑
摘要: 距离上一篇文章过去了很久,因为要将模拟键盘鼠标的模块移植到公司项目里面去,在此过程中遇到了不少问题,主要的问题有如下三个: 1、由于Timer对于每个事件都是引发一个新线程,由于模拟是连续性的,这样会引发事件之间的相互干扰。 2、模拟过程中需要有一些业务数据的支持,以及在模拟结束之后需要返回模拟结果 3、模拟过程当中,如果用户操作键盘鼠标怎么办 首先我先分享一下解决以上问题,那我们先从1开始吧。 因为Timer对于每一个定时间隔的事件都是新起一个线程,这种情况下,我们的每一个步骤就没办法变成连续性的,有一些步骤可能会变成异步执行或者在某些步骤执行时间过长的情况下,又会变成颠倒顺序... 阅读全文
posted @ 2011-12-21 10:56 ahl5esoft 阅读(1608) 评论(4) 推荐(3) 编辑
摘要: 上一次我们利用windows API以及xml配置来模拟键盘鼠标,但是并没有对模拟中出现的逻辑错误或者异常进行处理(例如:模拟开启之后,当前程序的部分窗体或者业务逻辑上出现错误,这时我们不只要提示相应的错误,而且必须要让模拟程序将当前正常退出,以保证数据安全。),而且在窗体内部类似Label的控件也没有办法通过抓取窗体句柄或者遍历子窗体句柄来获取相应的信息,因此在一段时间的研究和整改之后,对于一些配置节点增加了ErrorTo属性以及新增Error节点,在出现逻辑错误或者异常的时候,直接跳转到对应的节点运行对应的正常退出步骤。 我设定是可将ErrorTo的属性设置在所有节点之上,但是如果子... 阅读全文
posted @ 2011-11-23 10:23 ahl5esoft 阅读(1679) 评论(3) 推荐(0) 编辑
摘要: 由于工作当中有部分任务需要使用到模拟键盘鼠标来完成业务的自动调用,虽然原来的同事有做了一些共用方法以及使用XML配置档来配置模拟动作流程,但是公用的方法和XML配置组合起来用的时候还是有不少的麻烦。 配置如下: 光从一些配置上,是比较难以理解的,个人觉得除了编写这个配置的本人或者使用一段时间的开发人员以外,其他开发人员需要介入修改或者重新制作配置是有一定难度的。也许大家会对业务处理有所期待,业务判断如下: 基本上就是属于对每个节点的Switch判断,通用的节点无非就那几个,但是涉及额外业务的时候,那就必须要设定一些其他的节点作为判断的依据,甚是复杂。 于是乎,在我进入公... 阅读全文
posted @ 2011-11-21 10:23 ahl5esoft 阅读(2231) 评论(8) 推荐(2) 编辑
摘要: 最近在研究利用api模拟键盘鼠标的动作,类似于按键精灵,然后发现只要是标签存储的值,都没办法用api抓取窗体句柄。于是乎便有了操作内存取值的想法,这就用到了另外一个api了。 因为内存寻值,有一个区间段,我们设定的是从0x00400000到0x7FFFFFFF(这些值是根据CE的区间得来的),然而如果利用for循环去遍历,代码如下:1 Stopwatch watch = new Stopwatch();2 watch.Start();3 int start = 0x00400000, end = 0x7FFFFFFF;4 for (int i = start; i < end; i++) 阅读全文
posted @ 2011-11-17 13:48 ahl5esoft 阅读(3553) 评论(39) 推荐(1) 编辑
摘要: 相信各位编码一段时间UI界面的朋友们,都会跟我这个新手有着一样的想法,每次界面布局控件可能不是我们在做,但是这些控件的值是需要验证的,每新增一个新的页面,页面需要验证的控件代码我们都要一一去书写,实在是很费劲,很让人烦躁啊,而且那一串串长得不得了的If/Else实在让我们难受,情何以堪啊。于是每个人都有了跃跃欲试的想法,那我们就一起来做一个简单的验证模块吧。 可能有些朋友对于微软的控件印象不好,但是我个人觉得它还是有很大的潜力的,不然也不会有那么多收费的控件,介于用户控件的基础上加上基础控件我们可以做出很理想的一套框架哦,需要一步步的往下扩展,呵呵。 首先验证嘛,其实就是对于当前控件输... 阅读全文
posted @ 2011-09-30 12:58 ahl5esoft 阅读(1900) 评论(8) 推荐(0) 编辑
摘要: 做开发也有将近2年的时间了,但是经验其实也不多。经历过几个小公司,数据处理层使用过基本的SQL,也有NHibernate框架。框架确实好用,省去了不少代码量,但是业务复杂的情况下,也就难以依托了,仍然需要自己手动书写SQL。业余开发项目的时候数据层使用了框架,后来改回了基础的SQL底层,原因嘛,也想说自己在重复造轮子的情况下,能有其他的收获。 原本使用泛型版本的底层基类,无法使用多态,因此也就无法使用工厂模式创建对应的SQL接口了。 原数据库基类: 1 /// <summary> 2 /// 数据库连接基类 3 /// </summary> 4 /// <type 阅读全文
posted @ 2011-09-27 11:18 ahl5esoft 阅读(4097) 评论(20) 推荐(2) 编辑
摘要: 在以前的2篇文章中,个人突发奇想的仿效Java中,以?替代参数,然而在应对参数重复的情况下,需要重复填写参数,实在是挺麻烦的。因为最近在学习和使用NHibernate,对于Hql中使用[:参数名]的方式可以解决重复参数的问题。因为在参数键值传递的时候使用的是Hashtable,因此我们需要通过正则匹配【":\w+"】,并截取得到对应的键,获取对应的值。代码如下: 1 Regex regMark = new Regex(@":\w+"); 2 sql = regMark.Replace(sql, s => 3 { 4 string mark = s. 阅读全文
posted @ 2011-09-22 00:24 ahl5esoft 阅读(2350) 评论(2) 推荐(0) 编辑
摘要: 今天收到了老板给的一篇关于老系统维护的文章,本人读后有了,了解了很多,也清理了本人诸多的模糊想法,现将此文章分享给各位,原文如下:我之所以把这个主题放在过程管理篇的第一部分,就是因为很多程序员每天干的工作,不是在开发新系统,而是在维护老系统。这个理儿大家都清楚,世界上哪有那么多新项目新产品开发啊。一个公司,也就是那么2~3个产品,也不可能老有新的产品出现。那么多程序员,只能做维护的事情了,不断让软件升级,而这个软件是谁写的第一版代码,都无从查起了。一翻开源代码,会看见各个时期各种风格的源代码,甚至很多源代码都没有注释,根本不知道某些代码干嘛要那样写,到底是为了什么目的。一天早上,有个网友给我发 阅读全文
posted @ 2011-08-17 10:13 ahl5esoft 阅读(2685) 评论(30) 推荐(10) 编辑
摘要: 前面的2篇关于简单介绍了仿效Java在SQL以?代替参数位置的实现方案,在编程开发中,我们都会将一些奇怪的简单的、复杂的想法,用我们本身的编程理念去实现,从粗糙到优美的每一步,都能让我们感到骄傲,虽然在别人眼中可能是一个愚蠢的、甚至是脑残的想法,但是作为一个程序员,我始终认为:“编程不仅既是一门技术,更是一门艺术;就算是最枯燥乏味的编码,我们也要以一种激情澎湃的编码行为去完成它。”,每一次尝试、实践都能让我们获益良多,尽管不是每一次尝试都是那么正确,但是起码错误以后你也能发现,原来这条路是走不通的,这就是经验。 稍微偏题了,接着我们所要讲述的内容继续下去吧。 原本我们所需要编写的SQL也许是. 阅读全文
posted @ 2011-07-31 00:03 ahl5esoft 阅读(1194) 评论(1) 推荐(1) 编辑
摘要: 1、Found Two representations of same collection解决:将包含该对象的主档内的相应集合对象设置为null2、identifierof an instance of。。解决:清除缓存后再对主档的Sq进行编辑3、object refences an unsaved transient instance - save this .....原因:可能是因为在<mang-to-one>中配置了not-found="ignore"属性,而引发新增时,外联表对象不属于持久化对象解决:将主档所对应的外联表对象设置为null4、Unexp 阅读全文
posted @ 2011-07-27 20:57 ahl5esoft 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 在使用NHibernate为页面数据控件绑定数据时,出现如下提示:“未为能加载视图状态,正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。”发生以上错误的主要是问题是在绑定数据的时候,如以下代码:<%# Eval("xxx表.xxx字段")%> 因为有NHibernate的存在,以上Eval会触发NHibernate的延迟加载,然而当数据库中不存在对应的表数据的时候,就会产生这个错误。 如果要解决以上的问题的话,可以在<many-to-one>的配置当中加入属性not-fount="ignore"这样 阅读全文
posted @ 2011-07-27 20:46 ahl5esoft 阅读(929) 评论(0) 推荐(0) 编辑
摘要: 昨天写了C#中仿效Java内SQL参数以?替代的方案,但是区分了单个参数和数组参数,而且只能支持其中的一种,不能2种情况都支持。今天突然发现,原来可以利用params object[]参数的时候可以将数组当作参数传入,当传入对象类型的IsArray为true的时候,可以区分出单个参数还是数组参数,这样就可以在任何情况下都能将参数以?的形式替代。由于SQL内的参数,可以是单个参数和数组参数混合的形式,因此需要属性来区分数组参数和单个参数的下标。 1 /// <summary> 2 /// 单参数下标 3 /// </summary> 4 int ParamIndex 5 阅读全文
posted @ 2011-07-27 13:09 ahl5esoft 阅读(693) 评论(0) 推荐(0) 编辑