求救,架构和框架什么区别?

我只知道架构是抽象的,框架是具体的,有名的架构都有哪些呢?MVC是不是?框架呢?

一两句话很难说清楚,Struts之类都是属于实现了MVC模式的框架产品。

架构、框架、模式是一种从大到小的关系,也是一种组合关系。

架构一般针对一个行业或一类应用,是技术和应用完美的结合。

框架因为比较小,很多表现为中间件,框架一般是从技术角度解决同类问题,例如J道数据增删改查框架就解决了所有数据库系统中大量数据增删改查的功能开发,框架是从技术的横切面去解决实际应用问题。

模式则更小了,越小越灵活,可重用的范围更广。

一个框架可能使用了多个模式,而一个架构有可能应用了多个框架,这样一个大型系统的设计基本从主骨干到骨架基本能够被设计者考虑设计到,也可以想见,一个系统被细化成了很多工作量,例如一个部分细化到工厂模式,那么就可以要求程序员实现工厂模式的代码即可。

由此,控制了大型软件质量,也提高开发效率,同时使得项目变得易于管理和协同,由此可见,一个大型项目的架构设计非常重要。

那你觉得对与一个项目 我们是选择架构还是选择框架???

都有吧

我的理解是:

架构是动词,架构=设计
框架是名词,架构设计的产物可能会是框架

架构设计可以是从头开始做设计,也有可能是在一个现有的框架上进行的。

首先看一下架构(Architecture)和框架(Framework)的定义:

Architecture:
1. An underlying base or foundation especially for an organization or a system.

2. The art and science of designing and erecting buildings.

3. A style and method of design and construction:

4. Orderly arrangement of parts; structure:

Framework:

1. A structure for supporting or enclosing something else, especially a skeletal support used as the basis for something being constructed.

2. A fundamental structure, as for a written work or a system of ideas.

从以上的定义,应该可以这样理解:
架构是宏观上的。定义构成一个系统的各个组成部分。比如基于J2EE的三层架构:WEB层,应用中间层及数据层,从宏观上定义系统的各个组成部分。
框架是具体化的架构。用于细化整个架构或某一组成部分。如STRUTS是定义WEB层的框架。
具体到一个应用开发我们首先定义架构:基于.NET or J2EE,三层架构还是Client/Server. 然后基于选定的架构,确立系统框架。象banq所说,框架又可由多个design pattern实现

所以架构和框架一个广义,一个具体,共存于一个系统中

>那你觉得对与一个项目 我们是选择架构还是选择框架???
对于一个项目,架构、框架、模式都要选择,他们不是对立的,首先需要架构设计,在架构设计中,会选择一些框架,当然也可能直接使用到一些模式等。

板桥理解得最到位,架构对一个项目或者产品是最优先考虑的事情,其次有可能是框架和模式,其实也可以不用任何框架和模式。

谢谢!你啊真的让我对架构和框架有了明确的认识!其实我觉得现在好多人(至少我身边的人对他们多不是太了解)都不太了解,真该让他们看看。

大家对 “架构、框架、模式”说了不少,这些谈的都是理论知识,如果谁能够用具体例子来说明这些理论,我觉得大家的理解就能够更深一点,希望banq大哥能够对此贴用例子来跟大家交流交流。

可以看看大师级人物的相关论述。
http://www.brcommunity.com/zachman.php
不一定很贴题,但可以从其他角度理清概念。

南京人说的“大桥”和武汉人说的“大桥”肯定不是一回事,不过只要能解决问题就行,比如你在其中一个城市迷路了,问“大桥怎么走”时。

下面是我对框架/模型(Model)/架构的理解,主要从它们解决的问题来看:

框架――
在面对一个复杂的问题域时,既不能把所有问题都放在一起考虑,也不能只专注于局部而忽略上下文。这时我们需要框架来分类归纳问题域同时由不失整体的完整性。
比如复杂Web应用要分成WEB层,应用中间层及数据层。
框架是上层的,抽象的。

模型――
模式(Pattern)是现成的模型。
针对特定的一个比较独立的问题域时,比如WEB层。我们可以很容易套用一些现成的解决方法。用专家系统的话来说就是“用问题域去匹配(match)模式”。MVC就是一种解决WEB层的模式。
模型针对特定领域的。

*在Martin Fowler等人的《Patterns.Of.Enterprise.Application.Architecture》书中分层也是一种模式,所以...晕。

或者可以这么说:到底是模式或者框架,取决于我们面对问题所处的层次。在所处位置之上的可以称为框架,同层次的是模型。

架构 ――
对于问题域(深度和完整性)的所有具体的框架和模型的集合,就是架构吗?
不一定是,架构必须有以下特性:Reusability, interoperability, flexibility, adaptability。
否则就是具体的软件产品,因为它不可重用,或是孤立的,或者不能适应一定范围内的需求变化。

―― 第一次来J道,觉得挺不错。 :-) ――

Architecture 和技术的关联并不大,主要说明了整个软件(或硬件)体系的内容和方面。
Framework 则是根据需求而制定的纯技术方面的实现支持了。Framework就是控制container 的技术规范。

this container是把很多业务组件按照一定的规则归纳到一起的一个咚咚

至于这个规则嘛,那就是framework了,如何管理container,以及如何让container组织components 协同工作,等等。

接触这方面不深,请多多指正

刚刚做完一个一个框架,我也来谈谈我的理解吧。

简单说来,框架应当包含设计重用和代码重用两层意思,并且提供一些扩展点(书上说得好象叫热点)及使用说明(cookbook)来实现框架的使用。比如继承一个SessionBean类并实现自己的业务逻辑,我们就是在使用J2EE框架。Struts也是相同,它定义并实现了Web层MVC的模式,ActionServlet类,Action类等之间的关系(设计重用及代码重用),我们通过继承Action和FormBean类来使用Struts.

模式简单说来就是一些Best Practice,他代表了一种设计重用。

而对于架构同意i_love_this_game的说法。

以我刚刚实现的分布式企业快速应用开发框架为例,我在J2EE框架的基础上根据以往设计经验定义了从UI到DB的整个结构,并为实现MVC模式、分布层分离、开发与产品无关(通过Command模式实现开发人员不用写SessionBean)等等设计思想,采用了许多如设计模式来实现(就好像Struts实现MVC)。系统提供了许多如权限、工作流等常用服务的缺省实现(就好像J2EE提供JTA,JMS等服务),并提供接口让用户定制自己的服务模块。在框架的使用上,定义了一系列扩展点来让用户扩展,这样程序员就不用关心调用关系(包含刚才一些问题的实现)等而只用关心编写业务逻辑(一些Action类)来实现快速开发。

另外还要谈谈组件,它应当只包含代码重用。

架构定义了系统是如何组织的,并不关心具体的问题域

而框架是架构在某一问题域的具体化,更关注的是可重用性。在该问题域内,只需要扩展框架的可扩展部分,就可以适应新的变化。比如说,MVC是一个架构,而Struts是一个MVC框架。