Nero

其实,这个问题是这样子的...

博客园 首页 新随笔 联系 订阅 管理
  13 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

2011年7月12日 #

想做一个文件系统玩玩

思考了好几天,觉得这个东西看起来很简单,但是想要做得跟Windows操作系统的一样还是很难的,有很多细节要注意

把自己的想法化成了类图,打算照着这个类图去做东西

但是觉得这个类得设计可能还有欠缺,不知道各位博友能不能帮我想想,给出点建议

对于大家好的建议,我会及时采纳的

(*^__^*) 

希望对于架构设计有经验的大哥大姐们多多指教

posted @ 2011-07-12 23:21 强盗罗吉 阅读(2916) 评论(28) 编辑

2011年7月4日 #

摘要: 在现在这个项目做了有半年的时间了,发现进度远没有想象中的快,什么原因呢?我归纳了一下,主要有下面两点:1.使用敏捷开发2.角色分配敏捷开发,这是现在非常时兴的一个词,听起来挺牛逼的,敏捷,让我们感觉用了它就会“快”。在被这种开发模式折磨了1年多的我想说,其实它跟其他所有的事情都一样,它有自己适用的领域,假如错误的以为任何项目用敏捷开发都能敏捷,那就是自找苦吃。为什么?敏捷开发的特点就是根据用户的需求迭代,一个迭代解决一个迭代的问题,对于一个对于架构清晰的项目来说,这样每一个迭代都会有一些成果。而对于有些项目而言,比如说杀毒软件,磁盘分析器等等,对于这种产品类的项目,很多时候它的需求都是一开始需阅读全文
posted @ 2011-07-04 04:48 强盗罗吉 阅读(320) 评论(0) 编辑

2011年1月31日 #

用.NET2年多了,比较幸运,项目中一直是用的2010和2008,工具比较新,相比那些还在用2003和2005的朋友们有一点点小小的优越感,哈哈。

不过话说VS2008就有的一个BTO的功能,可以实现图形化界面测试类库方法,小生今天才从一本电子书上就看到,忽然觉得以前工作中用NUnit来单元测试好傻啊,真惭愧,浪费了不少时间。

OTB,全称Object Test Bench,中文翻译过来就是对象测试台,顾名思义是用来对一个对象来进行测试的,我们什么时候需要用到这个工具呢?我相信,有不少程序员跟我一样是喜欢踏实的写代码,写一段测试一段,但是很多时候,没有表现层的代码是很难测试的,比如说一个类库,以前我测试类库一般是用NUnit这样的单元测试工具,使用与其他的单元测试工具如出一辙,主要的思想就是断言,判断返回的结果与你的预计是不是一致,然后报告,但是感觉用起来也有些麻烦的,首先你必须想好测试用例,一般最少3个吧,然后你还要写那些测试代码,这个过程感觉就像是在抄课文。

而使用OTB就比较方便了,首先他是图形界面的,用起来很方便,其次可以立即看到方法的返回值,不需要构建临时的表现层去显示。

下面,就来简单介绍如何使用OTB。

1.编译你的类

2.VS工具栏-》视图-》其他窗口-》Object Test Bench,最VS下面会弹出OTB的窗口,开始为空白

3.打开类视图,在你需要测试的类上点击右键-》Create instance-》点击确定,如果构造这个类的实例没有问题那么会在OTS中出现一个class的方框,表示实例化成功,否则会弹出窗口报错,并且显示异常类型。

4.测试类的方法,可以在OTB窗口上右键点击你刚才实例化的类,然后点击Invoke Method,选择你要测试的方法,输入参数,如果成功,窗体中会出现一个新的方块记录你的测试。

5.如果你要测试类的静态方法,则不需要实例化类,在类视图上点击右键点击Invoke Static Method就可以得到该类的所有静态方法,测试过程一样。

 

 OTS也有它的弊端,就是不能批量的测试,假如类库包含几十个方法,在图形界面上的操作一样会很不爽,所以传统的单元测试方法在这样的情况下还是比较实在的,写点代码,看到单元测试结果全部报绿灯,心情很舒畅啊,呵呵。

posted @ 2011-01-31 14:56 强盗罗吉 阅读(199) 评论(1) 编辑

2010年8月30日 #

模式,顾名思义,就是做一种事情的方法归纳,就经验来说,做什么事情有个好的方法来应对都是可以事半功倍的,在软件开发中何谓好的模式?

我认为好的模式简单来说就是保证你应对需求变化的时候不用做更多的代码修改,而只需要在原有的基础上进行扩充,也就是所谓的”关闭修改,开放扩展。“

要做到这一点,系统模块之间的关系绝对不能过于紧密,过于紧密的结果就是,当你一个模块需要修改,另外一个模块也需要做相应的修改,这样,我们软件开发的成本就加大了,甚至完全适应不了新的需求,这是非常糟糕的。所以,我们在系统架构的设计上一定要做到低耦合(考虑可能的需求变化,任何复杂的设计都是有代价的,在没有必要做特殊处理的地方都刻意做得很复杂,系统的效率可能会非常低下,这一点在理解了.NET调用虚函数等机制后会有所了解)。假如你满足了低耦合的条件,一般情况也说明你的系统内聚性比较高(类的责任清晰)。经典的设计模式就是让我们构建具有此特性系统架构的方法。

