代码改变世界

随笔分类 - 语言基础

SQL 行列倒置

2015-03-14 17:59 by 破狼, 4979 阅读, 收藏, 编辑
摘要:SQL的的行列倒置已经不是新知识了,但在博主的技术咨询期间,仍发现其实有很多人并不了解这块,所以在此专门写一篇博客记录。本文将以Mysql为例,并以数据采集指标信息获取为例子。在下面的例子,你可以在sqlfiddle运行。首先我们需要创建数据库Schema: CREATE TABLE Char... 阅读全文

Guava-Optional可空类型

2015-01-18 15:06 by 破狼, 5934 阅读, 收藏, 编辑
摘要:接上篇Guava之Joiner和Splitter,本篇将介绍Guava的另外一个有用的对象Optional,这在Java中Google Guava首先给我们提出可空对象模型的。在其他语言如c#这是已经存在很久的模式,并包含在.net类库中Nullable(Int?也是一个可空类型)。Null suc... 阅读全文

语言设计中的鸭子类型风格

2013-06-30 10:24 by 破狼, 4300 阅读, 收藏, 编辑
摘要:在动态语言的世界里一直流传着一种叫做鸭子类型的风格,其来自谚语:“如果行鸭子一样走路,像鸭子一样呱呱叫,那它就是一只鸭子”。 从鸭子类型,我们可以联想到它的推导,并不在乎类型的真正实体,只要他的行为有鸭子的特性,那么我们就可以把它当做一只鸭子来看到。在动态语言设计中,可以解释为无论一个对象是什么类型的,只要它具有某类型的行为(方法),则它就是这一类型的实例,而不在于它是否显示的实现或者继承。 阅读全文

TypeScript

2012-12-15 21:15 by 破狼, 1485 阅读, 收藏, 编辑
摘要:作为改进JavaScript应用程序开发的举措之一,微软近日发布了TypeScript。这一新语言是JavaScript规范的超集,添加了类型检查和静态代码分析,同时生成原生JavaScript。这些特性意在使开发者能够受益于类型检查带来的便利,从而更轻松地扩展JavaScript以支持更大规模的应用程序开发。现有的JavaScript代码在TypeScript中可以直接使用,而且因为TypeScript 生成的是纯JavaScript代码,因此可以在现有支持JavaScript的平台上运行。 并在Vs中带有强类型语法同样的智能等IDE支持,是的开发更容易,更容易将javascrip... 阅读全文

分享一段PowerShell用户认证Function

