Fork me on GitHub

2013年8月23日

摘要: 目录背景设计的演化待重构的代码用继承消除重复用扩展类(Mixin)消除重复Ruby的鸭子类型 + Mixin的实现备注背景返回目录今天上午和以为朋友聊了一个设计问题:如何消除仓库相关的单据的Repository中的重复逻辑?如:入库单Repository和出库单Repository之间的重复。可以有很多方式消除重复,在不同级别消除重复,如:继承、组合、掺入、帮助类、帮助方法。本文只说出我的观点:不要为了复用而使用继承。设计的演化返回目录下面我会演示:待重构的重复代码-》用继承消除重复-》用扩展类(Mixin)消除重复-》Ruby的鸭子类型 + Mixin的实现(元编程可以更牛叉,有机会再说)。 阅读全文
posted @ 2013-08-23 16:28 HackerVirus 阅读(592) 评论(0) 推荐(0)
摘要: 导出&导入上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路。本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF。在上一文中我们知道,对于每一个实现了公共规范的扩展组件,都需要进行导出,随后我们的主应用程序文件中会自动进行组装。这便产生了一个疑问:为什么需要导出?如果大家还记得,以前我们用VC++写.dll文件时,都会把需要提供给别人调用的函数标记为导出函数,这样别人才能调用我们编写的函数。就好比我们的家,我们一般会有客厅,既然叫客厅,当然是展现给客人看的。有客人来了,我们会在客厅接待,当然我们不愿意让客人进入我们的卧室,那是较为隐私的地方。因此 阅读全文
posted @ 2013-08-23 16:24 HackerVirus 阅读(214) 评论(0) 推荐(0)
摘要: GC算法精解(五分钟教你终极算法---分代搜集算法)引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极。说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为LZ相信高人们的能力。 那么分代搜集算法是怎么处理GC的呢?对象分类 上一章已经说过,分代搜集算法是针对对象的不同特性,而使用适合的算法,这里面并没有实际上的新算法产生。与其说分代搜集算法是第四个算法,不如说它是对前三个算法的实际应用。 首先我们来探讨一下对象的不同特性,接下来LZ和各位来一起给这些对象选择GC算法。 内存中的对象按照生命周期的长短大致可以分为三种,以下命名均为... 阅读全文
posted @ 2013-08-23 16:23 HackerVirus 阅读(372) 评论(0) 推荐(0)
摘要: Python学习之---冒泡,选择,插入排序最近学习了python基础,写一下3大排序练练手: 1 ''' 2 Created on 2013-8-23 3 4 @author: codegeek 5 ''' 6 7 def bubble_sort(seq): 8 for i in range(len(seq)): 9 for j in range(i,len(seq)):10 if seq[j] seq[j]:20 position = j21 if position != i:22 ... 阅读全文
posted @ 2013-08-23 16:07 HackerVirus 阅读(187) 评论(0) 推荐(0)
摘要: 冒个泡、排个序在C#中说到排序的方法,相信大家都会首先想到冒泡排序,当然也还有其它的排序办法,如选择排序等等,本文就讲解一下平常用的最多的冒泡排序。首先我们看一下冒泡排序的原理,我们声明一个数组: //这种声明的话数组长度和后面的值必须保持一致才可以, //比如说你声明的数组长度是5,那么你后面必须有5个数值。 int[] Temp01 = new int[5] { 10, 5, 28, 19 ,33}; //集合,这样比较灵活,不必要指定长度 List list01 = new Lis... 阅读全文
posted @ 2013-08-23 16:06 HackerVirus 阅读(237) 评论(0) 推荐(0)
摘要: Js 冒泡事件阻止JS阻止冒泡方法博客分类:javascript JS事件流其中一种是冒泡事件,当一个元素被触发一个事件时,该目标元素的事件会优先被执行,然后向外传播到每个祖先元素,恰如水里的一个泡泡似的,从产 生就一直往上浮,到在水平面时,它才消失。在这个过程中,如果你只希望事件发生在目标元素,而不想它传播到祖先元素上去,那么你需要在“泡泡”离开对象之 前刺破它。 我在文档中写了一个层,点击以外隐藏该层,并为之设置了简单的样式,现在我希望点击该层以外的地方使之隐藏,那么我给根元素绑定了一个click事件,一点击html就隐藏该DIV,代码如下:Javascript代码 document... 阅读全文
posted @ 2013-08-23 13:57 HackerVirus 阅读(202) 评论(0) 推荐(0)
摘要: C# winform调用WebBrowser经典怪问题总结最近一直研究网页数据采集,单单采集数据,其实HtmlAgilityPack就足够了。对HtmlAgilityPack感兴趣的可以到这里看看:C#采集代理服务器ip并设置IE代理--HtmlAgilityPack实战代码但是有个问题:要是想要模拟人工输入数据,进行表单提交HtmlAgilityPack就办不了,Skybound.Gecko(firfox的.net开源代码)也办不了这个事情。Skybound.Gecko不支持点击,不知道大家有没有新的方法。反正我只能用微软自带的WebBrowser来模拟网页点击了。刚开始一切正常,但是随着功 阅读全文
posted @ 2013-08-23 13:42 HackerVirus 阅读(2272) 评论(0) 推荐(0)
摘要: MVC4.0系统开发新手历程(一)接手了一个简单的销售奖金计算的项目,虽然不算大但是业务逻辑比较复杂,还夹杂了很多的特殊情况,毕竟是大公司什么样的人都有,好了不多说切入正题,项目是公司的一个前辈负责的,在他做系统架构的时候让我们了解下MVC4.0更新的基本知识,对于MVC来说做项目之前我就简单的停留在知道他是Model-View-Controller的简写至于具体是什么,怎么做则完全没有了解。 项目果然是最锻炼人的,在项目的架构带来之后,我看了下大概分为以下这几个部分: (1) Model项目 存放数据库表的Model 以及用来展示的 View_Model这些以后都会有讲的,数据表对应的Mod 阅读全文
posted @ 2013-08-23 13:41 HackerVirus 阅读(188) 评论(0) 推荐(0)
摘要: 使用Beetle.NetPackage简单实现android和wp聊天Beetle.NetPackage是一个多台平开源Client TCP通讯组件,它针对不同平台提供统一的消息描述规则和使用规范可以简单实现多平台下TCP通讯交互.下而介绍通过Beetle.NetPackage简单实地现android和wp聊天.在了解下面的内容之前可以先到Beetle.NetPackage的开源项目了解一下:https://beetlenp.codeplex.com/ 作为一个网络通讯程序首要是制定一个协议明确有那些消息交互,在Beetle.NetPackage中所有协议描述都必须通过对象来描述,并实现一个. 阅读全文
posted @ 2013-08-23 13:40 HackerVirus 阅读(193) 评论(0) 推荐(0)
摘要: 进程间通讯之mmap文件共享引文: 个人名言:“同一条河里淹死两次的人,是傻子,淹死三次及三次以上的人是超人”。经历过上次悲催的面试,决定沉下心来,好好的补充一下基础知识点。本文是这一系列第一篇:进程间通讯之mmap。一、概念:什么是mmap? 通过共享存储实现进程间通讯是一个主要的进程间通讯的方式。它包括磁盘文件的共享和内存的共享,以前总是关注内存的共享,而忽略了磁盘文件的共享,也就是这里要讲的mmap。mmap地址映射是Linux系统提供的一种功能强大的系统调用,最典型的应用是用于显卡内存的映射。同样,对于普通的硬盘文件也可以进行mmap系统调用。mmap()系统调用使得进程之间通过映.. 阅读全文
posted @ 2013-08-23 13:39 HackerVirus 阅读(1447) 评论(0) 推荐(0)