软件工程
安静平和
这个作者很懒,什么都没留下…
展开
-
需求分析之——用例图
用例图(Use Case Diagram)是由软件需求分析到最终实现的第一步,它描述人们如何使用一个系统。用例视图显示谁是相关的用户、用户希望系统提供什么样的服务,以及用户需要为系统提供的服务,以便使系统的用户更容易理解这些元素的用途,也便于软件开发人员最终实现这些元素。用例图在各种开发活动中被广泛的应用,但是它最常用来描述系统及子系统。当用例视图在外部用户出现以前出现时,它捕获到系统、子转载 2016-01-29 14:47:07 · 6730 阅读 · 0 评论 -
编写DLL所学所思(2)-DLL编写优化
一、导出类的简单方式这种方式是比较简单的,同时也是不建议采用的不合适方式。只需要在导出类加上__declspec(dllexport),就可以实现导出类。对象空间还是在使用者的模块里,dll只提供类中的函数代码。不足的地方是:使用者需要知道整个类的实现,包括基类、类中成员对象,也就是说所有跟导出类相关的东西,使用者都要知道。通过Dependency Walker可以看到,这时候的dll导出转载 2016-02-03 11:16:47 · 648 阅读 · 0 评论 -
lib和dll文件的区别和联系
什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37) (1)lib是编译时需要的,dll是运行时需要的。 如果要完成源代码的编译,有lib就够了。 如果也使动态连接的程序运行起来,有dll就够了。 在开发和调试阶段,当然最好都有。 (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是转载 2016-02-03 17:41:29 · 821 阅读 · 0 评论 -
函数式编程很难,这正是你要学习它的原因
英文原文:Functional Programming Is Hard,That's Why It's Good 很奇怪不是,很少有人每天都使用函数式编程语言。如果你用Scala, Haskell, Erlang,F#或某个Lisp方言来编程,很可能没有公司会花钱聘你。这个行业里的绝大部分人都是使用像Python, Ruby, Java或C#等面向对象的编程语言,它们用起来很顺手。不转载 2016-03-07 16:53:38 · 2411 阅读 · 0 评论 -
三层架构实战篇—系统登录实例
上一篇博客,介绍了三层的一些基本理论,但是学习光有理论还是不行滴!马克思不也说过了吗?实践是检验真理的唯一标准! 所谓的三层分为物理上的三层和逻辑上的三层。物理上的三层包括:客户端(PC)、应用服务器、数据库服务器。逻辑上的三层,也就是我们要讨论的,分为表示层、业务逻辑层、数据访问层。实体层,严格的来说不属于三层中的任一层,它是独立于其他三个层次的,只能供其他层次进行引用,但转载 2016-03-10 22:23:06 · 1075 阅读 · 0 评论 -
缓存超时删除常见的套路
我们使用缓存的时候,经常会涉及到一个东西,叫做过期时间。那么,缓存本身是如何去处理这个超时时间的呢?常见的缓存定时超时套路有三种。一、定时删除:实现:在设置键的过期时间的同时,创建一个定时器(timer),让这个定时器在过期的时候触发,执行删除这个键。优点:对内存是友好的,因为我们总能够尽快的将这个键值对从内存中踢出去。缺点:对CPU是不友好的,特别是当定时转载 2016-10-20 09:10:51 · 3200 阅读 · 0 评论 -
SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤
使用场景:假如你的项目(这里指的是手机客户端项目)的某个版本(例如1.0版本)已经完成开发、测试并已经上线了,接下来接到新的需求,新需求的开发需要修改多个文件中的代码,当需求已经开始开发一段时间的时候,突然接到用户或测试人员的反馈,项目中有个重大bug需要紧急修复,并且要求bug修复后要立即上线;此时应该怎么修复bug呢?是在当前已经开发新需求的基础上进行修复吗?答案是否定的,原因是:如果是在转载 2017-02-09 22:29:26 · 808 阅读 · 0 评论 -
版本管理技能 GIT
本文章讲纯干货的 git的使用方法和团队协作中的问题解决,尽量不讲废话,只要记住几个基本概念和几条常用命令,就已经使用git无障碍,绝不长篇大论从历史开讲,看了2个小时还是不知道怎么上手。git是一个分布式版本系统,最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作。基本概念版本库只要在某个文件夹下做了git init的初始化操作,或转载 2017-03-16 23:56:58 · 482 阅读 · 0 评论 -
使用ClickOnce发布你的软件前,应该知道的一些事情(一些常见问题解决方法)
目前我的工作是用C#开发一个桌面软件,安装到分布各地的数以百计的PC上,而且软件的修改和升级在未来很长一段时间内都很频繁,所以采用了微软的ClickOnce部署技术。这是一种上手很快使用方便的技术,但是你在决定把它应用在一个真正的商业项目中之前,应该了解一些将来可能会困扰你的问题,然后再判断一下是不是应该采用它。也许自己从头写一个自动升级框架反而更适合你的情况。 1,无法有效避免非转载 2017-07-25 13:48:18 · 2226 阅读 · 0 评论 -
CMake与Make
大家都知道,写程序大体步骤为:1.用编辑器编写源代码,如.c文件。2.用编译器编译代码生成目标文件,如.o。3.用链接器连接目标代码生成可执行文件,如.exe。但如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,转载 2017-07-26 10:44:03 · 388 阅读 · 0 评论 -
cmake
最大的Qt4程序群(KDE4)采用cmake作为构建系统Qt4的python绑定(pyside)采用了cmake作为构建系统开源的图像处理库 opencv 采用cmake 作为构建系统...看来不学习一下cmake是不行了,一点一点来吧,找个最简单的C程序,慢慢复杂化,试试看:例子一单个源文件 main.c例子二转载 2017-07-26 10:46:04 · 436 阅读 · 0 评论 -
VC++ 中LoadLibrary的路径问题
已有动态库A.dll, 创建动态库B.dll和C.exe在B.dll中编写:LoadLibrary("A.dll")在C.exe中编写:LoadLibrary("B.dll")把A.dll和B.dll放到C.exe相同的目录,运行C.exe正常。把A.dll和B.dll放到文件夹DLL中,在C.exe 中改为LoadLibrary(“DLL\B.dll”),运行失败。原创 2017-07-26 23:29:07 · 10537 阅读 · 0 评论 -
Windows中实现不依赖账户登录的开机启动程序
在Windows中很多的任务,我们希望能够在Windows 启动之后自动运行。举个例子,公司有个订饭系统,基本每天都需要登录去订饭,于是写一个脚本实现自动订饭。可是你的电脑每天要关机,当然不希望开机后还需要手动运行这个订饭脚本了。于是此时我们要将其这种脚本实现为开机自动启动脚本。 但要注意本文要讲的开机启动的程序,是在用户还没有登录的情况下实现启动的。换句话说,本文描述的开机启动的程序运行在S转载 2017-08-07 13:55:33 · 8226 阅读 · 0 评论 -
C#如何以管理员身份运行程序
在使用winform程序获取调用cmd命令提示符时,如果是win7以上的操作系统,会需要必须以管理员身份运行才会执行成功,否则无效果或提示错误。 比如在通过winform程序执行cmd命令时,某些情况下如果不是以管理员身份运行,则会提示命令无效。 或者通过winform程序执行Windows Service 服务时,也需要以管理员身份才能调用Service服务。转载 2017-08-07 13:56:48 · 797 阅读 · 0 评论 -
wireshark 找不到本地网卡
有时候装完WireShark,在Capture Interfaces里面却找不到网卡,抓不到包。遇到这种情况,重启进入安全模式,打开C:\WINDOWS\system32\drivers目录,看看是不是有“nvmini.sys”这个文件。把这个文件删掉,再新建一个文本文件,重命名为“nvmini.sys”并设置属性为“只读”。这个“nvmini.sys”是一个病毒文件,至于怎么影响WireShar转载 2017-08-07 14:09:51 · 4053 阅读 · 0 评论 -
vc编译器 msvcr.dll、msvcp.dll的含义和相关错误的处理
很久没有写程式设计入门知识的相关文章了,这篇文章要来谈谈程式库 (Library) 连结,以及关于 MSVC 与 CRT 之间的种种恩怨情仇。如果你使用的作业系统是 Linux、Mac 或其他非 Windows 平台,你可以忽略这篇文章;如果你使用的作业系统是 Windows 平台,但没有用 Microsoft Visual Studio C++(以下简称为 MSVC)软体撰写 C++转载 2017-08-07 15:05:20 · 597 阅读 · 0 评论 -
依赖注入与对象间关系
依赖注入(DI)是控制反转(IoC)的一种方式。目前,在.NET和Java领域已经有相当多基于DI思想的对象容器,如:Spring,Unity等。本文试图避免重复性地介绍DI基础知识和DI容器的使用,而是希望深一层探讨DI的本质和对象间关系,以达到合理设计避免滥用DI的目的。依赖注入 vs 创建对象有不少地方这样描述:“依赖注入改变了使用对象前先创建的传统方式,而是从外部注入依赖的对象”。转载 2017-09-27 13:39:14 · 578 阅读 · 0 评论 -
生成COM Dll的tlb文件的两种方法
1.开始运行oleview调出OLE/COM Object Viewer.这个工具是微软提供的,在VC6中和Windows SDK中都有。 找到要用的COM组件,比如说VBSrcirpt的正则表达式COM组件在:Type Libaray中的Microsoft VBScript Regular Expression V5.5中,双击打开后,保存成idl文件。转载 2015-12-25 17:09:50 · 3996 阅读 · 0 评论 -
tlb与dll文件区别
tlb文件:com类型库文件,它包含接口相关信息。在需要使用对应com类的模块里,通过"#import xxx.tlb"来调用。dll: 动态连接库,它包含二进制代码,资源... , VC可以把tlb作为资源编译到dll中。在VC下#import "A.tlb" no_namespace;编译后产生A.tlh和A.tli两个文件,不生成namespace,如果没有no_namespace,则生成的转载 2015-12-25 16:59:29 · 1245 阅读 · 0 评论 -
PowerDesigner绘制ER图
http://www.360doc.com/content/15/1209/10/29528010_519037927.shtml一、概念数据模型概述数据模型是现实世界中数据特征的抽象。数据模型应该满足三个方面的要求:1)能够比较真实地模拟现实世界2)容易为人所理解3)便于计算机实现概念数据模型也称信息模型,它以实体-联系(Entity-RelationSh转载 2015-12-09 10:37:59 · 3477 阅读 · 0 评论 -
JVM
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地转载 2014-07-22 15:39:51 · 704 阅读 · 0 评论 -
MVC设计模式
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式最早由Trygve Reenskaug在1978年提出[1] ,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的转载 2015-12-11 14:32:07 · 6381 阅读 · 0 评论 -
MVC 模式(很经典的时钟实例)
MVC模式是”Model-View-Controller”的缩写,中文翻译为”模式-视图-控制器”。MVC应用程序总是由这三个部分组成。 Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。MVC模式能使界面(Viwe)和数据(Model)能有效的分开,由控制器(转载 2015-12-11 15:54:59 · 1611 阅读 · 0 评论 -
软件的三层架构
引言三层结构是传统的客户/服务器结构的发展,代表了企业级应用的未来,典型的有Web下的应用。多层结构和三层结构的含义是一样的,只是细节有所不同。之所以会有双层、三层这些提法,是因为应用程序要解决三个层面的问题。一、 软件架构和分层(一) 软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统转载 2015-12-11 14:46:36 · 4258 阅读 · 0 评论 -
组件和控件
一般把Control翻译成控件,把Component翻译成组件。 控件就是具有用户界面的组件。要说的具体一点,就得回顾早期 Windows 的历史根源,当时控件指任何子窗口——按钮、列表框、编辑框或者某个对话框中的静态文本。从概念上讲,这些窗口——控件——类似用来操作收音机或小电器的旋钮和按钮。随着控件数量的增加(组合框、日期时间控件等等),控件逐渐成为子窗口的代名词,无论是用在对话框中还是用在转载 2014-05-04 13:56:05 · 992 阅读 · 0 评论 -
浅谈依赖注入
http://www.cnblogs.com/yangecnu/p/Introduce-Dependency-Injection.html最近几天在看一本名为Dependency Injection in .NET 的书,主要讲了什么是依赖注入,使用依赖注入的优点,以及.NET平台上依赖注入的各种框架和用法。在这本书的开头,讲述了软件工程中的一个重要的理念就是关注分离(转载 2015-12-12 11:36:39 · 842 阅读 · 0 评论 -
契约式编程
契约是减少大型项目成本的突破性技术。契约由先验条件、后验条件、错误和不变量等概念组成。契约可以而加到 C++ 中而无需对语言加以改造,但是却十分笨拙且不一致。在语言内部支持契约的目的是:给契约一个一致的观感提供工具支持使编译器能够根据从契约中收集的信息生成更好的代码易于管理并强制实行契约处理契约继承 契约的概念很简单——它只是必须为真的表达式。如若不然,契约就被违反,那么按照定转载 2015-11-17 16:15:45 · 1219 阅读 · 0 评论 -
Dispatcher.Invoke and Dispatcher.BeginInvoke
Dispatcher.Invoke是同步执行,msdn描述:Executes the specified delegate with the specified arguments synchronously on the thread the Dispatcher is associated with.返回值是object, 是被调用的委托的返回值,如果该委托没有返回值,则为nu转载 2015-12-14 11:45:20 · 4142 阅读 · 0 评论 -
spring框架(三)junit单元测试
单元测试不是头一次听说了,但只是听说从来没有用过。一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的。学到spring框架这才知道单元测试原来是这么回事儿。 下面以上一篇文章中set注入的第一个实例为测试对象。进行单元测试。1,拷贝jar包 junit-3.8.2.jar(4.x主要增加注解应用)转载 2015-12-14 13:37:32 · 818 阅读 · 0 评论 -
深入浅出 RPC - 浅出篇
近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用。在平时的日常开发中我们都在隐式或显式的使用 RPC,一些刚入行的程序员会感觉 RPC 比较神秘,而一些有多年使用 RPC 经验的程序员虽然使用经验丰富,但有些对其原理也不甚了了。缺乏对原理层面的理解,往往也会造成开发中的一些误用。本文分上下两篇《浅出篇》和《深入篇》,其目标就是想尝试转载 2015-12-17 15:11:21 · 635 阅读 · 0 评论 -
深入浅出 RPC - 深入篇
《深入篇》我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功能,满足什么要求以及如何去实现它?RPC 功能目标RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用,在前文《浅出篇》中给出了一种转载 2015-12-17 16:06:07 · 688 阅读 · 0 评论 -
依赖倒置、控制反转和依赖注入辨析
http://blog.csdn.net/moreorless/article/details/4510859依赖倒置、控制反转和依赖注入辨析 在《道法自然——面向对象实践指南》一书中,我们采用了一个对立统一的辩证关系来说明“模板方法”模式—— “正向依赖 vs. 依赖倒置”(参见:《道法自然》第15章[王咏武, 王咏刚 2004])。这种把“好莱坞”原则和 “依赖倒置”原转载 2015-12-17 12:49:02 · 2530 阅读 · 1 评论 -
依赖注入(Dependency Injection)模式
1.2 依赖注入模式依赖注入(Dependency Injection) 是一个非常简单的概念,伸手-等待。(让DIP、IoC滚蛋)如例程1-5所示,Client依赖于抽象类型(甚至是具体类) IServer,蛋是(1)Client的类体中不创建IServer(子类)的对象,它不想自己创建IServer对象,而是提供public的构造器Client(IServer)或设置方法s转载 2015-12-17 13:02:22 · 2531 阅读 · 0 评论 -
.NET Remoting 使用总结
http://blog.163.com/henan_lujun/blog/static/19538333200781324449126/2、Remoting技术的应用 根据需求,我们的系统必须以C/S方式构建,而且是三层架构,这样一来,就出现了服务器端和客户端通信的问题。 为了解决双方的通信问题,还要考虑效率、性能等方面,经转载 2015-12-18 10:54:03 · 10927 阅读 · 0 评论 -
C# MarshalByRefObject 和Serializable的区别
这两种方式的类一般都是用于远程传输时使用。marshalbyrefobject是通过引用传递serializable是通过值传递,现在就来分析下什么是引用传递,什么是值传递。理解这个对Remoting或者webservice的认识是很重要的。marshalbyrefobject(引用)本机或者是服务器上的其实都是同一个实例,只不过是服务器创建后你在本地使用了那个对象而已。比转载 2015-12-18 14:09:45 · 2800 阅读 · 0 评论 -
.dll,.lib,.def 和 .exp文件
简要的介绍一下在微软开发工具中(VC)静态链接库和动态链接库生成过程中出现的.dll .lib .def 和 .exp文件类型。windows平台上可执行文件可能是一个.exe文件也可能四个.dll文件。当然也有一些比较特别的exe或者dll文件,不过他们有其他样式的后缀名比如屏保程序(.scr),ActiveX DLL 用的.ocx 还有各种驱动使用的各种扩展名。这里我们不讨论.com转载 2017-10-22 13:54:28 · 1543 阅读 · 0 评论