2012-06-09 22:29 by 破狼, 1936 阅读, 收藏, 编辑
摘要:在最近工作中遇到对用户验证,需要根据用户名和密码验证用户是否合法。在外文网站找到的这段代码,在这里分享给大家,如果你也需要用户验证的话,那么可以直接copy使用,现在没地方用,也可以收藏备用,1FunctionTest-UserCredential{23[CmdletBinding()][OutputType([System.Boolean])]45param(67[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]89[System.String]$Username,1011121314[Parameter(Mandatory=$tr. 阅读全文

PowerShell强大管道

2012-06-09 15:34 by 破狼, 7084 阅读, 收藏, 编辑
摘要:PowerShell是在Window是的外壳语言,提供了多Windows的更多操作,让我们于windows的操作更简单方便,以及就是就是管理员的命令行更好的管理。PowerShell提供了与.net FCL(.net类库)的操作性,我们可以利用强大的.net FCL在PowerShell中。PowerShell提供强大的管道模型,管道指的是一个命令的输出可以利用操作符(|)方便的传递到下个命令作为输入。PowerShell不同传统管道模型的是它是一门基于对象的管道流,即在命令之间传递的对象不是简单的文本。下面我们就以本地文件操作来实践PowerShell的管道常见命令: 1:集合遍历Fo... 阅读全文

架构设计-数据访问层简述

2012-06-05 00:13 by 破狼, 11113 阅读, 收藏, 编辑
摘要:在前面简单描述了下服务层,SOA面向服务架构,架构设计-业务逻辑层,以及一些面面向设计原则理解和软件架构设计箴言。这篇博客我们将继续进入我们的下一层:数据访问层。无论你用的是什么开发模式或者是业务模式,到最后最必须具有持久化机制,持久化到持久化介质,并能对数据进行读取和写入CRUD。这就是数据访问层。你可能是利用xml等文件格式磁盘存储,常用的关系数据库存储,或者NoSql(not only sql)的内存存储或文档存储等等存储介质。而这里我只关心关系数据库存储。 数据层需要提供的职责有: 1:CRUD服务。作为唯一可以与存储介质交互的中间层出现,负责业务对象的增加,修改,删除,加载... 阅读全文

软件架构设计箴言理解

2012-06-02 21:30 by 破狼, 13615 阅读, 收藏, 编辑
摘要:今天和师弟聊天聊到他们项目开发,有些同事总是提前考虑性能优化,需求变更又是一大堆的重写,让我想起了Donald Knuth 提到的:对软件的过早地优化是万恶的根源。这里就简单的说几条重要的软件名人哲学。1:软件中唯一不变的就是变化。 在软件开发过程中需求是不停的变化,随着客户对系统的认识,和现有开... 阅读全文

架构设计-业务逻辑层简述

2012-05-29 23:14 by 破狼, 12409 阅读, 收藏, 编辑
摘要:业务逻辑层是专门处理软件业务需求的一层,处于数据库之上,服务层之下,完成一些列对Domain Object的CRUD,作为一组微服务提供给服务层来组织在暴露给表现层,如库存检查,用法合法性检查,订单创建。 业务逻辑层包含领域对象模型,领域实体,业务规则,验证规则,业务流程。1:领域对象模型为系统结构描述,包含实体功能描述,实体之间的关系。领域模型处于天生的复杂性:2:领域实体:业务层是一些操作业务对象(BO)的处理。业务对象包含数据和行为,是一个完整的业务对象。其不同于上节架构设计中服务层的简单理解提到的数据迁移对象(dto),对于dto存在数据的,不存在行为,dto是bo(ddd中又称... 阅读全文

Interface继承至System.Object?

2012-05-23 01:11 by 破狼, 2870 阅读, 收藏, 编辑
摘要:这其实是个很基础的问题,在我们学习C#类型的时候第一句就是所有的对象都继承至System.Object。今天一个同事问我Interface继承之System.Object。所以才有了本文。 在这里我只从几个方面简单的说明: 1:从语义: Interface在oo中表示一组行为的集合,是高层次的抽象,契约,一种稳定的表现。好比我们生活的公司和员工之间的合同,双方都必须遵循。所以我们的接口必须是一个干净纯洁的体系。加入interface继承之System.Object,这以为这是不是,Interface有Equal,ToString等方法?这明显破坏了接口的干净体系。 2:实践(C... 阅读全文

Green.AgileMapper项目(2)-新增DO和DTO代码生成

2012-03-31 20:57 by 破狼, 1749 阅读, 收藏, 编辑
摘要:如果你还不了解Green.AgileMapper的用意,作用请先一步到上篇Green.AgileMapper开源项目的使用,如果你觉得运行时(Runtime)的Mapper效率存在问题,在这个版本中有了更新,新增了C#直接代码的生成,这里的生成都已3.0后的扩展方法实现,你可以很方便的一句代码实现两者的转化。 代码生成我本想利用T4模板,但是由于我们的项目IDE版本是VS2008,对于T4的参数传递支持还不是很友好,你可能说用AppDomain.SetData,或者CallContext.LogicalSetData,但是可惜我们的饿MappingRule是不可序列化的,所以最后我只得采用了. 阅读全文

Green.AgileMapper开源项目的使用(1)

2012-03-29 13:40 by 破狼, 2482 阅读, 收藏, 编辑
摘要:在架构设计中,利用领域驱动开发时,涉及到do(领域对象)和dto(数据传输对象)的相互装换匹配,这段代码简单但是重复频率太多,写得我很冒火(我有个职责是wcf SOA包装),我是个不喜欢重复劳动的懒人,我在网上搜索等到很多实体匹配的框架EmitMapper,AutoMapper等,但是他们都不能满足dto和do的对象的按规则匹配包装。最后我只得花了半个小时写了一个简单的代码生成器,完成了我的任务。但是事后总觉得不爽,于是有了写下这个AgileMapper框架来适应领域开发中的po,do,dto,vo着一些列对象的相互包装,建立一个按规则包装的Mapper框架。项目已经完成上传于CodePle. 阅读全文

WinForm中实体类批量修改、批量提交辅助类

2012-03-27 11:47 by 破狼, 3082 阅读, 收藏, 编辑
摘要:在WinForm项目开发中习惯于对于集合数据的批量修改,再一次性提交更新同步到数据库。这里我们就必须实现对对象的改变的跟踪记录,我们实现对象的改变跟踪有许多方式,大致我尝试了两种方式:1:对象强制实现接口,State守信和MakeMark行为。2:利用字典序继续改变。虽然1的方式是否更加合理,但是在winform中与BindingSource集合使用简化修增修改的书写,配合的不是很好,供给开发人员使用不是很爽。于是我修改成为第二种方式集合记录更改,在继续在原集合真实修改,触发BindingSource事件和与BindingSource很好的结合。 我们所要做的是对集合实体的变化做记录,这... 阅读全文

记录由Equal基础知识引起的内存泄露

2011-12-30 19:53 by 破狼, 1646 阅读, 收藏, 编辑
摘要:在最近的公司框架开发中,利用了网上某大牛的反射缓存库作为辅助。在测试的时候发现出现了巨大的内存泄露,在频繁的操作后,内存不断的产生巨大的开销,10多分钟就占有了5,6m的内存。解决问题的时,公司不能上网,没有内存分析工具,没有我钟爱的ANTS Memory Profiler帮助下,我们只能靠简单的内存输出来二分查找缩小范围,利用System.Diagnostics命名空间下的Process的WorkingSet64属性来统计两次输出的内存增长量(WorkingSet64:描述关联的进程分配的物理内存量(以字节为单位))。花了半天终于定位到了第三方的缓存块,一看吓一跳居然缓存了2,3万的对象。. 阅读全文

Wpf消息循环之消息传递

2011-03-04 22:53 by 破狼, 4434 阅读, 收藏, 编辑
摘要:几天遇见一个问题需要检查某个wpf程序是否已经运行,如果没有运行则启动传递参数,如果已运行则需要直接传递消息。在没有运行 情况下传递参数很简单,我们只需要Process cmd窗口启动并传递参数,在程序中处理。但是如果程序已经启动有点麻烦,凭着我曾winform的经验第一时间想到的是win32 api SendMessage,我们的C#程序只需要DllImport就可以调用了。经过一番查找和对wpf window和DispatcherObject的Reflector,花了我大半天终于找到了System.Windows.Interop.HwndSource中有AddHock方法可以添加对win. 阅读全文

VS调试Tip集结

2010-12-13 09:21 by 破狼, 2870 阅读, 收藏, 编辑
摘要:在VSX群里陈锋,录制了几个调试的视频,感觉挺有用的。调试其实大家都知道怎么去做。但是不一定对我开发IDE给我提供的快捷方式全部了解。在这里我对这些做一些集结,这里也不是很全,希望大家在后面补上,让楼主也张张见识,哈哈。 1:DbgView和vs output窗口: 对于我在代码中写有Debug输出的再vs调试状态下我们可以再vs输出窗口看见,打印一些我们所关心的变量数据等。当我们的程序在运行的时候就可以用DbgView获取我们的打印。 2:断点:(这个是大家所熟悉的): vs中给我们提供了Condition,Hit Count、Filter、when Hit、Edit lab、Export集 阅读全文

VS输出窗口(output view)的小技巧--文件行号字符定位

2010-11-12 10:57 by 破狼, 5003 阅读, 收藏, 编辑
摘要:在我们的调试输出到VS输出窗口的信息,有时候我们想要鼠标点击就定位该该文件,改行,甚至该列。在强大的VS工具中已经给我们提供了这个功能,我们只需要把输出到输出窗口的字符串就是一定的格式化就可以了。c#在VS输出窗口格式为:文件名称(行号,列号):消息信息。比如我 test.cs(100,78):消息信息。就是对应我们的test.cs文件的100行78个字符。在这里我写了一个简单异常输出信息的扩展类... 阅读全文

Word中单位像素的转化

2010-10-19 15:46 by 破狼, 911 阅读, 收藏, 编辑
摘要:该方法用于将度量单位由厘米转换为磅(1 厘米 = 28.35 磅)。返回 Single 类型。参数说明Centimeters Single 类型,必需。指需要转换为磅的厘米数。返回值Single 类型。说明LinesToPoints 方法将度量单位由行转换为磅(1 行 = 12 磅)。MillimetersToPoints 方法将度量单位由毫米转换为磅(1 毫米 = 2.8 磅)。PicasToP... 阅读全文

Linq多表查询条件批量删除

2010-09-15 08:55 by 破狼, 3150 阅读, 收藏, 编辑
摘要:前阵写了Linq的单表生成相对Sql执行的批量删除,总觉得删除条件太局限了,并且又不能屏蔽linq的级联条件,这很容易误导一些人。所以想了应该还是要支持才好。呵呵。 其实思路和上次一样,就是生成Sql,用Linq自身条件组合sql应用,没有什么好说的。组合sql用 EXISTS关键字,组合一个子查询。[代码]直接上Code:代码 Code highlighting produced by Acti... 阅读全文

Linq To Sql 简单的单表批量删除

2010-08-04 08:52 by 破狼, 6237 阅读, 收藏, 编辑
摘要:今天在网上看到老赵前辈的扩展LINQ to SQL:使用Lambda Expression批量删除数据,我看完了文章,还没有看源代码,我一般都习惯于在看别人的代码前,思考一下如果我来实现我会如何实现。我想了许久操作表达式树操作二元表达式(BinaryExpression)我是肯定困难的,对于表达式类库的了解不多,用了Reflector反射,结果什么都看不见,也许我的Reflector版本低了,没有... 阅读全文