小程序中的大道理之四--单元测试

摘要: 讨论了测试覆盖率的问题, 及如何用 Mockito 来做行为测试, 此外谈到了 SoC 和 SRP 两个设计的原则.

在讨论领域模型之前, 先继续说下关于测试方面的内容, 前面为了集中讨论相应主题而对此作了推迟, 下面先补上关于测试方面的.

测试覆盖(Coverage)

先回到之前的一些步骤上, 假设我们现在写好了 getPattern 方法, 而 getLineContent 还处于 TODO 状态, 如下:

public String getPattern(int lineCount) {
    if (lineCount < 1) {
        throw new IllegalArgumentException("行数不能小于1!");
    }
    if (lineCount > 20) {
        throw new IllegalArgumentException("行数不能大于20!");
    }
    
    StringBuilder pattern = new StringBuilder();
    for (int lineNumber = 0; lineNumber < lineCount; lineNumber++) {
        pattern.append(getLineContent(lineCount, lineNumber));
    }
    return pattern.toString();
}

private String getLineContent(int lineCount, int lineNumber) {
    // TODO Auto-generated method stub
    return null;
}

继续阅读

字符集与编码(七)--BOM

摘要: 本文讨论了 Unicode 中的 BOM 及与 BOM 紧密相关的端法(endian)问题.

在前一篇的最后, 留下了一个问题, 即 string.getBytes("UTF-16") 会在开头多出两个字节 FEFF 来, Unicode 中称之为 BOM, 接下来就让我们一起来了解有关 BOM 的知识, 在此之前我们需要说说有关 端法 的知识.

什么是端法(endian)?

在具体介绍它之前, 让我们先看看鸡蛋的两种摆法:

鸡蛋的两种摆法

大家看出区别来了吗?

  • 上面的一排都是尖的一端(或者说 小端)向着左, 较圆的一端(或者说 大端)向着右;
  • 而下面一排正好相反.

画得不咋的, 大家凑合看就是了, 画出了<<蒙娜丽莎>>(Mona Lisa)的达芬奇(Leonardo da Vinci)据说开始学画画时也画过一段时间鸡蛋呢, 有说画了几天的, 也有说画了几年!

如果按照我们从左到右的习惯认为左是前面, 上面可以说是 小端在前, 而下面的则是 大端在前. 有人可能要问, 这与我们的 BOM 有何关系? 我们知道 UTF-16 一个代码单元有两个字节, 如果把一代码单元比作一个鸡蛋, 那么它也有两个端, 一个字节是小端, 另一个则是大端.

继续阅读

百度由来之众里寻他千百度

在所谓的制表符Tab)三巨头中,

嗯,也许你更常听到的是蝙蝠侠(BAT)三巨头

但由于我们是程序员,是键盘党,是tab键的重度用户,

嗯,这也许有些夸张了,现在的IDE都会很智能地缩进了,为我们省去了很多敲tab的需求

不管怎么说,还是叫Tab吧。

T:Tencent,腾讯

这个所谓的“十美分(ten cent)”自然应该是腾讯的音译,而“腾”自然就是来自于他的创始人马化腾先生名字里的那个腾了。腾讯自然是非常普通的一个取名了,就像是小店的“李记”之类的。但就像人不能靠一个好名字就能出名一样,一个牛逼的人应该先把自己变牛逼,然后即便他的名字很普通,在别人看来也不普通了。腾讯做得很大,这个名字自然也不普通了。

A:Alibaba,阿里巴巴

阿里巴巴有点异国情调了,有点天方夜谭的感觉,其实它正是来自于《一千零一夜》那个故事《阿里巴巴和四十大盗》的主角的名字,它最近在美国上市了,一时风光无二。

《阿里巴巴和四十大盗》(Ali Baba and the Forty Thieves)来自《一千零一夜》(One Thousand and One Nights),又叫《天方夜谭》(Arabian Nights)。

天方,泛指阿拉伯地区。

B:Baidu,百度

接下来终于要说到我们的主角——百度,这个名字还是有那么一点诗意的,准确地说应该是“词意”,因为它来自是宋代词人辛弃疾的一首词《青玉案·元夕》

东风夜放花千树,
更吹落,星如雨。
宝马雕车香满路。
凤箫声动,玉壶光转,一夜鱼龙舞。
蛾儿雪柳黄金缕,
笑语盈盈暗香去。
众里寻他千百度
蓦然回首,那人却在灯火阑珊处。

词的大意如下:

