A. 手机APP软件,属于C/S架构么
不全属于C/S架构,手机APP软件除了C/S架构,还有单机版APP,B/S架构等类型的APP。
在C/S结构中,应用程序分为两部分:服务器部分和客户机部分。服务器部分是多个用户共享的信息与功能,执行后台服务。典型的如一些聊天APP,视频APP等就是作为本地客户机,与服务器端进行信息交流、请求等,属于典型的C/S结构。
B/S架构中,客户机上只要安装一个浏览器,如Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。手机中就有许多浏览器应用,是属于B/S架构的。当然手机中还有一些单机版游戏等应用。
(1)app逻辑架构是什么扩展阅读:
C/S和B/S的比较:
1、硬件环境的比较:
CS建立在局域网的基础上,局域网之间再通过专门服务器提供连接和数据交换服务。在CS结构中,客户机和服务器都需要处理数据任务,这就对客户机的硬件提出了较高的要求。BS结构建立在广域网之上,不必配备专门的网络硬件环境。
2、系统维护 、 升级的比较
CS结构中的每一个客户机都必须安装和配置相关软件,如操作系统、客户端软件等。BS结构中每一个客户端只需通过浏览器便可进行各种信息的处理,而不需要安装客户端软件,维护、升级等几乎所有的工作都在服务器端进行,如果系统需要升级,只需要将升级程序安装在服务器端即可。
B. 什么是软件架构
软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。
C. app产品经理怎么构架app产品
“如何构架一个app”,更具体的问题应该是“如何发现一个需求,并构思一个产品为app的解决方案”。具体的策略是大胆假设,小心求证。何谓大胆假设?首先要有一双敏锐发现需求和痛点的眼睛。通过观察生活,观察业界发现,发现某些人群的某些痛点,某种需求未得到满足。若被你发现了,那么你有没有灵光一现,想到某种颠覆性的解决方式?如果你的想法只是“更好”,那么我建议你再想想,或者放弃这个领域,再去发现其他的需求。 要知道,能打败瑞星杀毒的,不是更好的瑞星杀毒,而是免费的360杀毒;能打败诺基亚的,不是摄像头像素更高,速度更快,外壳更炫的诺基亚,而是一个全方位革命的iPhone。OK,现在你发现一个切实的需求,并且你的想法是“不同”,而不是更好,那么接下来可以把这个需求,现有的痛点和你的解决方案一并列出来。然后跟你的同行、同伴详细交流简单用常识验证一下。这个时候你可能会发现你的解决方案有一些微妙的不妥当的地方(如果你没有这个感觉,也许是你太相信自己了)。往深里想,其实是因为里面包括了一些假设,一些未验证的假设。举个例子,陌陌的想法构思的时候,唐岩肯定有考虑过以下几个假设:年轻人(目标人群)都有认识陌生人的需求。年轻人(目标人群)把自己的照片和其他信息给陌生人看,并感到安全。年轻人更愿意跟附近的陌生人进行交流,进而把关系引到线下。唐岩在思考这些问题的时候,先是从自身出发,从自己开始,假设这些前提都被证实下,陌陌这个产品是可以做起来的。如何小心求证?在你提出一些假设后,可以做一些小规模的访谈,直接寻找你的目标用户,进行直接的沟通。如果你的想法得到验证,可以进一步做较大规模的问卷调查。切记,此刻不可故意引导用户倾向你的方案,或想当然,以为自己的假设就是现实情况。不然到最后直到你把产品做出来之后,才发现原来假设都不成立,你的所谓的好痛的痛点都是痒痒而已,你说的刚需都是伪需求。如果你能认真地做到这一步,目标群众的客观调查得出一个统计结果中有60%以上倾向你的原始想法,初步地验证了你的假设。那么你可以继续下一步,思考这个产品是否以App的方案去实现最好:我接触过的很多人,构想出什么产品,都想做成一个App,而不思考下App是否一个最佳的产品实现方式,或者一个试错的方式。App适合怎么样的使用场景?高性能要求的应用环境。高频次的启动和使用要求。交互逻辑复杂的应用。对网络要求较低,或使用App能大幅降低流量使用的。做一个App和做一个移动网站,它的成本是差很多倍的,我见到有人说他要做修水管通马桶的App,那么问题最明显的是第二条,一个修水管和马桶的O2O App,我可能一年都用不到一次,那为何我要装一个一年启动还不一定多于一次的App呢?现在各种实现方案这么丰富,微信公众号已经可以解决很多问题了,为什么还要为两个平台写App?如果审问过这些问题,认为还是要做一个App的话,如果你是老板,那么再思考以下几点:市场分析。思考这个市场是否能支撑你的产品成长,以及这个市场现在竞争对手有哪些,你的产品能从哪些方面切入这个市场的边缘?毕竟边缘的成功率有37%,而正面突击的成功率只有6%。商业模式。你这产品以后如何盈利?要思考是否会掉进“拼命做用户,最后无法变现”的墨迹天气式怪圈?推 广。你拼死拼活,最终发布了一个App之后,如果它没有爆红,那么你只做到了这个产品的10%。那么接下来如何推广呢?它是需要爆红才能成长起来的脸萌, 还是硬推,花钱买用户都能产生价值的美团?那么如果是后者,是否有足够的资金推动这个App?说到底,就是这个行业,这个产品,是创意推动型,还是资金推 动型,你们的团队是否有足够的相关资源去完成这个项目。所有问题都想清楚了的话,请集合力量尽快去完成你的App的第一版。如果你是一个老板下面的PM,你需要针对上面的问题写一份BRD(Business Requirement Document),进而说服他。至于如何画原型,先用纸画草图,再用Axure再细化,把交互做一下,就可以了,不要搞一些花哨的高保真。
D. 软件架构和系统架构的区别是什么
不同的架构方法论,会将架构分为不同视图,每个视图侧重某一个方面、领域的问题。比如希赛推的ADMEMS架构体系,分为以下几种视图:1. 数据架构:描述数据的存储结构、格式等方面。2. 物理架构:描述机器的物理部署、网络拓扑方面。3. 运行架构:描述运行期线程、进程间的交互工作机制。4. 逻辑架构:指如何将代码分成不同模块、组件,以及之间的职责分配、交互行为。5. 开发架构:主要指开发工具的选择,程序单元的划分,开发管理规范流程等方面。例如分为哪些工程、项目,源代码管理,自动化编译构建、测试、部署等。目前国际上运用比较广泛的是TOGAF架构体系,他把架构分为业务架构、数据架构、应用架构、技术架构等几个方面。想详细的了解这些架构视图,可以参考这些架构体系相关的书、资料。另外有很多人无缘无故的抨击架构概念,不知道是出于调侃还是无知。埃及的金字塔、神庙的建设,不是几个平常的泥瓦匠聚在一起就能够造出来的。像SAP、Oracle ERP,国内的金蝶等大规模的系统,以及空间站、火箭的控制系统等,没有系统性的架构方法、规范、流程,结果只能是悲剧。当规模、复杂度没有达到一定程度,比如在一些小的团队、产品中,架构过程可能融入到老板、经理、组长、资历较深的一些开发者中,融入在大家的日常工作中,以至于感觉不到架构的存在。就算遇到一些问题,因规模不大、复杂度不高,也比较容易调整。当这些前提条件发生变化时,架构的作用和必要性就逐步的体现出来。总的来说,一说到架构,如果懂软件,那么会了解为一个软件系统,这个软件设计的组成结构,如哪些是基础支持组件,哪些是完成A业务,哪些完成B业务……但说道企业架构的时候,就会问,该企业架构的几个架构如业务架构、数据架构、业务架构、技术架构,以及如何链接在一起。倒觉得,一个企业确实需要这样的架构,但不要神话它,最主要的是业务如何最终体现到软件中和流程中。而采取分离式设计时,最容易的错误就是各自为政,集成困难。那么以数据为中心的架构设计,会自然提供集成的基础。提到过,企业最重要的资产是数据,甚至不是信息,是数据。企业的业务流程会变,IT系统会变,所需要的信息与知识会变,唯有数据能够积淀下来。这有点象自然演进,考古那种,啥都
E. 如何设计app的架构
想要设计App的整体框架,首先要清楚我们做的是什么
一般我们与网络交互数据的方式有两种:主动请求(http),长连接推送
结合网络交互数据的方式来说一下我们开发的App的类型和特点:
数据展示类型的App:特点是页面多,需要频繁调用后端接口进行数据交互,以http请求为主;推送模块,IM类型App的IM核心功能以长连接为主,比较看重电量、流量消耗。
手机助手类App:主要着眼于系统API的调用,达到辅助管理系统的目的,网络调用的方式以http为主。
游戏:一般分为游戏引擎和业务逻辑,业务脚本化编写,网络以长连接为主,http为辅。
一般我们做的App都是类型1,简要来说这类app的主要工作就是
把服务端的数据拉下来给用户展示
把用户在客户端修改的数据上传给服务端处理
所以这类App的网络调用相当频繁,而且需要考虑到网络差,没网络等情况下,App的运行,成熟的商业应用的网络调用一般是如下流程:
UI发起请求 – 检查缓存 – 调用网络模块 – 解析返回JSON / 统一处理异常 – JSON对象映射为Java对象 – 缓存 – UI获取数据并展示
这之中可以看到很明显职责划分,即:数据获取;数据管理;数据展示
确定了职责,就可以进入正题了
1. 传统的Android App架构
Android最原生也是最基础的架构,可以理解为MVC,Controller即是Activity和Fragment,但是这两者掌握了Android系统中绝大多数的资源,并且在内部直接控制View,因此传统的Android App一般是以Activity和Fragment为核心,将网络模块,数据库管理模块,文件管理模块,常用工具类等分离成若干工具类包,供Activity和Fragment使用。
F. 什么是软件构架
软件架构 软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。 软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。 软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。 在“软件构架简介”中,David GArlan 和 Mary Shaw 认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。”[GS93] 但构架不仅是结构;IEEE Working Group on Architecture 把其定义为“系统在其环境中的最高层概念”[IEEE98]。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。 在 Rational Unified ProcESs 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。 从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来事实和管理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。 是一般而言,软件系统的架构(ArchitECture)有两个要素: ·它是一个软件系统从整体到部分的最高层次的划分。 一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。 详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(TASk-flow)。所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。 ·建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。 在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。 历史 早在1960年代,诸如E·W·戴克斯特拉就已经涉及软件架构这个概念了。自1990年代以来,部分由于在 Rational Software Corporation 和MiCROSoft内部的相关活动,软件架构这个概念开始越来越流行起来。 卡内基梅隆大学和加州大学埃尔文分校在这个领域作了很多研究。卡内基·梅隆大学的Mary Shaw和David Garlan于1996年写了一本叫做 Software Architecture perspective on an emerging DIscipline的书,提出了软件架构中的很多概念,例如软件组件、连接器、风格等等。 加州大学埃尔文分校的软件研究院所做的工作则主要集中于架构风格、架构描述语言以及动态架构。 计算机软件的历史开始于五十年代,历史非常短暂,而相比之下建筑工程则从石器时代就开始了,人类在几千年的建筑设计实践中积累了大量的经验和教训。建筑设计基本上包含两点,一是建筑风格,二是建筑模式。独特的建筑风格和恰当选择的建筑模式,可以使一个独一无二。 下面的照片显示了中美洲古代玛雅建筑,Chichen-Itza大金字塔,九个巨大的石级堆垒而上,九十一级台阶(象征着四季的天数)夺路而出,塔顶的神殿耸入云天。所有的数字都如日历般严谨,风格雄浑。难以想象这是石器时代的建筑物。 图1、位于墨西哥Chichen-Itza(在玛雅语中chi意为嘴chen意为井)的古玛雅建筑。(摄影:作者) 软件与人类的关系是架构师必须面对的核心问题,也是自从软件进入历史舞台之后就出现的问题。与此类似地,自从有了建筑以来,建筑与人类的关系就一直是建筑设计师必须面对的核心问题。英国首相丘吉尔说,我们构造建筑物,然后建筑物构造我们(We shape our buildings, and afterwaRDS our buildings shape us)。英国下议院的会议厅较狭窄,无法使所有的下议院议员面向同一个方向入座,而必须分成两侧入座。丘吉尔认为,议员们入座的时候自然会选择与自己政见相同的人同时入座,而这就是英国政党制的起源。Party这个词的原意就是"方"、"面"。政党起源的关键就是建筑物对人的影响。 在软件设计界曾经有很多人认为功能是最为重要的,形式必须服从功能。与此类似地,在建筑学界,现代主义建筑流派的开创人之一Louis Sullivan也认为形式应当服从于功能(FORMs follows function)。 几乎所有的软件设计理念都可以在浩如烟海的建筑学历史中找到更为遥远的历史回响。最为著名的,当然就是模式理论和XP理论。 架构的目标是什么 正如同软件本身有其要达到的目标一样,架构设计要达到的目标是什么呢?一般而言,软件架构设计要达到如下的目标: ·可靠性(Reliable)。软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠。 ·安全行(Secure)。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。 ·可扩展性(SCAlable)。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。 ·可定制化(CuSTomizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。 ·可扩展性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展 ·可维护性(MAIntainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费 ·客户体验(Customer Experience)。软件系统必须易于使用。 ·市场时机(Time to Market)。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。 架构的种类 根据我们关注的角度不同,可以将架构分成三种: ·逻辑架构、软件系统中元件之间的关系,比如用户界面,数据库,外部系统接口,商业逻辑元件,等等。 比如下面就是笔者亲身经历过的一个软件系统的逻辑架构图 图2、一个逻辑架构的例子 从上面这张图中可以看出,此系统被划分成三个逻辑层次,即表象层次,商业层次和数据持久层次。每一个层次都含有多个逻辑元件。比如WEB服务器层次中有HTML服务元件、Session服务元件、安全服务元件、系统管理元件等。 ·物理架构、软件元件是怎样放到硬件上的。 比如下面这张物理架构图描述了一个分布于北京和上海的分布式系统的物理架构,图中所有的元件都是物理设备,包括网络分流器、代理服务器、WEB服务器、应用服务器、报表服务器、整合服务器、存储服务器、主机等等。 图3、一个物理架构的例子 ·系统架构、系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等。 系统架构的设计要求架构师具备软件和硬件的功能和性能的过硬知识,这一工作无疑是架构设计工作中最为困难的工作。 此外,从每一个角度上看,都可以看到架构的两要素:元件划分和设计决定。 首先,一个软件系统中的元件首先是逻辑元件。这些逻辑元件如何放到硬件上,以及这些元件如何为整个系统的可扩展性、可靠性、强壮性、灵活性、性能等做出贡献,是非常重要的信息。 其次,进行软件设计需要做出的决定中,必然会包括逻辑结构、物理结构,以及它们如何影响到系统的所有非功能性特征。这些决定中会有很多是一旦作出,就很难更改的。 根据作者的经验,一个基于数据库的系统架构,有多少个数据表,就会有多少页的架构设计文档。比如一个中等的数据库应用系统通常含有一百个左右的数据表,这样的一个系统设计通常需要有一百页左右的架构设计文档。 构架描述 为了讨论和分析软件构架,必须首先定义构架表示方式,即描述构架重要方面的方式。在 Rational Unified Process 中,软件构架文档记录有这种描述。 构架视图 我们决定以多种构架视图来表示软件构架。每种构架视图针对于开发流程中的涉众(例如最终用户、设计人员、管理人员、系统工程师、维护人员等)所关注的特定方面。 构架视图显示了软件构架如何分解为构件,以及构件如何由连接器连接来产生有用的形式 [PW92],由此记录主要的结构设计决策。这些设计决策必须基于需求以及功能、补充和其他方面的约束。而这些决策又会在较低层次上为需求和将来的设计决策施加进一步的约束。 典型的构架视图集 构架由许多不同的构架视图来表示,这些视图本质上是以图形方式来摘要说明“在构架方面具有重要意义”的模型元素。在 Rational Unified Process 中,您将从一个典型的视图集开始,该视图集称为“4+1 视图模型”[KRU95]。它包括: 用例视图:包括用例和场景,这些用例和场景包括在构架方面具有重要意义的行为、类或技术风险。它是用例模型的子集。 逻辑视图:包括最重要的设计类、从这些设计类到包和子系统的组织形式,以及从这些包和子系统到层的组织形式。它还包括一些用例实现。它是设计模型的子集。 实施视图:包括实施模型及其从模块到包和层的组织形式的概览。 同时还描述了将逻辑视图中的包和类向实施视图中的包和模块分配的情况。它是实施模型的子集。 进程视图:包括所涉及任务(进程和线程)的描述,它们的交互和配置,以及将设计对象和类向任务的分配情况。只有在系统具有很高程度的并行时,才需要该视图。在 Rational Unified Process 中,它是设计模型的子集。 配置视图:包括对最典型的平台配置的各种物理节点的描述以及将任务(来自进程视图)向物理节点分配的情况。只有在分布式系统中才需要该视图。它是部署模型的一个子集。 构架视图记录在软件构架文档中。您可以构建其他视图来表达需要特别关注的不同方面:用户界面视图、安全视图、数据视图等等。对于简单系统,可以省略 4+1 视图模型中的一些视图。 构架重点 虽然以上视图可以表示系统的整体设计,但构架只同以下几个具体方面相关: 模型的结构,即组织模式,例如分层。 基本元素,即关键用例、主类、常用机制等,它们与模型中的各元素相对。 几个关键场景,它们表示了整个系统的主要控制流程。 记录模块度、可选特征、产品线状况的服务。 构架视图在本质上是整体设计的抽象或简化,它们通过舍弃具体细节来突出重要的特征。在考虑以下方面时,这些特征非常重要: 系统演进,即进入下一个开发周期。 在产品线环境下复用构架或构架的一部分。 评估补充质量,例如性能、可用性、可移植性和安全性。 向团队或分包商分配开发工作。 决定是否包括市售构件。 插入范围更广的系统。 构架模式 构架模式是解决复发构架问题的现成形式。构架框架或构架基础设施(中间件)是可以在其上构建某种构架的构件集。许多主要的构架困难应在框架或基础设施中进行解决,而且通常针对于特定的领域:命令和控制、MIS、控制系统等等。 构架模式示例 [BUS96] 根据构架模式最适用的系统的特征将其分类,其中一个类别处理更普遍的结构问题。下表显示了 [BUS96] 中所提供的类别和这些类别所包含的模式。 类别 模式 结构 层 管道和过滤器 黑板 分布式系统 代理 交互系统 模型-视图-控制器 表示-抽象-控制 自适应系统 反射 微核 软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。 在“软件构架简介”中,David Garlan 和 Mary Shaw 认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。”[GS93] 但构架不仅是结构;IEEE Working Group on Architecture 把其定义为“系统在其环境中的最高层概念”[IEEE98]。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。 在 Rational Unified Process 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。 为阐明其含义,下面将详述其中的两个;完整说明请参见 [BUS96]。模式以下列广泛使用的形式来表示: 模式名 环境 问题 影响,描述应考虑的不同问题方面 解决方案 基本原理 结果环境 示例 模式名 层 环境 需要进行结构分解的大系统。 问题 必须处理不同抽象层次的问题的系统。例如:硬件控制问题、常见服务问题和针对于不同领域的问题。最好不要编写垂直构件来处理所有抽象层次的问题。否则要在不同的构件中多次处理相同的问题(可能会不一致)。 影响 系统的某些部分应当是可替换的 构件中的变化不应波动 相似的责任应归为一组 构件大小 — 复杂构件可能要进行分解 解决办法 将系统分成构件组,并使构件组形成层叠结构。使上层只使用下层(决不使用上层)提供的服务。尽量不使用非紧邻下层提供的服务(不跳层使用服务,除非中间层只添加通过构件)。 示例: 1. 通用层 严格的分层构架规定设计元素(类、构件、包、子系统)只能使用下层提供的服务, 服务可以包括事件处理、错误处理、数据库访问等等。 相对于记录在底层的原始操作系统级调用,它包括更明显的机制。 2. 业务系统层 上图显示了另一个分层示例,其中有垂直特定应用层、水平层和基础设施层。注意:此处的目标是采用非常短的业务“烟囱”并实现各种应用程序间的通用性。 否则,就可能有多个人解决同一问题,从而导致潜在的分歧。 有关该模式的深入讨论,请参见指南:分层。 模式名 黑板 环境 没有解决问题的确定方法(算法)或方法不可行的领域。例如 AI 系统、语音识别和监视系统。 问题 多个问题解决顾问(知识顾问)必须通过协作来解决他们无法单独解决的问题。各顾问的工作结果必须可以供所有其他顾问访问,使他们可以评估自己是否可以参与解决方案的查找并发布其工作结果。 影响 知识顾问参与解决问题的顺序不是确定的,这可能取决于问题解决策略 不同顾问的输入(结果或部分解决方案)可能有不同的表示方式 各顾问并不直接知道对方的存在,但可以评估对方发布的工作 解决办法 多名知识顾问都可访问一个称为“黑板”的共享数据库。黑板提供监测和更新其内容的接口。控制模块/对象激活遵循某种策略的顾问。激活后,顾问查看黑板,以确定它是否能参与解决问题。如果顾问决定它可以参与,控制对象就可以允许顾问将其部分(或最终)解决方案放置于黑板上。 示例: 以上显示了使用 UML 建模的结构或静态视图。 它将成为参数化协作的一部分,然后会绑定到实参上对模式进行实例化。 构架风格 软件构架(或仅是构架视图)可以具有名为构架风格的属性,该属性减少了可选的形式,并使构架具有一定程度的一致性。样式可以通过一组模式或通过选择特定构件或连接器作为基本构件来定义。对给定系统,某些样式可作为构架描述的一部分记录在构架风格指南(Rational Unified Process 中设计指南文档的一部分)中。样式在构架的可理解性与完整性方面起着主要的作用。 构架设计图 构架视图的图形描述称为构架设计图。对于以上描述的各种视图,设计图由以下统一建模语言图组成 [UML99]: 逻辑视图:类图、状态机和对象图。 进程视图:类图与对象图(包括任务 – 进程与线程)。 实施视图:构件图。 部署视图:配置图。 用例视图:用例图描述用例、主角和普通设计类;顺序图描述设计对象及其协作关系。 构架设计流程 在 Rational Unified Process 中,构架主要是分析设计工作流程的结果。当项目再次进行此工作流程时,构架将在一次又一次迭代中不断演化、改进、精炼。由于每次迭代都包括集成和测试,所以在交付产品时,构架就相当强壮了。构架是精化阶段各次迭代的重点,构架的基线通常会在此阶段结束时确定。 架构师 软体设计师中有一些技术水平较高、经验较为丰富的人,他们需要承担软件系统的架构设计,也就是需要设计系统的元件如何划分、元件之间如何发生相互作用,以及系统中逻辑的、物理的、系统的重要决定的作出。 这样的人就是所谓的架构师(Architect)。在很多公司中,架构师不是一个专门的和正式的职务。通常在一个开发小组中,最有经验的程序员会负责一些架构方面的工作。在一个部门中,最有经验的项目经理会负责一些架构方面的工作。 但是,越来越多的公司体认到架构工作的重要性,并且在不同的组织层次上设置专门的架构师位置,由他们负责不同层次上的逻辑架构、物理架构、系统架构的设计、配置、维护等工作。参考资料:http://www.itise.com/phrase/200602281452595.html
G. 软件的架构与设计模式之什么是架构
一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。具体地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)。所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。·建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行具体设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。计算机软件的历史开始于五十年代,历史非常短暂,而相比之下建筑工程则从石器时代就开始了,人类在几千年的建筑设计实践中积累了大量的经验和教训。建筑设计基本上包含两点,一是建筑风格,二是建筑模式。独特的建筑风格和恰当选择的建筑模式,可以使一个独一无二。下面的照片显示了中美洲古代玛雅建筑,Chichen-Itza大金字塔,九个巨大的石级堆垒而上,九十一级台阶(象征着四季的天数)夺路而出,塔顶的神殿耸入云天。所有的数字都如日历般严谨,风格雄浑。难以想象这是石器时代的建筑物。 图1、位于墨西哥Chichen-Itza(在玛雅语中chi意为嘴chen意为井)的古玛雅建筑。(摄影:作者)软件与人类的关系是架构师必须面对的核心问题,也是自从软件进入历史舞台之后就出现的问题。与此类似地,自从有了建筑以来,建筑与人类的关系就一直是建筑设计师必须面对的核心问题。英国首相丘吉尔说,我们构造建筑物,然后建筑物构造我们(We shape our buildings, and afterwards our buildings shape us)。英国下议院的会议厅较狭窄,无法使所有的下议院议员面向同一个方向入座,而必须分成两侧入座。丘吉尔认为,议员们入座的时候自然会选择与自己政见相同的人同时入座,而这就是英国政党制的起源。Party这个词的原意就是"方"、"面"。政党起源的要害就是建筑物对人的影响。在软件设计界曾经有很多人认为功能是最为重要的,形式必须服从功能。与此类似地,在建筑学界,现代主义建筑流派的开创人之一Louis Sullivan也认为形式应当服从于功能(Forms follows function)。几乎所有的软件设计理念都可以在浩如烟海的建筑学历史中找到更为遥远的历史回响。最为闻名的,当然就是模式理论和XP理论。架构的目标是什么正如同软件本身有其要达到的目标一样,架构设计要达到的目标是什么呢?一般而言,软件架构设计要达到如下的目标:·可靠性(Reliable)。软件系统对于用户的商业经营和治理来说极为重要,因此软件系统必须非常可靠。·安全行(Secure)。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。·可扩展性(Scalable)。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。 ·可定制化(Customizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。·可扩展性(Extensible)。在新技术出现的时候,一个软件系统应当答应导入新技术,从而对现有系统进行功能和性能的扩展·可维护性(Maintainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费·客户体验(Customer Experience)。软件系统必须易于使用。·市场时机(Time to Market)。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。架构的种类根据我们关注的角度不同,可以将架构分成三种:·逻辑架构、软件系统中元件之间的关系,比如用户界面,数据库,外部系统接口,商业逻辑元件,等等。比如下面就是笔者亲身经历过的一个软件系统的逻辑架构图 图2、一个逻辑架构的例子从上面这张图中可以看出,此系统被划分成三个逻辑层次,即表象层次,商业层次和数据持久层次。每一个层次都含有多个逻辑元件。比如WEB服务器层次中有Html服务元件、session服务元件、安全服务元件、系统治理元件等。·物理架构、软件元件是怎样放到硬件上的。比如下面这张物理架构图描述了一个分布于北京和上海的分布式系统的物理架构,图中所有的元件都是物理设备,包括网络分流器、代理服务器、WEB服务器、应用服务器、报表服务器、整合服务器、存储服务器、主机等等。 图3、一个物理架构的例子·系统架构、系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等。系统架构的设计要求架构师具备软件和硬件的功能和性能的过硬知识,这一工作无疑是架构设计工作中最为困难的工作。此外,从每一个角度上看,都可以看到架构的两要素:元件划分和设计决定。 首先,一个软件系统中的元件首先是逻辑元件。这些逻辑元件如何放到硬件上,以及这些元件如何为整个系统的可扩展性、可靠性、强壮性、灵活性、性能等做出贡献,是非常重要的信息。其次,进行软件设计需要做出的决定中,必然会包括逻辑结构、物理结构,以及它们如何影响到系统的所有非功能性特征。这些决定中会有很多是一旦作出,就很难更改的。根据作者的经验,一个基于数据库的系统架构,有多少个数据表,就会有多少页的架构设计文档。比如一个中等的数据库应用系统通常含有一百个左右的数据表,这样的一个系统设计通常需要有一百页左右的架构设计文档。 架构师软体设计师中有一些技术水平较高、经验较为丰富的人,他们需要承担软件系统的架构设计,也就是需要设计系统的元件如何划分、元件之间如何发生相互作用,以及系统中逻辑的、物理的、系统的重要决定的作出。这样的人就是所谓的架构师(Architect)。在很多公司中,架构师不是一个专门的和正式的职务。通常在一个开发小组中,最有经验的程序员会负责一些架构方面的工作。在一个部门中,最有经验的项目经理会负责一些架构方面的工作。但是,越来越多的公司体认到架构工作的重要性,并且在不同的组织层次上设置专门的架构师位置,由他们负责不同层次上的逻辑架构、物理架构、系统架构的设计、配置、维护等工作。