随笔 - 106
文章 - 2
评论 - 2017
阅读 -
43万
随笔分类 - 模式
我的设计模式总结
摘要:各位小牛大牛老鸟菜鸟们好,欢迎参观我的设计模式世界。这个世界我已经总结多年了,现在才刚刚成型。But I have a dream,梦想所有开发者都能一夜之间认清所有设计模式,还幻想以后大家认识设计模式时,必首先google本文,嘿嘿。前辈同仁们已经总结过很多,至今首页上设计模式的文章仍然层出不穷。...
阅读全文
.NET独有的精巧泛型设计模式
摘要:在.NET发展史中,2.0是具有里程碑意义的一个版本。从这个版本,.NET青出于蓝(Java),而胜于蓝。在.NET 2.0带来的诸多新特性中,我认为泛型是最重要,没有之一。虽然泛型出现已有多年,连Java都早已借鉴引入了泛型(虽然是语法糖),可是用泛型的编程思维方式并没有得到相应的普及。一方面是由于过去大量的Framework仍然是在非泛型时代写成的,另一方面泛型的设计模式没有得到发展,改变的时候该到了。来举一个例子说明这两点。我们如果写过网络数据抓取的代码,应该熟悉这样的代码:var request = WebRequest.Create("http://www.cnblogs.
阅读全文
看似简单类型设计题
摘要:周二去一次面试,在做一个题目中,要求实现一个学生类Student,再实现两个类继承它们,分别表示男生和女生。当时,匆匆忙忙地,也没多想,把Student类的属性敲上,再在Boy和Girl类中的构造函数中,分别设置this.Sex = true和this.Sex = false。实际运用中,这样肯定不合理,男生和女生的Sex是固定的(一般情况下,哈),不能在实例创建后修改。只能将Sex属性的set的访问级改成protected。可是,这个protected实在是太刺眼了,而且因为子类的逻辑而迫使父类作修改,既破坏了开放闭合(OCP)原则,又因为出现Student的地方不能简单地用Boy或Girl
阅读全文
StructureMap极速上手指南(翻译)
摘要:前言:也看过一些国内介绍SM的文章,但还是老外这篇更详尽通俗。这是偶翻译的第一篇文章,错误不当之处请不吝赐教。总觉得一个第三方框架,要想成功一定要有个 响亮的名字。四年前刚接触JQuery时,就认为它一定能流行起来,因为名字叫起来明显比其它框架(Prototype/Moo Tool/Ext JS)印象深刻。StructureMap也是如此,妙得是缩写SM。IoC以前,我们常被纷繁的业务逻辑SM得痛不欲生,用StructureMap, 底层的码农看到了翻身的希望,可以SM这些业务逻辑了。我在30岁生日之际,对斯德哥尔摩EPiServer(1)组织(2),作过一场关于IOC容器-Structure
阅读全文
视图分离技术的认识和应用
摘要:在过去Win32编程时代,我们看到的程序界面都是由静态编程语言,从一个按钮的尺寸到布局,一行行地绘制出来。比如现在我们创建一个.Net WinForm窗体,打开其对应的designer.cs文件,就会看到长篇累牍窗体绘制代码。打从VB和Delphi出现后,尽管通过界面设计器自动生成代码成为主流,然而随之互联网时代的发展,我们需要丰富多样的软件界面,更灵活地应对需求变动。比如一个软件往往有多种界面,包括C/S和B/S,C/S中包括Windows/Linux/IPhone,B/S包括IE/Firefox/Chrome。无论是先设计业务,还是先构勒界面,最好能独立、清晰、明确的进行。更不想影响业务逻
阅读全文
运用Composite模式构造JSON
摘要:Json是如今流行的Ajax或Service数据交换格式,.NET使用DataContractJsonSerializer(System.Runtime.Serialization.Json命名空间下),可以很方便地在json字符串和实体对象间转换。 在Restful WCF服务站点上,更无须写代码序列化Json。服务默认以xml形式返回结果,但如果Web请求头信息中的Accept属性为application/json,客户端得到的就是以json格式序列化了结果。 客户端用jquery实现很简单,只要调用ajax函数时,设置dataType:’json’就可以了。 客户端也可以发送j...
阅读全文
B/S项目树状目录结构的完整实现(一)
摘要:刚学编程不久时,曾参加了一个短期培训。培训结束时,和毕业设计一样,要做一个模拟项目,几个人一起的。我选的是一个在线音乐网站,当时觉得自己水平已经不错了,虽然小组其他人比较菜,做出来应该问题不大。但在一个音乐收藏夹目录的数据库设计上,我和我们老师有一次可以说比较激烈的争吵。 我的想法是,每个目录应该包含多个子目录,但最多只有一个父目录,应该只有一种最简单、最合理选择:每个目录有唯一主键及父目录主键。 我的想法却被指导老师否定了,他当时讲的理由是什么,我几乎全忘了,可能根本没在听。我坚决地维护自己观点,辩论中举出二叉树、数据库范式等种种理论。我并不需要什么证书,不怕得罪谁,我的数据库系...
阅读全文
业务逻辑层的Helper基类
摘要:业务逻辑(BLL)层的组织,长期以来一直是个困惑。打从开始引入ORM后,BLL层不再出现SQL语句和存储过程,感觉思路清晰了不少,现在自己对BLL结构认识大致上定型,一般根据不同方面的业务逻辑,对应不同的命名空间,亦即不同的文件夹,每个文件夹下可能有多个Helper类。对于缓存、日志、邮件等通Helper类,放在Common目录下。 这是传统的三层架构,如果使用SOA的话,可能多一个服务层,一般来说,项目分层不要超过四层。 下面说说创建Helper基类的目的,因为各个Helper类,尤其是在Web开发中,都面临一些类似的问题: 1、如何和数据打交道。有了ORM不能替代我们对性能的思考...
阅读全文
重构-打造爱因斯坦谜题最快算法
摘要:上一篇里,阐述了解这道题的思路,并在代码上实现。不过代码还有很多可改进之处。性能方面,虽然比穷举法快得多,此外搜索算法还是比较盲目,效率应该能更上一层楼。 首先是在算法实现最后一步的搜索树递归方法中,发现MatchResult枚举并没有实际用处 var result = conditions[node.Index].Match(guys, ref attempts); if (result == MatchResult.Fail) { if (node.Action != null) node.Action...
阅读全文
小谈面试模式中的设计模式
摘要:这些日子,注意到很多人对设计模式相当热衷。或许一向如此吧,就像.Net和Java比较那种月经贴。不过昨天看到一篇趣文,不是趣在有新意,趣在上来作者发表的模式宣言:超级扫盲-什么是设计模式? 设计模式绝对不是纸上谈兵的知识,光看书就以为自己懂了,那只是井底之蛙之见,设计模式绝对是从实践中来到实践中去的!如果编码经验很少,也不太可能能理解好设计模式,但凡软件设计能力强的人编码功底都是相当扎实的。如果没有能深刻理解面向对象,也不太可能理解好设计模式 这个引用一下,就不评论了。只说自己,虽然园子里N个设计模式系列了(偶只看过TerryLee和吕震宇的系列)。眼前有景道不得啊!这里只解决现实问题...
阅读全文