设计思想日志
文章平均质量分 72
明天好,会的
敢于挑战,追求卓越 -- 我在软件开发方面拥有丰富的经验,熟悉多种编程语言和开发框架。我可以开发各种类型的应用程序,包括网页应用、移动应用以及桌面应用。无论是前端开发、后端开发还是数据库管理,我都能胜任。 作为一个独立开发者,我渴望能够将我的技能和创造力应用于各种令人兴奋的项目中。我相信自己具备了丰富的技术知识和灵活的思维,能够为合作伙伴带来独特而有价值的解决方案
展开
-
浅浅的了解 autoconf:当开源项目不再自带 configure 文件
在开源软件的世界里,开发者可以自己编译和安装需要的组件,这也是我喜欢开源项目的原因之一。然而,就在昨天,当我尝试编译一个颇具吸引力的开源项目时,我意外地发现该项目并没有包含通常所见的configure脚本原创 2024-03-10 16:13:19 · 449 阅读 · 1 评论 -
论if..else必要性
我们在讨论业务逻辑时或分析时,时常会提到“几种情况”,例如,当为A情况时,代码该如何执行;当为B情况时,代码又该如何执行。这是我们习惯的思维模式。但是所谓的“情况”实际上是各种逻辑关系的组合或者是归纳。由于归纳本身就有简化表达的作用,所以将这种归纳映射成代码,必然会起到简化代码的作用,使代码看起来比较简单。以下面这段代码为例,以下代码片段是一个真实项目中的代码片段,很遗憾,这里面确实包含了如此原创 2009-10-21 22:36:00 · 1178 阅读 · 2 评论 -
我眼中的设备
我现在虽然不能够完全定义设备的范畴,但我可以感觉到它的存在。在我们的日常并生活中,我们常常会听到打印设备,扫描设备等等,这些设备和我提到的设备具有类比性。而在软件设计中(我们现在姑且在设计的范畴中讨论),我认为设备不是绝对存在的,而是相对于当前的设计而存在的。而这个断言的存在,将会彻底影响到我们对软件设计的视角。那么什么是设备呢,我先斗胆在这里下一个定义:设备是我们的代码作用于的对象。原创 2009-03-05 14:51:00 · 781 阅读 · 0 评论 -
经典的三段论
“如果所有的人都会死,苏格拉底是人,那么苏格拉底会死”。在这个经典的三段论中,“人”、“会死”和“苏格拉底”这些词都可以换掉。这些词就是逻辑上的不相干的词。我想对设备的探索,应该从这里开始。原创 2009-03-03 14:31:00 · 5360 阅读 · 0 评论 -
软件设计中的设备
最近我发现了“设备”这个XX,之所以用XX表示,是因为我现在也不能对它进行完全定位,它可能是一种概念也可能是一种理论。只是我发现当我感觉到它的存在时,以前那些让我疑惑的问题都被很轻松的解开或找到了合理的处理方法。我会在以后的日子里,用各种代码来证明它的存在及其意义。经典的三段论 我眼中的设备 Technorati 标签: 设备 更多内容,请参考我的Blog导读原创 2009-03-01 13:24:00 · 797 阅读 · 0 评论 -
成长
在经典物理中,只要运动的物体在左右的垂直方向上受力相等且方向相反,那么这个物体将会沿直线前进。但是这样的情况在现实中几乎是不可能出现的。这一基本原理决定了事物的成长过程实际上是一个曲折的过程。如果你想用直线的方式来完成一件事情,那么请趁早打消这个念头吧。原创 2008-12-13 09:33:00 · 859 阅读 · 1 评论 -
关于White框架在项目中的使用分析
white地址:http://www.codeplex.com/white 我只能说这是一个不错的UI测试框架。这个框架的实施必须要客户认可,因为这个测试框架的实施,需要花不少的时间。我目前在思考单元测试在UI层上的适用范围,当我看完来之white的例子代码后,我发现white框架的价值观同样在这个思考范围之内。 在没有这个white框架之前,我们可以通过类似MVC的方式来部分实现界面层的测试,原创 2009-02-22 14:23:00 · 1489 阅读 · 0 评论 -
Give me a window
又道周末,终于可以静下来休息一下了。忽然想起上周给Don翻译的一篇文章从C#中获取MGrammar输出。里面提到的Modeling Language让我感到很好奇,虽然在之前翻译了Don的关于Oslo的文章时,了解了一些Modeling Lanuage,它大概是将自然语言转换成相应的功能。通过Don提供的连接,我下载了关于MLanguage的例子。用VS2008将其打开,发现还需要安装Oslo原创 2008-12-07 10:12:00 · 862 阅读 · 0 评论 -
关于Anonymous Delegate与Lambda Expression的趣事
原文:Fun with Anonymous Delegates & Lambda Expressions在上周进行的.Net Framework基础定制课程教授过程中,我展示了代理(delegate)语法,这一历史性的一步。正如我曾经说过的一样,根据学生们已经知道的内容来解释新的内容是相当的有效。在我的学生中,大多数在1.x平台上,对代理的语法都有一些经验,因此,在案例分析中,我用一个对Arr翻译 2009-02-15 19:59:00 · 1492 阅读 · 1 评论 -
杨辉三角
今天看了一下杨辉三角,觉得很有意思,古人有这样的想法真是很了不起。这是一个关于二项式展开系数的发现。例如:(x+y)^2=x^2+2xy+y^2(x+y)^4=x^4+4x^3y+6x^2y^2+4xy^3+y^4看上去有点麻烦,其实可以这样拆开,就一目了然了(x+y)^4先将系数列出来1+4+6+4+1在将x列出来x^4+x^3+x^2+x^1+x^原创 2009-11-07 11:21:00 · 883 阅读 · 0 评论 -
UML的那几个图
1. 类图:用于呈现系统内部的静态结构,它可以被直接转换为代码,对于程序员尤为重要 2. 序列图:用于展示操作的实现,同时也展现了某个操作所涉及的对象(群)。这里同时也隐含地提出了“操作”定义的范围。 3. 用例图:用于展示系统外部的行为。这个图在需求分析阶段和客户沟通时必须有的东西。 4. 状态图:用以展示某一对象内部状态的变化过程 5. 活动图:一般性的流程表达。可以用于业务逻辑层面的原创 2009-12-20 02:38:00 · 836 阅读 · 0 评论 -
UML中的几个关系
这几天又看了UML,再次理了一下UML中的关系。总的来说,关系可以分为静态关系和动态关系。静态关系的特征是它可以被保存起来,而动态关系则只在代码运行时才产生。对应于代码,静态关系可以表现为对象及对象的属性,更准确一点是只对象的数据成员。而动态关系,表现为依赖,通常作为对象成员方法中的一个参数出现。原创 2009-12-29 13:21:00 · 639 阅读 · 0 评论 -
软件架构风格 - 独立构件风格
独立构件风格包含进程通信 事件驱动系统形如其名,独立构件风格强调的是构件的独立性。构件之间的耦合度应该是非常低的“非直接耦合”或者“数据耦合“。个人觉得,微服务就是”独立构件风格-进程通信“的典范。事件驱动系统,强调的是非直接调用,它是信息和一组可扩展的信息处理器的集合,信息处理器之间的关系是“非直接耦合”,而信息和信息处理器之间的关系通过框架来实现。独立构件风格的优势在于,由于...原创 2019-08-31 15:09:51 · 3234 阅读 · 0 评论 -
软件架构风格-调用/返回风格
调用返回风格包括主程序/子程序 面向对象风格 层次结构风格个人觉得这是最常用的一种风格,因为它符合顶层分解的逻辑。每一个抽象层次都会通过向下调用的方式来实现它所定义的功能。 采用调用返回风格的系统的配置比较多,在实践中,我们希望通过配置来实现灵活的调用,即将低层次的结构在有需要的时候随意替换掉。但是,替换没有那么简单,首先,出于动机方面的原因,一旦项目上线,没有人愿意去动线上的代码;其...原创 2019-08-28 22:30:10 · 3726 阅读 · 0 评论 -
软件架构风格-数据流风格
个人认为数据流风格是软件架构中最简单的风格,它是顺序执行的,可能你在不经意间已经使用了这种风格。数据流风格包含:批处理 管道过滤器批处理强调数据的完整性,过程没有交互。每一步都是一个独立的程序,每一步之间通过数据传输来进行交互,后一步必须在前一步完成时才能开始。管道过滤强调数据的转换,输出的数据项相较于输出的数据范围,可能增加也可能减少,过程可交互。管道过滤器分为两个部分,过滤器和...原创 2019-08-26 16:23:29 · 3312 阅读 · 0 评论 -
系统架构师-结构化开发方法
结构化分析研究“物质环境”:当前系统的数据流图,包括人和自动化流程 建立系统逻辑模型:将自然流数据转换成等价的逻辑数据流图 划清人机界限:确定哪些由自动化完成,哪些由人工完成结构化分析的输出:分层的数据流图 数据字典 加工逻辑说明 补充材料数据流图外部实体:目标软件系统之外的人或者系统;也可以是数据的发源地或者归宿地 数据存储:文件存储/数据库存储 加工:描述...原创 2019-08-13 17:18:47 · 260 阅读 · 0 评论 -
关于系统架构的自问自答
最近,由于工作的原因,有了不少时间来思考系统架构。这个话题我也不止一次思考,但每要整理时,总是感觉没有头绪,无从下手。因此,决定通过自问自答的方式,通过一点一滴,希望有所进展。除此之外,在这里整理的另外一个目的,是为了将我的想法放在开放的环境中,希望能够得到大家的指正。问:有没有更先进的架构答:没有更先进的架构,只有更加合适的架构。这个问题是我最近能够想起的最近我遇到的原创 2017-05-15 16:48:16 · 794 阅读 · 0 评论 -
我的Blog导读
谢谢大家的光临。写了这么久的Blog,现在是整理的时候了。只有整理好已有的东西,才能更好的前行。个人思想关于系统架构的自问自答软件设计中的设备 --这是我最感兴趣的一篇成长从Microsoft Solver Foundation看微软的未来代码的不完整性从蔡斌失败的思考项目管理我的项目周报项目管理之质量检查点再谈质量检查点关于管理的心得...原创 2009-03-03 21:50:00 · 1704 阅读 · 0 评论 -
代码中的地雷
以前听说过软件系统中有定时炸弹,今天我领教了代码中的地雷。 所谓地雷,它的特性是安装容易拆除难,下面段代码完全符合地雷的特性。 public static void GetAvail(SegmentType segment, out int avail){ if(segment.StartDate n.MaxAvail = 0); //....}这是一个底层方法,依赖于它的代码较多,即它的扇出较大。这个函数的本意是获取avail,但在获取avail的同时染指了原创 2010-06-19 22:12:00 · 928 阅读 · 0 评论 -
Unity 依赖注入--构造器注入
最近准备用Unity来改良系统。 做了一些小测试,拿出来与大家分享一下。 using System;using System.Text;using System.Collections.Generic;using System.Linq;using Microsoft.VisualStudio.TestTools.UnitTesting;using Microsoft.Pr原创 2010-03-23 22:02:00 · 1049 阅读 · 0 评论 -
LINQ TO SQL:至始至终都是对象
原文:LINQ TO SQL: OBJECTS ALL THE WAY DOWNAuthor:Matt Warren 关于LINQ to SQL是什么或不是什么,目前有很多说法。其中有一些确实是基于某些人的调查研究,他们都亲手试过。作为它的构架师,我意识到我是最了解幕后原理的人,然而这并不能让我成为一个无所不知的神,使我能够知道这个产品是如满足每个人的期望的。我知道它做什么,因此翻译 2009-01-30 13:39:00 · 1060 阅读 · 1 评论 -
C++文件拷贝代码
用C++些文件拷贝程序远远比我想象的要困难的多,和C#仅使用的File类和Directory类相比,直接操作windows api更加有趣。这个过程让我体会到的不仅仅是api,更多是编写程序这一个过程的本质。先和大家分享一下我的代码,还请各位C++前辈们指教。.h文件#pragma once#include #include "file.h"using namespace std;namespac原创 2008-11-18 21:52:00 · 1369 阅读 · 0 评论 -
关于封装的思考
我们一直都在谈“封装”,这个概念理解起来很容易,但是真正实践起来却很困难。....... if(mClients.ContainsKey(clientID)) return; ResponseNotification(clientID);.......private void ResponseNotification(string clientID)原创 2007-09-12 21:33:00 · 828 阅读 · 0 评论 -
以流程设计为向导的现实代码(引以为戒!)
我在上一篇blog中写了以流程为向导和以数据为向导的设计,有点抽象。今天在检查客户提出的一个性能问题时,发现这个问题的根源其实就是以流程为向导的设计导致的。出于保密的考虑,我下面用伪代码的形势把那个设计表现出来。在客户的框架中,提供了一个接口方法: public Customers[] SearchCustomers(string ids);这个方法的调用会消耗较多的时间。客户在他们的跟踪器中发现原创 2007-09-11 16:42:00 · 752 阅读 · 0 评论 -
资源管理ResourceManager
几乎每一个系统,都会有资源管理的并发性问题,例如,在进销存系统中,我们要处理库存的并发行问题,在订票系统中,要保证一张票不被定两次等。处理这个问题的方法有很多,例如直接使用数据库的Transaction Lock,使用数据的timestamp等。 以下这段代码,我是以服务的角度来思考对关键资源的数量进行修改,自我感觉不错,贴出来,希望各位多多指教。这个类的接口很简单,只有Add和Substract原创 2007-09-05 16:36:00 · 1004 阅读 · 0 评论 -
以流程为向导与以数据为向导
如何区别在系统设计中,以流程为向导还是以数据为向导。以流程设计为向导的设计有一个很大的特点,业务逻辑的实现以流程为中心,在流程中,将系统中的实体以数据的方式对待; 以数据为中心的设计的特点为,设计以系统中的实体为中心,为该实体设计合乎逻辑的成员方法,通过实体间成员方法的通信来实现业务逻辑。为什么要对这两种设计进行区分,因为这两种设计直接影响了系统设计的耦合度。我的经验还不算多,但是我已经发现,以流原创 2007-09-05 11:05:00 · 1073 阅读 · 0 评论 -
业务逻辑&程序构架
写了这么多年的程序,现在是时候思考业务逻辑代码和系统构架代码之间的区别了很高兴看见有人回复,我还在整理中。在整理资料的时候,我发现了解这个区别会有很多好处,可以帮助我们分析代码,重构系统,甚至可以帮助我们设计系统构架。看来整理这个资料是值得的,也希望有更多的朋友们加入进来。原创 2007-09-03 23:00:00 · 794 阅读 · 1 评论 -
如何熟悉一个系统的业务逻辑
对于一个新手来说,要熟悉一个系统的业务逻辑,除了要多运行这个系统之外,还应该注意理解:系统的基础设置在系统的业务逻辑中的关系及体现。只有熟悉了这一点,才算是真正了解了这个系统的业务逻辑。原创 2007-09-03 09:22:00 · 4798 阅读 · 3 评论 -
Dnn站点权限修改器
这是一个可以批量修改dnn站点权限的程序,在工作中,我们要对用户的18个网站的所有页面的权限进行批量修改,所以写了这个程序.dnn的框架提供的权限管理确实很灵活,但是如果要设置所有页面及页面中的module的权限进行专门的设置,估计会把你的手点残废,所以我们需要一个程序来辅助我们完成这个工作.左边修改页面的权限,右边修改模块的权限。这个程序我还没有取名字, 但是已经测试过了, 如果你有需要,就直原创 2007-08-30 22:04:00 · 1429 阅读 · 5 评论 -
由Controller Class想到的
在很多设计框架中,可以看见controller class。那天,听到我们头儿提到了它,我觉得大家似乎都在犹豫是否有必要使用controller class,或者是在什么时候可以使用controller class。这个问题我也一直没有搞清楚过。在今天的工作中,我要处理LocationControl,这个控件应客户的要求,其操作比较复杂,其复杂的地方在于它有很多操作可以作为数据写入的入口。在开发原创 2007-08-28 23:05:00 · 864 阅读 · 0 评论 -
标记数据分析
最近由于工作上的需要,我要分析网页中的html标记元素,对其中的文本进行操作。虽然有这样的组件,但是我还是选择了自己写代码,来尝试一下。最开始还好,后面发现这条路越走越难。第一个问题是我该如何分析出一个元素的开始。例如;开始我想用正则表达式,后来发现这个表达式并不简单。这样的表达式如:;这是一个失败的表达式,它会匹配出之间的所有数据。当我走到这里时,我发现一切都没有我们所想象的那么简单。-----原创 2007-10-10 22:39:00 · 1054 阅读 · 0 评论 -
关于 DAL层
我是今年上半年在做DNN项目的时候才听说DAL的(数据处理层),而关于数据处理层的概念,在很早以前就知道了。和其他很多概念一样,我虽然是知道它们的存在,但是在写代码的时候,仍然是糊里糊涂,很多时候,我都不知道为什么这段代码要这么写?似乎写代码的思路是在跟着业务流走,业务流怎么执行,我就怎么写,这便是我的第一判断。至于那些设计模式和层的概念,早就被抛在脑后了。这是我的烦恼。今天,有一段代码,在同事原创 2007-10-12 16:08:00 · 4045 阅读 · 1 评论 -
再谈参数列表
我记得上次写了一篇文章,说用参数传递的方式来缩小类中的成员变量的作用范围。实践证明,这种做法是正确的,只是有的时候,过长的参数列表让代码看起来不舒服(不是有编码规范吗,规定参数列表中的参数不能超过5个)。但是对于降低代码的bug产出率来说,这点不舒服是必须忍受的,哪里有什么便宜都占尽的道理呀(又啰嗦了:))。今天我想说的是,传递参数引用的话题。这个话题源于我今天遇到的一个bug。一个对象的P原创 2007-11-12 21:12:00 · 741 阅读 · 0 评论 -
从Microsoft Solver Foundation看微软的未来
Microsoft Solver Foundation是我在为Don翻译时发现的,也是刚刚开始了解。它被用来应对敏捷技术中的计划,调度,风险管理和决策指定。当我看到它的介绍时,我感到相当的惊讶--微软的策略。技术是基础,在这个基础之上是各种应用模型,在应用模型之上的是各种管理模型。我认为这个Microsoft Solver Foundation就是一个管理模型。而这三层也是一个价值链。我们似乎可以原创 2009-01-10 16:17:00 · 3584 阅读 · 1 评论 -
文件夹遍历代码C++(win32平台)
最近有时间,继续学习C++,写了一段遍历文件夹的代码。拿出来希望大家指教。void Common::File::ReadFiles(const wstring &directory,const wstring & extentions, void (* fileMethod)(const wstring &)){ WIN32_FIND_DATA findData; ZeroMemory原创 2008-11-10 20:43:00 · 1907 阅读 · 1 评论 -
单元测试==低成本运行代码
最近在项目组中试行单元测试,感受颇多,而最让我感受最深的是单元测试的另一面---低成本运行代码。单元测试提供了一种途径,可以让你直接运行你要测试的代码。这方面的优势对于大型系统的开发是非常明显的。如果往大型系统中添加了一项新的功能,我们通常会重新编译整个系统来对新功能进行测试。如果添加的功能比较复杂,或涉及的模块比较多,那么编译的成本可能就会更高。更加糟糕的是,那些新添加的代码在通常情况下不可能一原创 2008-11-08 22:10:00 · 821 阅读 · 0 评论 -
应对复杂的业务逻辑
1.确定逻辑单元2.对逻辑单元做单元测试确定逻辑单元的方法有很多,说简单其道理就像我们平时整理自己的屋子,只要将各种东西分门别类的放整齐就可以了;说复杂的,大家可以看看现在市面上的各种设计模式,它们又像一把梳子,帮助我们将杂乱无章的业务逻辑理顺。事实上,不管你怎么写,你的代码是由逻辑单元组成的,因为你的代码的确是在描述业务逻辑,就算是只有一个逻辑单元存在。然而事情并没有那么简单,逻辑单原创 2008-10-16 00:25:00 · 2588 阅读 · 0 评论 -
项目管理之质量检查点
在软件工程的理论中,没有“质量检查点”的说法,这只是我自己在项目管理中,为了应对项目的质量压力而采取的一个措施,现在在这里写出来,和大家分享,希望能够在这里和大家进行交流。所谓“质量检查点”就是开发人员对需求的认识点。这个认识点将作为开发人员的开发依据和自我测试依据,也是在产品提交之后,客户发现bug之后,开发团队对bug的分析依据。可能我对“质量检查点”的诠释不完全,毕竟“质量检查点”在原创 2008-10-18 22:40:00 · 2043 阅读 · 0 评论 -
关于对设计模式的一点认识
一直以来我都认为我的编程学习是不完整的,因为我从来没有真正花过时间来学习设计模式,可能在我的潜意识里,认为设计模式是编程学习中的最高阶段,所以对它的学习一直因为它那崇高而神圣的地位而不断的后延,就像那些朝圣者要跪拜几千里路之后才能见到他们的神一样,我也认为在学习设计模式之前,我也要做更多的练习。这段时间我一直在看com的实现,在不经意中,去找了一下这些实现在C#语言中留下的痕迹。这是一个有趣的过原创 2008-03-16 12:40:00 · 729 阅读 · 0 评论 -
代码生成工具应成为中国外包公司的一个应用策略
代码生成工具的目的在于:降低开发成本,提高开发效率,同时降低bug的产出率。代码工具对系统构架师的要求在于: 能够对系统中的开发活动进行分级,通过分级来识别开发活动的价值,并最终能够为低成本的活动设计相应的代码生成工具。我这里指的代码工具是指针对某一个系统的开发需要而单独设计的一个代码工具,而不是一般意义上的代码工具(比如codesmith),对这个工具的要求不在于它有多强的功能,而在于它能够生成原创 2007-12-09 11:12:00 · 996 阅读 · 0 评论