摘要:
1)加入连接:<a href="所要连接的相关地址">写上你想写的字</a> 2)在新窗口打开连接:<a href="相关地址" target="_blank">写上要写的字</a> 3)移动字体(走马灯):<marquee>写上你想写的字</marquee> 4)帖子背景音乐:<bgsound="背景音乐地址" loop=infinite>5)字体加粗:<b>写上你想写的字</b> 6)字体斜体:<i 阅读全文
摘要:
protected void RepService_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { //DataBinder.Eval(e.Item.DataItem, "数据库字段") //int i = Convert.ToInt32(Databinder.Eval(e.Item.DataItem,"ID&qu 阅读全文
摘要:
DECODE函数,是ORACLE公司的SQL软件ORACLE PL/SQL所提供的特有函数计算方式,以其简洁的运算方式,可控的数据模型和灵活的格式转换而闻名。函数介绍 DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能。DECODE有什么用途呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的加20%;工资在8000元或以上的加15%,通常的做法是,先选出记录中的工资字段值? select salary into var-salary from employee, 阅读全文
摘要:
ASP.NET事务可以说是在.NET平台上事务实现方式最简单的一种,你仅仅需要一行代码即可。在aspx的页面声明中加一个额外的属性,即事务属性Transaction="Required",它有如下的值:Disabled(默认)、NotSupported、Supported、Required和RequiresNew,这些设置和COM+及企业级服务中的设置一样,典型的一个例子是如果你想在页面上下文中运行事务,那么要将其设置为Required。如果页面中包含有用户控件,那么这些控件也会包含到事务中,事务会存在于页面的每个地方。代码示例:页面声明Transaction=" 阅读全文
摘要:
如果在WEB服务中有这样一个场景,某个WEB服务的方法要执行两个任务,它首先要在数据库中创建一个新表,接着调用对象来收集和格式化数据,并在新表中插入数据。象这样的一组方法,我们必须保证他们都成功执行,否则会造成很多脏数据在系统中,这时事务就出场了。关于事务的基本概念再次就不过多涉及,只需要记住它的四个属性ACID即可。WEB服务中的事务是用WebMethod特性的TransactionOption属性来申明的。如果WEB服务方法执行时发生异常,则自动会终止事务,反之则提交事务。WEB服务的方法仅有两种可能的行为:Disabled,NotSupported,Supported表示不参与事务;Re 阅读全文
摘要:
很多数据库操作需要进行事务,Asp.net下面进行事务大致有3个层次: (1)存储过程层次的事务 (2)Ado.Net层次的事务 (3)Asp.Net页面层次的事务 下面分别举例: 首先建立trantest表,字段id(int),test(char) 为id设置主键(利用主键是不允许重复的特性进行事务测试) 假设数据库内存在记录id=1,test='test' (1) CREATEPROCEDURETran1 as begintran setxact_aborton InsertIntotrantest(id,test)values(1,'test') Inse 阅读全文
摘要:
本篇技巧和诀窍记录的是:母版页中对控件ID的处理。 一、问题提出 由于总体排版和设计的需要,我们往往创建母版页来实现整个网站的统一性,最近我由于统一性的需要,把原来整个项目单独的页面全部套用了母版页。但是出现了一个错误……在我的Blog中记录一下,方便大家参考。 二、 抽象模型 由于整个页面内容过多,所以我把这个页面中最为本质的问题抽象出来。原来单一页面,就是利用按钮触发JS事件,在文本域中插入“(_)”功能,其实现代码如下: <head id="Head1" runat="server"> <title>单一页面抽象模型-YJi 阅读全文
摘要:
注:此系列记录在我实际开发中遇到的问题和收藏一些技巧文章。 我们都知道,在Gridview中不能直接去绑定数据库中的图片,我们可以利用HttpHandler很容易的完成这个任务,在这里我记录一下这个过程。1.上传图片存储到数据库中在数据库中创建一个表,添加一下3个字段:步骤一:在Web页面中拖一个FileUpload 控件,一个文本框用于输入名称和提交上传按钮<asp:FileUpload ID="fuImage" runat="server" /><br /><asp:TextBox ID="txtImageNa 阅读全文
摘要:
当我们想在GridView中添加删除、选择功能时,我们通常的做法是利用模板功能在每行添加一个按钮控件或者超链接按钮控件,单击按钮利用RowCommand获取每行的ID。 下面我们利用JavaScript完成这一功能。 我们可以通过调用JavaScirpt函数改变单击的行的背景颜色来模拟选择的行,这里需要声明一个隐藏字段,从JS中获得选取GridView行的ID。在选择/删除事件中,可以从隐藏字段中得到选择行的ID,完成一些需要功能。 第一步:在页面中添加GridView控件和一个按钮,隐藏字段 <input id="hdnEmailID" type="hid 阅读全文
摘要:
IIS在接到一个新的http请求后,最终会调用asp.net_isapi.dll的ISAPI扩展(特指IIS6.0环境,iis7.0的应用程序池默认为集成方式,相对有所变化),然后传递到httpRuntime Pipe(http运行时管道),Asp.Net这时才开始运行(即HttpRunTime是Asp.Net真正的入口),HttpRunTime会为每个asp.net应用自动创建一个HttpApplication的实例,而该实例中又包含以下属性:注1Application -->相当于传统意义上asp时代的application对象,通常用于定义一个asp.net应用的全局变量Conte 阅读全文
摘要:
Asp.Net中几种相似数据绑定标记符号的解释及用法1.<%#... %>是在绑定控件DataBind()方法执行时被执行,用于数据绑定如: <%# Container.DataItem("tit") %>2.<%= %>在程序执行时被调用,可以显示后台变量值,如: *.ASPx中: <%= aaa %>*.cs中: protected string aaa="姓名";3.<% %>内联代码块里面可以在页面文件*.ASPx或*.ascx文件里面嵌入后台代码,如:<% for(int i=0 阅读全文
摘要:
class Program { static void Main(string[] args) { double v1 = 123; double p1 = v1.zzzzz(); System.Console.WriteLine(p1); //-- double p2=(1234567890.123).zzzzz(); System.Console.WriteLine(p2); } } static class myExtension { public static double zzzzz(this double d) { return d/2 ; } } 阅读全文
摘要:
1:创建类型的设计模式(Creational Pattern) 是对类的实例化过程的抽象化,告知如何有效地进行一个类的实例化。这类的设计模式包含5种,分别是工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)、单键模式(Singleton)、建造模式(Builder)、原型模式(Prototype Pattern)。(1):工厂模式(Factory Method)工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。(2):抽象工厂模式(Abstract Factory)抽象工厂模式提 阅读全文
摘要:
事件原由:上午打开VS,到系统的登录界面,登录提示“BLL类型初始值设定项引发异常”,当一看到很是郁闷,昨天还运行的好好的,为啥今天一登录就会提示“BLL类型初始值设定项引发异常”呢,而且我的程序编译都很正常,看样我的程序在语该方法肯定是没错的,既然这样,那应该就在程序运行时出的错了。后来我想到我的程序中有个BLLBase类,该类是个“静态类”里面是一些从工厂得到的数据库访问层的对象,就是在执行登录时,要调用我的业务层(BLL)方法去执行我的登录判断,但是在业务层的类中又会通过我的BLLBase类去得到我的数据库访问层的对象:/// <summary> /// 用户登陆 /// & 阅读全文
摘要:
在我们设计数据库时,经常会遇到这样的问题,就是表中的某个是不固定的,随着用户需求的变化,该列可能会增加等问题, 就像上图中的灌溉方式:目前可能有三种灌溉方式,可是以后随着用户的需求增加,又会有新的灌溉方式,如:人工灌溉之类的,遇到此类问题,通常会有两种解决方案,一:新建一子表,该表结构大概如下:编号 渠灌 喷灌 水车 Class1 Class2 ......就是在建表时会首先预留几个列,为了以后的扩展用,这样的方案虽然简单,但是也会体现出下列几种问题,1:如果以后要新增个人工灌溉,那我们新增的人工灌溉如何与数据库中的列进行绑定?2:而且建表时会首先预留列也不好控制,到底预留几列才算合适。。。。 阅读全文
摘要:
不定字段数目的数据库表设计和数据结构可能采用四种技术:动态增加数据库表字段 预留足够的空白字段,运行时作动态影射 用xml格式保存在单字段里 改列为行,用另外一个表存放定制字段 现在我们来分析一下四种技术的优劣,不过首先可以排除的是第一点动态增加字段的方法,因为在实际操作时候几乎是不可能的(sqlserver太慢,oracle索性不支持),基本可以不讨论就排除。剩下后三点。先来讨论预留空白字段的方法,基本原理就是在数据库表设计的时候加入一些多余的字段,看下面的代码:CREATETABLESample(namevarchar(12),field0varchar(1),field1varchar( 阅读全文
摘要:
我有一个无比可恶的同窗,问了我一个非常好的问题,怎么样设计一个好的数据库,依据她这个问题,我愁闷了非常钟,而后在网上找到了下面的货色,有什么看法大家可以提出来,实在这个也是异常值得咱们程序员学习的.三克油~! 数据库设计(Database Design)是指对一个给定的应用环境,结构最优的数据库模式,建立数据库及其应用系统,使之可能有效地存储数据,知足各种用户的应用需求(信息要求和处理要求). 在数据库范畴内,超频,经常把使用数据库的各类系统统称为数据库应用系统. 一、数据库和信息系统 (1)数据库是信息系统的中心和基础,把信息系统中大量的数据按必定的模型组织起来,提供存储、维护、检索数据的. 阅读全文
摘要:
领导者说之无心,而群众却能听出你话里的弦外之音。因此,领导者一定要慎言,不该说的不说,不该讲的不能乱讲;要约束自己的言行,做到言必适时,言必适情,言必适度。 帝王君临天下,一言九鼎。帝王出言不慎,则会让臣子迷惑,误会帝王的意思,影响施政。君无戏言,帝王务必三思而后言。太宗心忧天下黎民,将对百姓是否有利,看作是慎言语的标准。 贞观二年,太宗对侍臣说:“朕每天坐朝,要想说出一句话,就要考虑这一句话是否对人民有益、对国家有益!朕,实在不敢多说话啊!” 掌管皇帝起居事务的杜正伦,为人忠诚正直,对国君的言行必定认真记录在《起居注》里,他向太宗进奏说:“陛下如果有一句话违背了天理,那么这句错话便会千秋万. 阅读全文
摘要:
笔者发现,人们对软件架构存在非常多的误解,其中一个最为普遍的误解就是:将架构和框架(Framework)混为一谈。本文阐述了它们的区别。算是对思辨成果的一个应用吧。 框架是一种特殊的软件,它并不能提供完整无缺的解决方案,而是为你构建解决方案提供良好的基础。框架是半成品。典型地,框架是系统或子系统的半成品;框架中的服务可以被最终应用直接调用,而框架中的扩展点是供应用开发人员定制的“可变化点”。 软件架构不是软件,而是关于软件如何设计的重要决策。软件架构决策涉及到如何将软件系统分解成不同的部分、各部分之间的静态结构关系和动态交互关系等。经过完整的开发过程之后,这些架构决策将体现在最终开发出的软件. 阅读全文
摘要:
//添加一列 DataColumn coal_type = new DataColumn("煤类别", typeof(System.String)); set_coalconsume.Tables[0].Columns.Add(coal_type); set_coalconsume.Tables[0].Columns["煤类别"].SetOrdinal(1); if (set_coalconsume!=null && set_coalconsume.Tables[0].Rows.Count>0) { foreach (DataRow 阅读全文
摘要:
假如dataset ds 里面已经存在了数据,当我们想在datatable中插入一列数据,可以用以下方法实现: ds.Tables[0].Columns.Add("star"); ds.Tables[0].Columns["star"].SetOrdinal(0); 这样“star”列就添加到datatable的第一列了 阅读全文
摘要:
1.__doPostBack("id","")方法 2.GetPostBackEventReference方法作用 3.客户端如何触发服务器端控件的事件 右边提供程序用此方法实现在客户端单击按钮后,禁用此按钮,直到程序运行完毕再开启按钮。(单击右边下载) 下面再举个小例子. 前台页面 有个服务器控件 <asp:Button id="Button1" runat="server" Text="Button"></asp:Button> 一个客户端控件用来触发服务器端 < 阅读全文
摘要:
在.NET中,所有的服务器控件提交到服务器的时候,都会调用__doPostBack这个函数,所以灵活运用这个函数对于我们的帮助还是很大的. 比如,在我们写程序的时候经常会需要动态的生成一些控件,最简单的方法就是通过一个字符串,比如string strButton = <input type =”button” ID=”button1”>,然后输出到页面,但是如果我们需要这个控件来执行一些服务器的功能,就比较困难了.这里我们就可以用过借用__doPostBack这个函数来完成.接下来我觉个例子来说明一下具体如何调用. 既然要在服务器端运行那么,我们可以声明一个不可见的LinkButt 阅读全文
摘要:
本文中,我们将借助http分析工具Fiddler,来对Response.Redirect()方法的整个流程进行剖析 首先在Visual Studio中新建一个网站,在Default页面的Page_Load事件中写下Response.Redirect("http://www.baidu.com"); 然后添加一个Page_LoadComplete事件处理方法。 最终效果如下: 在12和17行设置了断点,方便对整个过程进行观察。打开Fiddler,用以观察整个过程中的HTTP数据。 点击“调试”按钮 程序开始执行。这时Fiddler中出现了一条数据: 这是浏览器向http:// 阅读全文
摘要:
软件项目的估算历来是比较复杂的事,因为软件本身的复杂性、历史经验的可重复性、估算工具的缺乏以及一些人为错误,都会导致软件项目的估算往往和实际情况相差甚远。据有关机构调查发现,约有60%的软件项目的失败是因为估算偏差引起的,而不是因为技术实力不够。因此,估算偏差已被列为软件项目失败的四大原因之一。 从软件工程学上,我们知道软件需求和估算是软件项目的基础。因为只有准确的了解客户的需求,以之为基础,并使用科学的方法对目标软件系统的规模、工作量和进度做出合理的估算,我们才能在预算内按时按质顺利的完成项目。然而,软件估算作为软件项目的基础领域却常常被人们所忽视。我在近期的一个开发项目中就尝到忽视软件规. 阅读全文
摘要:
1、简述 ID是设计的时候自己所指定的ID,是我们分配给服务器控件的编程标识符,我们常常使用this.controlid来寻找控件,那么这个controlid就是这里所说的ID. ClientID是由ASP.Net生成的服务器控件得客户端标识符,当这个控件生成到客户端页面的时候,在客户端代码访问该控件时就需要通过ClientID来访问。 UniqueID 服务器控件的唯一的、分层的形式限定的标识符。 是当需要参与服务端回传的时候用的。当将控件放置到重复控件(Repeater、DataList和DataGrid)中时,将可能生成多个服务器端的控件,这就需要区分服务器端的各个控件,以使它们的 I. 阅读全文
摘要:
id是你在代码编写时给其赋的id属性,如果没有进行赋值,系统会自动生成一个名称,如:_ctlX,X是从0开始的递增的索引,范围是0~127 uniqueid是asp.net为每一个控件生成的真正的服务器端标识符 clientid是从uniqueid来的,不过将uniqueid中的$换成了_ 如果控件的命名容器为宿主页,则uniqueid与id相同,否则uniqueid为命名容器id+$+自己的id 客户端的id是由uniqueid生成的,一定不要把服务端id属性与生成客户端的id搞混了! 阅读全文
摘要:
C#中NameValueCollection类用法详解,1.NameValueCollection类集合是基于 NameObjectCollectionBase 类。 但与 NameObjectCollectionBase 不同,该类在一个键下存储多个字符串值(就是键相同,值就连接起来如下例子)。该类可用于标头、查询字符串和窗体数据。 每个元素都是一个键/值对。NameValueCollection 的容量是 NameValueCollection 可以保存的元素数。 NameValueCollection 的默认初始容量为零。随着向 NameValueCollection 中添加元素,容量. 阅读全文
摘要:
方法1: C# Label1.Text = Request.Form["txtName"].ToString(); vb.net Request.Form("txtName").ToString() 方法2: C# System.Collections.Specialized.NameValueCollection nc = new System.Collections.Specialized.NameValueCollection(Request.Form);Label1.Text = nc.GetValues("txtName") 阅读全文
摘要:
1.1 目的 为了保证企业编写出的程序都符合相同的规范,保证一致性、统一性而建立的数据库命名规范。 编码规范对于程序员而言尤为重要,有以下几个原因: 1. 一个项目的生命周期中,80%的花费在于维护; 2. 几乎没有任何一个项目,在其整个生命周期中,均由最初的开发人员来维护; 3. 命名规范可以改善项目的可读性,可以让程序员尽快而彻底地理解新的代码; 4. 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,比如你已构建的其它任何产品。 为了执行规范,每个软件开发人员必须一致遵守编码规范。 1.2 范围 适合于本项目中编写的命名规则。 1.3 命名原则 1. 使名称足够长以便. 阅读全文
摘要:
1.排版 序号 总 则 条 款 说明 1.1 较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。 1.2 程序块要采用缩进风格编写,缩进的空格数为4个。 用空格缩进,不用Tab键! 1.3 相对独立的程序块之间、变量说明之后必须加空行。 1.4 若函数或过程中的参数较长,则要进行适当的划分。 Public Void Test(string 1,string 2, int 1,int 2) 1.5 避免在条件表达式内调用方法 实例:if(add(XXX)){} 建议:Bool flg = a 阅读全文
摘要:
英国历史学家诺思科特?帕金森以他深邃的思想直指这一现象的本质:“事情的增加是为了填满完成工作所剩的多余时间。”也就是说,工作会自动膨胀占满所有可用的时间。 帕金森曾以一个老太太花一整天时间为她的侄女寄一张明信片为例解释他所拟订的这一定律:花一个小时找那张明信片,一个小时找眼镜,半小时查地址,一个半小时写明信片,20分钟则是用来想到下一条街去寄信时是不是要带把伞。一个人只需要3分钟时间就能干完的事情,却让另一个人花了一整天来犹豫不决、担心、操劳,而且疲惫不堪。 在一件事情上花时间越多,耗精力越大,越能将事情做好吗?帕金森的回答是:“不。”恰恰相反,帕金森认为,一份工作所需要的资源与工作本身并没. 阅读全文
摘要:
每个人都可能会碰到这样的情况:一项任务需要在一定的时间期限内完成,而这样的任务对你来说可能是繁重的、有极大挑战性的。你有足够的热情去完成上司交给你的任务,但却感到无从下手,不知该采取什么样的办法啃掉这根“硬骨头”,有时甚至有被它压得喘不过气来的感觉,久而久之,大量的时间被浪费了而结果却不尽如人意,尽管你在这项任务上贡献了足够的精力。 这样的情况并不少见,原因归根到底在于不具备处理大的任务时的时间管理能力。如何培养这种能力?其实,从我们经常见到的嗑瓜子现象中就可以找到答案。 喜欢嗑瓜子的人会认同这样一个嗑瓜子的规律: 无论人们喜欢与否,很客易拿起第一颗瓜子; 一旦吃上第一颗,就会吃起第二颗、第. 阅读全文
摘要:
小时候,有一次帮母亲去菜园栽西红柿苗。我径直来到去年种过西红柿的那垄地前,正蹲下身子准备移栽时,母亲却制止我说:“今年可不能再种在这块地里了,咱们得换个地方。”她把我领到菜园西北角,说:“今年就让西红柿在这儿落户吧。”我很不理解,问道:“去年种过西红柿的那块地里用树枝搭的架子还在,今年接着种就不用再搭架子了,岂不是更方便吗?”母亲笑了笑说:“你不懂。西红柿如果连续种在同一块地里,就会生长不好,容易发生虫害,产量将大减,所以得一年挪一个地方。其实不仅仅是西红柿,还有花生、西瓜等其他作物也是这样。” 要取得西红柿的丰收,就不能把它连续种在同一个地方,舍弃原来那块已不再适宜的土壤。我们要想摘取人生. 阅读全文
摘要:
好员工不是天生的 在哈佛法学院,年级最后一名将被迫留级;在各种体育活动的预赛中,最后一名就意味着直接出局;在中国的房地产销售中,末位淘汰制已相当普通。那么,怎样才能避免这样的厄运出现在自己的生活里呢?答案是惟一的——成为最棒的员工。 在市场竞争越来越激烈的今天,管理者从公司的整体利益出发,不再按过去用人的标准来聘用和调整员工的岗位,他们需要的是那些能像大象一样脚踏实地的员工;是那些能运用正确的策略做事的员工;是那些能克服一切障碍,100%完成任务的员工;是那些像狼一样结成整体的员工;是那些能主动去做公司非常需要做的事的员工;是那些能“跳出盒子”思考问题的员工;是那些让每一天都成为杰作的员工;. 阅读全文
摘要:
“第一次就把事情做对”,这几乎是每个企业对员工最基本的要求。但在工作中,有时即使是最简单的工作,还是有人一再出错。比如,某广告公司的员工就犯过这样的一个错误,在为客户制作的宣传广告中,将客户的联系电话中的一个数字弄错了。当他们把制作的宣传单交给客户时,客户由于时间紧,第二天就要在产品新闻发布会上使用它,因此没有详细审核就接收了。直到新闻发布会结束后,在整理剩下的宣传单时,才发现关键的联系电话有错误,而这样的宣传单已发放了5000多份。 客户一怒之下,向广告公司要求巨额赔偿。由于错在己方,而且客户召开新闻发布会的费用的确巨大。无奈之下,广告公司只好按照客户的要求进行了赔偿。但事情并没有就此结束. 阅读全文
摘要:
毫无疑问,正直的品德是每一位员工必备的美德。对任何用人单位而言,他们不仅要求员工头脑敏锐、具有专业技能,更重要的是,还应具有正直的品格。小到一个单位,大到一个国家,人们真正需要是后者。 同样的道理,任何一个组织,要想具有竞争力、生命力,其管理者也必须是一个品德高尚的人。就像管理大师彼德?杜拉克所言:“优秀的管理者最重要的特征就是正直感。正直感不是一种单独的美德,而是所有美德的综合,美德决定了商业上的成功,使人们从商务行为本身获得了自由与幸福。” 如果仔细观察,我们就不难发现身边的那些成功者,他们大多都具有正直的品德,而一个道德败坏的人,即使因偶然因素获得成功,这种成功也不会太长久。 一次,美. 阅读全文
摘要:
在牛津高阶词典(第7版)中,架构(architecture)一词的解释是:the design an structure of a computer system。这个解释实际上已经描述了架构的本质:架构是关于怎么做(构成系统)的,而非做什么的。更进一步,架构是由人来设计实施,因此架构实际上是一个文化(culture)——我们怎么认识或理解系统/产品的,并且我们准备怎么做,在做的过程中我们认为什么是好的,什么是好的等等。任何系统都有架构,无论多小的系统都有。区别在于其架构是否是经过明确设计并表达。一个合理的架构无疑是经过精心设计和维护的,而进行架构设计,或者说定义/建立一个架构可以分为如下几. 阅读全文
摘要:
在软硬件系统总体架构设计完成之后,为保证架构设计的合理性、完整性和针对性,从根本上保证系统质量,降低成本及投资风险,需要对总体架构进行评估。 1、架构评估内容 (1)对软件的架构评估 对软件的架构评估,主要是根据具体的评估依据,看软件设计是否符合体系化设计原则;产品中所开发的软件是否易于升级,是否满足可扩展性强等要求。 (2)对硬件的架构评估 对硬件架构的评估,主要是根据具体的评估依据,看研发的系统是否尽量采用了低功率处理器和较少的功耗部件,是否满足低功耗的要求;系统是否具有较大的基础资源空间以及资源扩展空间(如程序指令空间,内部外部存储空间等);是否易于运维管理;研发产品的硬件是否易于升级. 阅读全文
摘要:
2 推荐一、软件体系结构和框架的定义 软件体系结构的英文单词是“architecture”. Architecture的基本词义是建筑、建筑学、建筑风格。 软件体系结构虽然根植于软件工程,但还处于一个研究发展的阶段,迄今为止还没有一个为大家所公认的定义。 《设计模式》中对框架的定义是框架就是一组相互协作的类,对于特定的一类软件,框架构成了一种可重用的设计。 软件框架是项目软件开发过程中提取特定领域软件的共性部分形成的体系结构,不同领域的软件项目有着不同的框架类型。框架的作用在于:由于提取了特定领域软件的共性部分,因此在此领域内新项目的开发过程中代码不需要从头编写,只需要在框架的基础上进行一些. 阅读全文