今天,我稍微归纳一下几个设计模式的功能:

1.策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

2.观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

3.动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。

4.抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

5.工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

6.单件模式:确保一个类只有一个实例,却提供全局访问点。

7.命令模式:将请求封装成对象,这可以让你使用不同的请求,队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。

8.适配器模式:将一个类的接口转换成客户端期望另一个接口。

9.外观模式:提供另一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

10.模板方法:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

11.迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

12.组合模式:允许你将对象组成树形结构来表现“整体/部分”的层次结构。组合能让客户以一直的方式处理个别对象和对象组合。

13.状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

14.代理模式:为另一个对象提供一个替身或站位符以访问这个对象。

15.复合模式:复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。

 

学习设计模式时间并不长,感觉这门学问在软件开发中的地位是相当重要的,作为一个初级开发人员,我觉得学习它很有必要的,特别是在看别人的代码时候,我们可以知其然,更知其所以然,这对程序员的提高是相当有帮助的,呵呵。

posted @ 2010-08-30 17:55 强盗罗吉 阅读(76) 评论(0) 编辑

2010年4月28日 #

看了3天的WPF资料,今天开始试着做了一个WPF小程序,却发现一个很奇怪的问题:

我的界面上有一个TextBox,Name:tbTags

还有一个ComboBox,Name:cbMode,默认值index为0 有一个SelectionChange事件绑定

SelectionChange事件中执行语句

tbTags.IsReadOnly=true;

在我测试程序的时候报错

tbTags.IsReadOnly=true;  标明tbTags的引用没有指向实例

于是我很纳闷

为什么其他的TextBox执行同样的语句没有问题,就这一个出现了问题

左思右想,在XAML文件里找了半天也没发现是书写的问题

最后我想到会不会是因为初始化的顺序有问题

当页面初始化的时候就执行了ComboBox的事件

而这个时候刚好tbTags还没有实例化

所以这个时候就出现了问题

我抱着试一试的心态把tbTabs的标签放到了cbMode的前面

再次测试,居然通过。

我搞不懂WPF中实例化控件是怎么样的过程

难道是一边读取XAML文件一边执行吗?

posted @ 2010-04-28 20:20 强盗罗吉 阅读(143) 评论(4) 编辑

2010年4月16日 #

摘要: 总结C#中窗体间传递数据的几种方法 (由别人的方法整理) 在编写C#windows应用程序的时候我们经常会遇到这种问题,怎么样在两个窗体间传递数据呢?以下是我整理的网上的各种方法,在遇到一个实际问题:在form1中打开一个form2窗口作为录入界面,将录入的值经转换后在form1中显示。 采用了委托的方法,可以实现。(与VC的回调的应用相似)1.可以通过委托的方法来解决问题:通过form1做一个录...阅读全文
posted @ 2010-04-16 21:05 强盗罗吉 阅读(633) 评论(0) 编辑

摘要: Form1: private void button1_Click(object sender, System.EventArgs e) { Form2.InstanceForm = new Form2(); Form2.InstanceForm.Show(); } private void button2_Click(object sender, System.Event...阅读全文
posted @ 2010-04-16 19:44 强盗罗吉 阅读(59) 评论(0) 编辑

2010年4月15日 #

摘要: Pet Shop 4.0 个人版 :解析功能需求:(1) 用户帐号的管理功能:包括帐号创建,帐号登录,帐号维护;(2) 产品浏览功能:类别浏览,具体产品浏览,详细信息,库存信息等等;(3) 用户购物功能:添加购物,计算总价,下订单等等。项目列表:序号 项目名称 描述 ------------------------------------------------------------------...阅读全文
posted @ 2010-04-15 23:55 强盗罗吉 阅读(91) 评论(0) 编辑

2009年12月23日 #

摘要: 对一个字符串进行加密所需的步骤如下: 1.将源字符串转换成一个字节数组 2.初始化一个加密算法类 3.使用这个加密算法类来生成一个加密者(encryptor对象),实现IcryptoTransform接口。他需要密钥和IV值。 4.使用加密者对象来初始化一个密文数据流(CryptoStream对象)。该数据流还需要知道你要加密哪些数据,以及用来写入加密数据的目标数据流。 5.使用这个密文数据流生成...阅读全文
posted @ 2009-12-23 20:47 强盗罗吉 阅读(56) 评论(0) 编辑

2009年12月6日 #

摘要: readonly字段和const字段最大的相似之处是,都不允许在类方法或属性中更改他们的值。最大的不同是,对于const需要在编写代码时给他们赋值(他们的值必须在编译时就被确定),而readonly字段的值可以在类的构造函数中动态地设置。 常量值总是被编译器替换成文本值。如果查看编译后的代码,将永远也看不出使用常量。只可以针对值类型(原始的数据类型:Int、Char、Float、Bool等)使用c...阅读全文
posted @ 2009-12-06 17:40 强盗罗吉 阅读(32) 评论(0) 编辑