像东风吹散千树繁花一样,又吹得烟火纷纷,乱落如雨。
豪华的马车满路芳香。
悠扬的凤箫声四处回荡,玉壶般的明月渐渐西斜,一夜鱼龙灯飞舞笑语喧哗。
美人头上都戴着亮丽的饰物,笑语盈盈地随人群走过,身上香气飘洒。
我在人群中寻找她千百回,猛然一回头,不经意间却在灯火零落之处发现了她。

这首词赏析则如下:

“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”经过千百次的寻觅,终于在灯火冷落的地方发现了她。人们都在尽情的狂欢,陶醉在热闹场中,可是她却在热闹圈外;独自站在“灯火阑珊处”,充分显示了“那人”的与众不同和孤高。“众里寻她千百度”极写寻觅之苦,而“蓦然”二字则写出了发现意中人后的惊喜之情。这里作者以含蓄的语言,表现了人物内心的活动。
这首词先用大量笔墨渲染了元夕的热闹景象,最后突然把笔锋一转,以冷清作结,形成了鲜明强烈的对比。这种对比,不仅造成了境界上的强烈反差,深化了全词的意境,而且很好地起到了加强突出人物形象的作用。
灯火写得愈热闹,则愈显“那人”的孤高,人写得愈忘情,愈见“那人”的不同流俗。 全词就是通过这种强烈的对比手法,反衬出了一个自甘寂寞、独立不移、性格孤介的女性形象。作者写这样—个不肯随波逐流、自甘淡泊的女性形象,是有所寄托的。辛弃疾力主抗战,屡受排挤,但他矢志不移,宁可过寂寞的闲居生活,也不肯与投降派同流合污,这首词是他这种思想的艺术反映。“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”,历来也为人传诵。

注:以上原词,意思,赏析均摘抄自百度百科http://baike.baidu.com/view/287064.htm?fr=aladdin,(CopyLeft,版权所无)。

以上的赏析也仅仅是最通常的一种,每个人都可以有自己的理解。

搞程序的似乎喜欢文学的不多,甚至还有些抵触,但不要忘记了大家都是搞语言的,文学搞的是自然语言,我们搞的是程序语言。其实怎么说的,我们玩的反而是更低端的语言。我们所谓的高级语言仅仅是相对于汇编那些低级语言而言的,比起自然语言来,我们的程序语言还称不上高级。

这首词中最后几句还被王国维列在所谓“三种境界”中的最后一境:

“三种境界”论出自晚清学者王国维的《人间词话》之二六,原文如下:“古今之成大事业、大学问者,必经过三种之境界。

昨夜西风凋碧树,独上高楼,望尽天涯路’,此第一境也;

衣带渐宽终不悔,为伊消得人憔悴’,此第二境也;

众里寻他千百度,蓦然回首,那人却在灯火阑珊处’,此第三境也。

此等语皆非大词人不能道。然遽以此意解释诸词,恐晏、欧诸公所不许也。”在《文学小言》一文中,王国维又把这三境界说成“三种之阶级”。并说:“未有不阅第一第二阶级而能遽跻第三阶级者,文学亦然,此有文学上之天才者,所以又需莫大之修养也。”,

综上,百度的取名较有诗(词)意,有中国风,而且词中所表达的搜寻之意与百度作为搜索引擎之意也契合,所以,制表符三巨头中百度应该获得最佳取名奖。当然了,这也仅是作者个人看法,你可以有自己的喜好。

分类:IT评论标签:

小程序中的大道理之三--对称性和耦合问题

摘要: 本文主要谈了一下对称性及其引出的相关话题, 另外是对前文中没有详细谈及的耦合及 MVC 问题再进行了阐述

再继续扒

继续 前一篇 的话题, 在那里, 提到了抽象, 耦合及 MVC, 现在继续探讨这些, 不过在此之前先说下第一篇里提到的对称性.

注: 以下讨论建立在前面的基础之上, 为控制篇幅起见, 这里将不再重复前面说到的部分, 如果您还没看过前两篇章, 阅读起来可能会有些困难.

这是第一篇的链接小程序中的大道理

继续阅读

小程序中的大道理之二--抽象与封装

摘要: 本文接着上一篇继续探讨抽象与封装, 团队合作, 自顶向下, 分而治之等主题, 主要深入地探讨了抽象与封装这一主题.

继续扒

接着 上一篇 的叙述, 健壮性也有了, 现在是时候处理点实际的东西了, 但我们依然不会一步到底, 让我们来看看.

一而再地抽象(Abstraction Again)

让我们继续无视那些空格以及星号等细节, 我们看到什么呢?

继续阅读