是基于什么c s架构用什么开发开发的吗

&&等java做网站开发使用什么框架做java web开发有三年多的时间了,一直用java都在做流程开发,所以大都使用ssh或ssi框架技术, 前段时时间突然有人找我做个网站,感觉用ssh或ssi框架有些太过笨重。有很多人说,做网站使用java不太理想,大都使用php技术。springMVC是最佳选择么?身边的人大都给政府和企业做网站。没有做网站开发的朋友,请有这方面经验的朋友出来讨论下。(像最代码网站、医院网站,新闻网站,不涉及到流程的,只是cms内容管理形式的或论坛形式的网站都用什么技术开发)&由编辑于 15:40:482个牛币所有回答列表(8)&LV1LAMP看网站类型,如果是对外发布的,求性价比,当然是lamp!比比皆是,效率高!扩展性强! 维护性强! 移植性强! 老多了,用下就知道了当然,如果你说你硬件资源相当厉害,用高硬件多钞票弥补性价比,用JAVA做对外发布型的网站也行,安全性得到提升,水能载舟亦能覆舟,JVM在这个时候给人的感觉就是如此。你还是放弃吧,目测163,移动,联通,银行用这个,市场上JAVA网站空间都不多见。&&LV4市场上讲:php做中小型企业网站比较合适,性价比高,java偏大型。性价比:很简单的php空间一年才几百块钱,而java空间一个月就得几百。语言方面:当然php和java都各领风骚,最主要看自己最擅长哪一种语言了,我也用过php一段时间,发现确实很难习惯其语法,所以最代码也是用java开发的。开发周期:java和php我觉得效率上php会好,但性能上java会比php会更占优势,当然这不是绝对的,只能说玩的好的语言不是问题。其他方面:如果客户坚持让你用php或java,那你还有的挑么?对于java web开发框架,主要有:1.S2SH(struts2+spring+hibernate)2.S2SM(struts2+spring+mybatis)3.SSH(spring mvc+spring+hibernate或struts+spring+hibernate)4.SSM(spring mvc+spring+mybatis)5.JSJ(javabean+servlet+jsp)我有做的一个,是用的spring mvc&+ spring&+ mybatis + freemarker,当然还有其他的一些技术,服务器用的阿里云,不过服务器反正是客户自己的费用不错学习中,谢谢!ssm现在比较多用topjfinal或许是这些cms中小型项目的选择,非常轻量正在学习中等等等等等等等等等等等等相关问答等完等等完等完完完完完等最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级&LV3暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友&主题:华为的麒麟处理器还是基于ARM 架构,能算自主研发吗?
泡网分: 15.856
帖子: 5107
注册: 2008年07月
好像还必须跟着ARM 的进程改良,什么A7.A15 之类的,那能算自主研发的CPU 芯片吗?
微信扫一扫分享
&浏览:10100&&回帖:112 &&
泡网分: 1.56
帖子: 1546
注册: 2014年09月
只爱民族货 发表于
这种本来到下游没有技术含量了。都不算自主研发,没有核心技术,都是拿ARM的授权IP内核加壳的。
用ARM技术研发CPU的嵌入式芯片厂家,10年前国内就有8家了,比如东南大学的东芯处理器等。。不算什么高科技东西。第一个问题,从哪里算是下游?
第二个问题,AMD的cpu是什么基础架构
自己都逻辑不清语句不明何苦跟人较真呢。
泡网分: 20.8
帖子: 1401
注册: 2005年09月
ARM CortexA-72
泡网分: 39.301
帖子: 6006
注册: 2004年08月
只爱民族货 发表于
强词夺理:
是不是自主研发CPU是很关键的你有没有核心技术?????CPU全球除了英特尔、AMD、ARM公司外,其他都没有自主研发能力,都是用他们的技术授权加壳生产封装片子而已。你必须要承认的事实。别扯远了,逃避解决不了问题。好吧。
ARM架构,好像是英国人开发的吧?
泡网分: 0.048
注册: 2015年03月
eraserflying 发表于
好像还必须跟着ARM 的进程改良,什么A7.A15 之类的,那能算自主研发的CPU 芯片吗?这种本来到下游没有技术含量了。都不算自主研发,没有核心技术,都是拿ARM的授权IP内核加壳的。
用ARM技术研发CPU的嵌入式芯片厂家,10年前国内就有8家了,比如东南大学的东芯处理器等。。不算什么高科技东西。
泡网分: 0.048
注册: 2015年03月
wszheng 发表于
美国的阿帕奇还是基于中国的竹蜻蜓,能算自主研发吗?强词夺理:
是不是自主研发CPU是很关键的你有没有核心技术?????CPU全球除了英特尔、AMD、ARM公司外,其他都没有自主研发能力,都是用他们的技术授权加壳生产封装片子而已。你必须要承认的事实。别扯远了,逃避解决不了问题。
泡网分: 4.908
帖子: 5768
注册: 2014年04月
inmark 发表于
&仅仅是用中国的土地、水和电& 。。。。。。。你到底想说啥?
iPad iOS8.3 客户端发布
泡网分: 24.842
帖子: 4552
注册: 2005年05月
PowerPCG8 发表于
谁在转进?填当地啊。
中芯国际从全球接单子,再交付给全球。&仅仅是用中国的土地、水和电& 。。。。。。。
泡网分: 4.908
帖子: 5768
注册: 2014年04月
inmark 发表于
不停转进有意思?就问一个问题,中芯生产的dies或wafer拿去其他国家封测”产地“要填哪里?谁在转进?填当地啊。
中芯国际从全球接单子,再交付给全球。
泡网分: 24.842
帖子: 4552
注册: 2005年05月
PowerPCG8 发表于
中国的进出口货物原产地条例第三条规定,以最后完成实质性改变的国家(地区)为原产地。
进一步的解释你要去问海关。
个人理解,Intel在美国境内完成硅片生产,然后整个完成好的12英寸大晶圆出口到哥斯达黎加或者马来西亚(现在中国成都和上海似乎也有厂),在当地把大晶圆切割成一个一个的CPU裸片(称为die),之后封装成你看到的CPU。所以对于CPU这个产品而言产地就是马来西亚和哥斯达黎加。
我去参观考察过的某个厂家就是把自己的芯片设计磁带包装成某个民用产品的名字拿到中芯之类的商业代工厂流片,代工厂交货是六寸八寸的晶圆,自己回来切割封装测试。不停转进有意思?就问一个问题,中芯生产的dies或wafer拿去其他国家封测”产地“要填哪里?
泡网分: 4.908
帖子: 5768
注册: 2014年04月
inmark 发表于
海关、商检单位会关心马来西亚和哥斯达黎加是否具备设计CPU的能力吗?
马来西亚和哥斯达黎加会因为自家不能设计CPU 就禁止这类成品出口?中国的进出口货物原产地条例第三条规定,以最后完成实质性改变的国家(地区)为原产地。
进一步的解释你要去问海关。
个人理解,Intel在美国境内完成硅片生产,然后整个完成好的12英寸大晶圆出口到哥斯达黎加或者马来西亚(现在中国成都和上海似乎也有厂),在当地把大晶圆切割成一个一个的CPU裸片(称为die),之后封装成你看到的CPU。所以对于CPU这个产品而言产地就是马来西亚和哥斯达黎加。
我去参观考察过的某个厂家就是把自己的芯片设计磁带包装成某个民用产品的名字拿到中芯之类的商业代工厂流片,代工厂交货是六寸八寸的晶圆,自己回来切割封装测试。
泡网分: 20.8
帖子: 1401
注册: 2005年09月
inmark 发表于
有人说仅仅是用当地的土地、水和电就不算产地哦看怎么说了,地理概念上算,其他的就不好说了,PCG毕竟行内人,了解得更透彻一些。
泡网分: 24.842
帖子: 4552
注册: 2005年05月
CanonPro1 发表于
直接印顶盖上
有人说仅仅是用当地的土地、水和电就不算产地哦
泡网分: 24.842
帖子: 4552
注册: 2005年05月
PowerPCG8 发表于
你要去问海关和商检单位怎么规定产地的标签。想必你也不会认为马来西亚和哥斯达黎加具备设计CPU的能力吧?海关、商检单位会关心马来西亚和哥斯达黎加是否具备设计CPU的能力吗?
马来西亚和哥斯达黎加会因为自家不能设计CPU 就禁止这类成品出口?
泡网分: 20.8
帖子: 1401
注册: 2005年09月
inmark 发表于
那么问题来了,很多Fab也没生产你说的设备所在国也仅仅是提供土地、水和电而已,“产地”一栏该肿么填写直接印顶盖上
泡网分: 4.908
帖子: 5768
注册: 2014年04月
inmark 发表于
按照你的说法马来西亚也仅仅是提供土地、水和电而已有神马资格称之为”产地“...你要去问海关和商检单位怎么规定产地的标签。想必你也不会认为马来西亚和哥斯达黎加具备设计CPU的能力吧?
iPad iOS8.3 客户端发布
泡网分: 24.842
帖子: 4552
注册: 2005年05月
PowerPCG8 发表于
事情还比较复杂,有的厂家在A家流片,B家切割,C家封装,D家测试。
我反正不太关心这个。一般都是标记最后的封装测试地点吧。Intel很多CPU都是标着马来西亚。按照你的说法马来西亚也仅仅是提供土地、水和电而已有神马资格称之为”产地“
泡网分: 4.908
帖子: 5768
注册: 2014年04月
inmark 发表于
那么问题来了,很多Fab也没生产你说的设备所在国也仅仅是提供土地、水和电而已,“产地”一栏该肿么填写事情还比较复杂,有的厂家在A家流片,B家切割,C家封装,D家测试。
我反正不太关心这个。一般都是标记最后的封装测试地点吧。Intel很多CPU都是标着马来西亚。
泡网分: 24.842
帖子: 4552
注册: 2005年05月
PowerPCG8 发表于
对啊,半导体生产又不需要多少人手操作,全自动技术和设备都是国外买来的。中芯的技术好像来自IBM授权吧。那么问题来了,很多Fab也没生产你说的设备所在国也仅仅是提供土地、水和电而已,“产地”一栏该肿么填写
泡网分: 4.908
帖子: 5768
注册: 2014年04月
inmark 发表于
原来晶圆厂只需要土地、水和电,比富士康要求还低。。。。...对啊,半导体生产又不需要多少人手操作,全自动技术和设备都是国外买来的。中芯的技术好像来自IBM授权吧。
iPad iOS8.3 客户端发布
泡网分: 24.842
帖子: 4552
注册: 2005年05月
PowerPCG8 发表于
开曼群岛注册的代工厂而已。仅仅是用中国的土地、水和电。原来晶圆厂只需要土地、水和电,比富士康要求还低。。。。
泡网分: 4.908
帖子: 5768
注册: 2014年04月
inmark 发表于
高通有部分芯片转给中芯代工,妥妥的MIC开曼群岛注册的代工厂而已。仅仅是用中国的土地、水和电。
泡网分: 10.128
帖子: 2775
注册: 2010年07月
墨色曼珠沙华 发表于
至少不是made in china水果中国造如何?
泡网分: 24.842
帖子: 4552
注册: 2005年05月
墨色曼珠沙华 发表于
至少不是made in china高通有部分芯片转给中芯代工,妥妥的MIC
泡网分: 24.842
帖子: 4552
注册: 2005年05月
墨色曼珠沙华 发表于
苹果的处理器性能摆在那边,很强,尤其是GPU,华为自己造的处理器。。。。。。你敢相信它吗???水果的GPU 也是买别人设计。。。。。。
泡网分: 4.908
帖子: 5768
注册: 2014年04月
飞天白雪 发表于
你发的这条信息不知道通过了多少台华为设备的转发。然后呢?
泡网分: 27.77
帖子: 9175
注册: 2005年11月
墨色曼珠沙华 发表于
苹果的处理器性能摆在那边,很强,尤其是GPU,华为自己造的处理器。。。。。。你敢相信它吗???你发的这条信息不知道通过了多少台华为设备的转发。
泡网分: 4.908
帖子: 5768
注册: 2014年04月
马甲又如何 发表于
这么说,仍然是“清零,加,取反,左移,右移”中的加与移的组合运用,不过是用独立硬件加快运算而已。
还以为是啥新型的逻辑操作呢...那你不如说是与或非门的组合运用好了,不要说什么超前进位全加器是一堆门电路,连存储器其实也就是一堆触发器,触发器本质上都是门搭出来的。
iPad iOS8.3 客户端发布
泡网分: 0.704
注册: 2013年07月
PowerPCG8 发表于
仅就ARM而言,广泛应用的ARM7TDMI ,其中的M就是指硬件乘法器。现在连Cortex M4之类的核心都带乘法器。
SPARC V7中的乘法指令还是一个周期只做一位移位和乘法,到了1990年代的V8就开始有硬件乘法指令和乘除法器。
至于一些DSP,硬件实现高速乘加运算更是招牌手艺。其他什么一个周期完成1-32位移位的桶形移位器等等更不在话下。
反正现在一个芯片能做几十亿个晶体管,实现这些并不特别费事。
其他领域的例子,GPS系统的最底层是伪随机码和扩频通信,以前是用一串规定的多级反馈移位寄存器实现伪随机码产生,现在都是直接把码写到ROM里调用。这么说,仍然是“清零,加,取反,左移,右移”中的加与移的组合运用,不过是用独立硬件加快运算而已。
还以为是啥新型的逻辑操作呢
泡网分: 20.177
帖子: 4555
注册: 2007年01月
墨色曼珠沙华 发表于
至少不是made in china又如何?
本帖由安卓客户端发布
泡网分: 1.203
帖子: 1095
注册: 2011年11月
向前一镖 发表于
高通出了名高频低能,移动处理器中的奔腾4,你还当宝。至少不是made in china
&版权所有:&&&&BS架构_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
B/S结构即浏览器和结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端()实现,形成所谓三层3-tier结构。B/S结构是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如或,服务器安装、、或 等数据库。浏览器通过同数据库进行数据交互。 这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
BS架构优势与劣势
BS架构维护和升级
软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现、升级和共享。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。因此,维护和升级革命的方式是“瘦”客户机,“胖”。
BS架构成本与选择
大家都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置。但在上,windows并不是处于绝对的统治地位。软件的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux上即可,而且安全性高。所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为电脑不受影响,这就使得最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行。
BS架构负荷重
由于B/S架构管理软件只安装在端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。但是,应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。因此,许多单位都备有数据库,以防万一。
BS架构区别
BS架构C/S特点
又称或客户/模式。服务器通常采用高性能的PC、工作站或,并采用大型,如、、或 。客户端需要安装专用的客户端软件。
C/S的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:
而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。
客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。
对客户端的操作系统一般也会有限制。可能适应于Win98,但不能用于win2000或Windows XP。或者不适用于微软新的操作系统等等,更不用说、等。
Client/Server是建立在局域网的基础上的。Browser/Server是建立在的基础上的.。
1.硬件环境不同:C/S 一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门提供连接和数据交换服务。B/S 建立在广域网之上的, 不必是专门的网络硬件环境。例如电话上网,,租用设备.,信息管理,有比C/S更强的适应范围,一般只要有操作系统和浏览器就行。
2.对安全要求不同:C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强, 一般高度机密的信息系统采用C/S 结构适宜,可以通过B/S发布部分可公开信息。B/S 建立在之上, 对安全的控制能力相对弱,面向是不可知的用户群。
3.对程序架构不同:C/S 程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。B/S 对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上,比C/S有更高的要求。 B/S结构的程序架构是发展的趋势,从MS的.Net系列的 2000 Exchange 2000等,全面支持网络的搭建的系统.。SUN 和IBM推的JavaBean 等,使 B/S更加成熟。
4.不同:C/S 程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好。B/S 对的多重结构,要求构件相对独立的功能,能够相对较好的重用。
5.系统维护不同:系统维护在是中,开销大。重要C/S 程序由于整体性,必须整体考察, 处理出现的问题以及系统升级。升级难,可能是再做一个全新的系统。B/S程序由组成,方便构件个别的更换,实现系统的无缝升级,系统维护开销减到最小,用户从网上自己下载安装就可以实现升级。
6.处理问题不同:C/S 程序可以处理用户面固定,并且在相同区域,,安全要求高需求,与操作系统相关,应该都是相同的系统。B/S 建立在上,面向不同的用户群,分散地域,这是C/S无法作到的,与操作系统平台关系最小。
7.不同:C/S 多是建立的Window平台上,表现方法有限。对程序员普遍要求较高。B/S 建立在浏览器上,,有更加丰富和生动的表现方式与用户交流,并且大部分难度减低,减低开发成本。
8.信息流不同:C/S 程序一般是典型的的机械式处理,交互性相对低。B/S 信息流向可变化, B-B、 B-C、 B-G等信息流向的变化,更象交易中心。
BS架构技术比较
C/S结构软件(即客户机/模式)分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。国内现阶段的大部分ERP(财务)软件产品即属于此类结构。
B/S(浏览器/服务器模式)是随着Internet技术的兴起,对C/S结构的一种改进。在这种结构下,软件应用的业务逻辑完全在应用服务器端实现,用户表现完全在Web服务器实现,客户端只需要浏览器即可进行业务处理,是一种全新的软件系统构造技术。这种结构更成为当今应用软件的首选体系结构。e通管理系列产品即属于此类结构。
1,数据安全性比较。由于C/S结构软件的数据分布特性,客户端所发生的火灾、盗抢、地震、病毒、黑客等都成了可怕的数据杀手。另外,对于集团级的异地软件应用,C/S结构的软件必须在各地安装多个,并在多个服务器之间进行。如此一来,每个数据点上的都影响了整个应用的数据安全。所以,对于集团级的大型应用来讲,C/S结构软件的安全性是令人无法接受的。对于B/S结构的软件来讲,由于其数据集中存放于总部的,客户端不保存任何业务数据和数据库连接信息,也无需进行什么数据同步,所以这些安全问题也就自然不存在了。
2,比较。在C/S结构软件的解决方案里,对于异地经营的大型集团都采用各地安装区域级服务器,然后再进行数据同步的模式。这些服务器每天必须同步完毕之后,总部才可得到最终的数据。由于局部网络故障造成个别数据库不能同步不说,即使同步上来,各也不是一个时点上的数据,数据永远无法一致,不能用于决策。对于B/S结构的软件来讲,其数据是集中存放的,客户端发生的每一笔业务单据都直接进入到中央数据库,不存在数据一致性的问题。
3,数据实时性比较。在集团级应用里,C/S结构不可能随时随地看到当前业务的发生情况,看到的都是事后数据;而B/S结构则不同,它可以实时看到当前发生的所有业务,方便了快速决策,有效地避免了企业损失。
4,数据溯源性比较。由于B/S结构的数据是集中存放的,所以总公司可以直接追溯到各级分支机构(分公司、门店)的原始业务单据,也就是说看到的结果可溯源。大部分C/S结构的软件则不同,为了减少数据通信量,仅仅上传中间报表数据,在总部不可能查到各分支机构(分公司、门店)的原始单据。
5,服务响应及时性比较。企业的业务流程、业务模式不是一成不变的,随着企业不断发展,必然会不断调整。软件供应商提供的软件也不是完美无缺的,所以,对已经部署的软件产品进行维护、升级是正常的。C/S结构软件,由于其应用是分布的,需要对每一个使用进行程序安装,所以,即使非常小的程序缺陷都需要很长的重新部署时间,重新部署时,为了保证各程序版本的一致性,必须暂停一切业务进行更新(即“休克更新”),其服务响应时间基本不可忍受。而B/S结构的软件不同,其应用都集中于总部上,各应用结点并没有任何程序,一个地方更新则全部应用程序更新,可以做到快速服务响应。
6,限制比较。C/S结构软件仅适用于局域网内部用户或宽带用户(1兆以上);而我们的B/S结构软件可以适用于任何网络结构(包括33.6K拨号入网方式),特别适于宽带不能到达的地方(例如迪信通集团的某些分公司,仅靠电话上网即可正常使用软件系统)。
7,存储模式比较。B/S结构相应数据完全来自于,而C/S结构部分数据来源于存储在本地的临时文件,剩余的部分来源于数据库,因此C/S结构响应时间会更快。
BS架构商业比较
1,投入成本比较。B/S结构软件一般只有初期一次性投入成本。对于集团来讲,有利于软件项目控制和避免IT黑洞,而C/S结构的软件则不同,随着应用范围的扩大,投资会连绵不绝。
2,硬件投资保护比较。在对已有硬件投资的保护方面,两种结构也是完全不同的。当应用范围扩大,系统负载上升时,C/S结构软件的一般解决方案是购买更高性能的服务器;而B/S架构则是通过增加服务器的数量来承担更大的负载。
BS架构融合
未来发展趋势,是将B/S与C/S的优势完美地结合起来,就是说,该平台的应用系统既能以B/S的方式发布运行,同时又具有C/S方式的极强的可操作性。
BS架构发展前景
C/S和B/S各有优势,C/S在图形的表现能力上以及运行的速度上肯定是强于B/S模式的,不过缺点就是他需要运行专门的客户端,而且更重要的是它不能跨平台,用在下写的程序肯定是不能在下跑的。而B/S模式就不同了,它不需要专门的客户端,只要浏览器,而浏览器是随操作系统就有的,方便就是他的优势了。而且,B/S是基于网页语言的、与操作系统无关,所以跨平台也是它的优势,而且以后随着网页语言以及浏览器的进步,B/S在表现能力上的处理以及运行的速度上会越来越快,它的缺点将会越来越少。比如,未来的,在图形的渲染方面以及音频、文件的处理上已经非常强大了。
不过,C/S架构也有着不可替代的作用。
清除历史记录关闭iOS应用架构谈 开篇
招聘信息:
iOS应用架构谈 开篇&iOS应用架构谈 view层的组织和调用方案&iOS应用架构谈 网络层设计方案&iOS应用架构谈 动态部署方案&iOS应用架构谈 本地持久化方案缘由之前安居客iOS app的第二版架构大部分内容是我做的,期间有总结了一些经验。在将近一年之后,前同事zzz在微信朋友圈上发了一个问题:假如问你一个iOS or Android app的架构,你会从哪些方面来说呢?当时看到这个问题正好在乘公车回家的路上,闲来无聊就答了一把。在zzz在微信朋友圈上追问了几个问题之后,我觉得有必要开个博客专门来讲讲一些个人见解。其实对于iOS客户端应用的架构来说,复杂度不亚于服务端,但侧重点和入手点却跟服务端不太一样。比如客户端应用就不需要考虑类似C10K的问题,正常的app就根本不需要考虑。这系列文章我会主要专注在iOS应用架构方面,很多方案也是基于iOS技术栈的特点而建立的。因为我个人不是很喜欢写Java,所以Android这边的我就不太了解了。如果你是Android开发者,你可以侧重看我提出的一些架构思想,毕竟不管做什么,思路是相通的,实现手段不同罢了。当我们讨论客户端应用架构的时候,我们在讨论什么?其实市面上大部分应用不外乎就是颠过来倒过去地做以下这些事情:简单来说就是调API,展示页面,然后跳转到别的地方再调API,再展示页面。那这特么有毛好架构的?非也,非也。 ---- 包不同 《天龙八部》App确实就是主要做这些事情,但是支撑这些事情的基础,就是做架构要考虑的事情。调用网络API页面展示数据的本地持久化动态部署方案上面这四大点,稍微细说一下就是:如何让业务开发工程师方便安全地调用网络API?然后尽可能保证用户在各种网络环境下都能有良好的体验?页面如何组织,才能尽可能降低业务方代码的耦合度?尽可能降低业务方开发界面的复杂度,提高他们的效率?当数据有在本地存取的需求的时候,如何能够保证数据在本地的合理安排?如何尽可能地减小性能消耗?iOS应用有审核周期,如何能够通过不发版本的方式展示新的内容给用户?如何修复紧急bug?上面几点是针对App说的,下面还有一些是针对团队说的:收集用户数据,给产品和运营提供参考合理地组织各业务方开发的业务模块,以及相关基础模块每日app的自动打包,提供给QA工程师的测试工具一时半会儿我还是只能想到上面这三点,事实上应该还会有很多,想不起来了。所以当我们讨论客户端应用架构的时候,我们讨论的差不多就是这些问题。这系列文章要回答那些问题?这系列文章主要是回答以下这些问题:网络层设计方案?设计网络层时要考虑哪些问题?对网络层做优化的时候,可以从哪些地方入手?页面的展示、调用和组织都有哪些设计方案?我们做这些方案的时候都要考虑哪些问题?本地持久化层的设计方案都有哪些?优劣势都是什么?不同方案间要注意的问题分别都是什么?要实现动态部署,都有哪些方案?不同方案之间的优劣点,他们的侧重点?本文要回答那些问题?上面细分出来的四个问题,我会分别在四篇文章里面写。那么这篇文章就是来讲一些通识啥的,也是开个坑给大家讨论通识问题的。架构设计的方法所有事情最难的时候都是开始做的时候,当你开始着手设计并实现某一层的架构乃至整个app的架构的时候,很有可能会出现暂时的无从下手的情况。以下方法论是我这些年总结出来的经验,每个架构师也一定都有一套自己的方法论,但一样的是,不管你采用什么方法,全局观、高度的代码审美能力、灵活使用各种设计模式一定都是贯穿其中的。欢迎各位在评论区讨论。第一步:搞清楚要解决哪些问题,并找到解决这些问题的充要条件。你必须得清楚你要做什么,业务方希望要什么。而不是为了架构而架构,也不是为了体验新技术而改架构方案。以前是MVC,最近流行MVVM,如果过去的MVC是个好架构,没什么特别大的缺陷,就不要推倒然后搞成MVVM。关于充要条件我也要说明一下,有的时候系统提供的函数是需要额外参数的,比如read函数。还有翻页的时候,当前页码也是充要条件。但对于业务方来说,这些充要条件还能够再缩减。比如read,需要给出file descriptor,需要给出buf,需要给出size。但是对于业务方来说,充要条件就只要file descriptor就够了。再比如翻页,其实业务方并不需要记录当前页号,你给他暴露一个loadNextPage这样的方法就够了。搞清楚对于业务方而言的真正充要条件很重要!这决定了你的架构是否足够易用。另外,传的参数越少,耦合度相对而言就越小,你替换模块或者升级模块所花的的代价就越小。第二步:问题分类,分模块这个不用多说了吧。第三步:搞清楚各问题之间的依赖关系,建立好模块交流规范并设计模块。关键在于建立一套统一的交流规范。这一步很能够体现架构师在软件方面的价值观,虽然存在一定程度上的好坏优劣(比如胖Model和瘦Model),但既然都是架构师了,基本上是不会设计出明显很烂的方案的,除非这架构师还不够格。所以这里是架构师价值观输出的一个窗口,从这一点我们是能够看出架构师的素质的。另外要注意的是,一定是建立一套统一的交流规范,不是两套,不是多套。你要坚持你的价值观,不要摇摆不定。要是搞出各种五花八门的规范出来,一方面有不切实际的炫技嫌疑,另一方面也会带来后续维护的灾难。第四步:推演预测一下未来可能的走向,必要时添加新的模块,记录更多的基础数据以备未来之需。很多称职的架构师都会在这时候考虑架构未来的走向,以及考虑做完这一轮架构之后,接下来要做的事情。一个好的架构虽然是功在当代利在千秋的工程,但绝对不是一个一劳永逸的工程。软件是有生命的,你做出来的架构决定了这个软件它这一生是坎坷还是幸福。第五步:先解决依赖关系中最基础的问题,实现基础模块,然后再用基础模块堆叠出整个架构。这一步也是验证你之前的设计是否合理的一步,随着这一步的推进,你很有可能会遇到需要对架构进行调整的情况。这个阶段一定要吹毛求疵高度负责地去开发,不要得过且过,发现架构有问题就及时调整。否则以后调整的成本就非常之大了。第六步:打点,跑单元测试,跑性能测试,根据数据去优化对应的地方。你得用这些数据去向你的boss邀功,你也得用这些数据去不断调整你的架构。总而言之就是要遵循这些原则:自顶向下设计(1,2,3,4步),自底向下实现(5),先测量,后优化(6)。什么样的架构师是好架构师?每天都在学习,新技术新思想上手速度快,理解速度快。做不到这点,你就是码农。业务出身,或者至少非常熟悉公司所处行业或者本公司的业务。做不到这点,你就是运维。熟悉软件工程的各种规范,踩过无数坑。不会为了完成需求不择手段,不推崇quick & dirty。做不到这点,你比较适合去竞争对手那儿当工程师。及时承认错误,不要觉得承认错误会有损你架构师的身份。做不到这点,公关行业比较适合你。不为了炫技而炫技做不到这点,你就是高中编程爱好者。精益求精做不到这点,(我想了好久,但我还是不知道你适合去干什么。)什么样的架构叫好架构?代码整齐,分类明确,没有common,没有core不用文档,或很少文档,就能让业务方上手思路和方法要统一,尽量不要多元没有横向依赖,万不得已不出现跨层访问对业务方该限制的地方有限制,该灵活的地方要给业务方创造灵活实现的条件易测试,易拓展保持一定量的超前性接口少,接口参数少高性能以上是我判断一个架构是不是好架构的标准,这是根据重要性来排列的。客户端架构跟服务端架构要考虑的问题和侧重点是有一些区别的。下面我会针对每一点详细讲解一下:代码整齐,分类明确,没有common,没有core代码整齐是每一个工程师的基本素质,先不说你搞定这个问题的方案有多好,解决速度有多快,如果代码不整齐,一切都白搭。因为你的代码是要给别人看的,你自己也要看。如果哪一天架构有修改,正好改到这个地方,你很容易自己都看不懂。另外,破窗理论提醒我们,如果代码不整齐分类不明确,整个架构会随着一次一次的拓展而越来越混乱。分类明确的字面意思大家一定都了解,但还有一个另外的意思,那就是:不要让一个类或者一个模块做两种不同的事情。如果有类或某模块做了两种不同的事情,一方面不适合未来拓展,另一方面也会造成分类困难。不要搞Common,Core这些东西。每家公司的架构代码库里面,最恶心的一定是这两个名字命名的文件夹,我这么说一定不会错。不要开Common,Core这样的文件夹,开了之后后来者一定会把这个地方搞得一团糟,最终变成Common也不Common,Core也不Core。要记住,架构是不断成长的,是会不断变化的。不是每次成长每次变化,都是由你去实现的。如果真有什么东西特别小,那就索性为了他单独开辟一个模块就好了,小就小点,关键是要有序。不用文档,或很少文档,就能让业务方上手。谁特么会去看文档啊,业务方他们已经被产品经理逼得很忙了。所以你要尽可能让你的API名字可读性强,对于iOS来说,objc这门语言的特性把这个做到了极致,函数名长就长一点,不要紧。思路和方法要统一,尽量不要多元。解决一个问题会有很多种方案,但是一旦确定了一种方案,就不要在另一个地方采用别的方案了。也就是做架构的时候,你得时刻记住当初你决定要处理这样类型的问题的方案是什么,以及你的初衷是什么,不要摇摆不定。另外,你当初设立这个模块一定是有想法有原因的,要记录下你的解决思路,不要到时候换个地方你又灵光一现啥的,引入了其他方案,从而导致异构。要是一个框架里面解决同一种类似的问题有各种五花八门的方法或者类,我觉得做这个架构的架构师一定是自己都没想清楚就开始搞了。没有横向依赖,万不得已不出现跨层访问。没有横向依赖是很重要的,这决定了你将来要对这个架构做修补所需要的成本有多大。要做到没有横向依赖,这是很考验架构师的模块分类能力和是否熟悉业务的。跨层访问是指数据流向了跟自己没有对接关系的模块。有的时候跨层访问是不可避免的,比如网络底层里面信号从2G变成了3G变成了4G,这是有可能需要跨层通知到View的。但这种情况不多,一旦出现就要想尽一切办法在本层搞定或者交给上层或者下层搞定,尽量不要出现跨层的情况。跨层访问同样也会增加耦合度,当某一层需要整体替换的时候,牵涉面就会很大。对业务方该限制的地方有限制,该灵活的地方要给业务方创造灵活实现的条件。把这点做好,很依赖于架构师的经验。架构师必须要有能力区分哪些情况需要限制灵活性,哪些情况需要创造灵活性。比如对于Core Data技术栈来说,ManagedObject理论上是可以出现在任何地方的,那就意味着任何地方都可以修改ManagedObject,这就导致ManagedObjectContext在同步修改的时候把各种不同来源的修改同步进去。这时候就需要限制灵活性,只对外公开一个修改接口,不暴露任何ManagedObject在外面。如果是设计一个ABTest相关的API的时候,我们又希望增加它的灵活性。使得业务方不光可以通过Target-Action的模式实现ABtest,也要可以通过Block的方式实现ABTest,要尽可能满足灵活性,减少业务方的使用成本。易测试易拓展老生常谈,要实现易测试易拓展,那就要提高模块化程度,尽可能减少依赖关系,便于mock。另外,如果是高度模块化的架构,拓展起来将会是一件非常容易的事情。保持一定量的超前性这一点能看出架构师是否关注行业动态,是否能准确把握技术走向。保持适度的技术上的超前性,能够使得你的架构更新变得相对轻松。另外,这里的超前性也不光是技术上的,还有产品上的。谁说架构师就不需要跟产品经理打交道了,没事多跟产品经理聊聊天,听听他对产品未来走向的畅想,你就可以在合理的地方为他的畅想留一条路子。同时,在创业公司的环境下,很多产品需求其实只是为了赶产品进度而产生的妥协方案,最后还是会转到正轨的。这时候业务方可以不实现转到正规的方案,但是架构这边,是一定要为这种可预知的改变做准备的。接口少,接口参数少越少的接口越少的参数,就能越降低业务方的使用成本。当然,充要条件还是要满足的,如何在满足充要条件的情况下尽可能地减少接口和参数数量,这就能看出架构师的功力有多深厚了。高性能为什么高性能排在最后一位?高性能非常重要,但是在客户端架构中,它不是第一考虑因素。原因有下:1.客户端业务变化非常之快,做架构时首要考虑因素应当是便于业务方快速满足产品需求,因此需要尽可能提供简单易用效果好的接口给业务方,而不是提供高性能的接口给业务方。2.苹果平台的性能非常之棒,正常情况下很少会出现由于性能不够导致的用户体验问题。3.苹果平台的优化手段相对有限,甚至于有些时候即便动用了无所不用其极的手段乃至不择手段牺牲了稳定性,性能提高很有可能也只不过是100ms到90ms的差距。10%的性能提升对于服务端来说很不错了,因为服务端动不动就是几十万上百万的访问量,几十万上百万个10ms是很可观的。但是对于客户端的用户来说,他无法感知这10ms的差别,如果从10s优化成9s用户还是有一定感知的,但是100ms变90ms,我觉得吧,还是别折腾了。但是!不重要不代表用不着去做,关于性能优化的东西,我会对应放到各系列文章里面去。比如网络层优化,那就会在网络层方案的那篇文章里面去写,对应每层架构都有每层架构的不同优化方案,我都会在各自文章里面一一细说。 11:28 补: 关于架构分层?昨晚上志豪看了这篇文章之后说,看到你这个题目本来我是期望看到关于架构分层相关的东西的,但是你没写。嗯,确实没写,当时没写的原因是感觉这个没什么好写的。前面谈论到架构的方法的时候,关于问题分类分模块这一步时,架构分层也属于这一部分,给我一笔带过了。既然志豪提出来了这个问题,我想可能大家关于这个也会有一些想法和问题,那么我就在这儿讲讲吧。其实分层这种东西,真没啥技术含量,全凭架构师的经验和素质。我们常见的分层架构,有三层架构的:展现层、业务层、数据层。也有四层架构的:展现层、业务层、网络层、本地数据层。这里说三层、四层,跟TCP/IP所谓的五层或者七层不是同一种概念。再具体说就是:你这个架构在逻辑上是几层那就几层,具体每一层叫什么,做什么,没有特定的规范。这主要是针对模块分类而言的。也有说MVC架构,MVVM架构的,这种层次划分,主要是针对数据流动的方向而言的。在实际情况中,针对数据流动方向做的设计和针对模块分类做的设计是会放在一起的,也就是说,一个MVC架构可以是四层:展现层、业务层、网络层、本地数据层。那么,为什么我要说这个?大概在五六年前,业界很流行三层架构这个术语。然后各种文档资料漫天的三层架构,并且喜欢把它与MVC放在一起说,MVC三层架构/三层架构MVC,以至于很多人就会认为三层架构就是MVC,MVC就是三层架构。其实不是的。三层架构里面其实没有Controller的概念,而且三层架构描述的侧重点是模块之间的逻辑关系。MVC有Controller的概念,它描述的侧重点在于数据流动方向。好,为什么流行起来的是三层架构,而不是四层架构或五层架构?因为所有的模块角色只会有三种:数据管理者、数据加工者、数据展示者,意思也就是,笼统说来,软件只会有三层,每一层扮演一个角色。其他的第四层第五层,一般都是这三层里面的其中之一分出来的,最后都能归纳进这三层的某一层中去,所以用三层架构来描述就比较普遍。那么我们怎么做分层?应该如何做分层,不是在做架构的时候一开始就考虑的问题。虽然我们要按照自顶向下的设计方式来设计架构,但是一般情况下不适合直接从三层开始。一般都是先确定所有要解决的问题,先确定都有哪些模块,然后再基于这些模块再往下细化设计。然后再把这些列出来的问题和模块做好分类。分类之后不出意外大多数都是三层。如果发现某一层特别庞大,那就可以再拆开来变成四层,变成五层。举个例子:你要设计一个即时通讯的服务端架构,怎么分层?记住,不要一上来就把三层架构的规范套上去,这样做是做不出好架构的。你要先确定都需要解决哪些问题。这里只是举例子,我随意列出一点意思意思就好了:要解决用户登录、退出的问题解决不同用户间数据交流的问题解决用户数据存储的问题如果是多台服务器的集群,就要解决用户连接的寻址问题解决第一个问题需要一个链接管理模块,链接管理模块一般是通过链接池来实现。 解决第二个问题需要有一个数据交换模块,从A接收来的数据要给到B,这个事情由这个模块来做。 解决第三个问题需要有个数据库,如果是服务于大量用户,那么就需要一个缓冲区,只有当需要存储的数据达到一定量时才执行写操作。 解决第四个问题可以有几种解决方案,一个是集群中有那么几台服务器作为寻路服务器,所有寻路的服务交给那几台去做,那么你需要开发一个寻路服务的Daemon。或者用广播方式寻路,但如果寻路频次非常高,会造成集群内部网络负载特别大。这是你要权衡的地方,目前流行的思路是去中心化,那么要解决网络负载的问题,你就可以考虑配置一个缓存。于是我们有了这些模块:链接管理、数据交换、数据库及其配套模块、寻路模块做到这里还远远没有结束,你要继续针对这四个模块继续往下细分,直到足够小为止。但是这里只是举例子,所以就不往下深究了。另外,我要提醒你的是,直到这时,还是跟几层架构毫无关系的。当你把所有模块都找出来之后,就要开始整理你的这些模块,很有可能架构图就是这样:然后这些模块分完之后你看一下图,嗯,1、2、3,一共三层,所以那就是三层架构啦。在这里最消耗脑力最考验架构师功力的地方就在于:找到所有需要的模块, 把模块放在该放的地方这个例子侧重点在于如何分层,性能优化、数据交互规范和包协议、数据采集等其他一系列必要的东西都没有放进去,但看到这里,相信你应该了解架构师是怎么对待分层问题的了吧?对的,答案就是没有分层。所谓的分层都是出架构图之后的事情了。所以你看别的架构师在演讲的时候,上来第一句话差不多都是:"这个架构分为以下几层..."。但考虑分层的问题的时机绝对不是一开始就考虑的。另外,模块一定要把它设计得独立性强,这其实是门艺术活。另外,这虽然是服务端架构,但是思路跟客户端架构是一样的,侧重点不同罢了。之所以不拿客户端架构举例子,是因为这方面的客户端架构苹果已经帮你做好了绝大部分事情,没剩下什么值得说的了。 12:15 补:关于Common文件夹?评论区MatrixHero提到一点:关于common文件夹的问题,仅仅是文件夹而已,别无他意。如果后期维护出了代码混乱可能是因为,和服务器沟通协议不统一,或代码review不及时。应该有专人维护公共类。这是针对我前面提出的不要Common,不要Core而言的,为什么我建议大家不要开Common文件夹?我打算分几种情况给大家解释一下。一般情况下,我们都会有一些属于这个项目的公共类,比如取定位坐标,比如图像处理。这些模块可能非常小,就h和m两个文件。单独拎出来成为一个模块感觉不够格,但是又不属于其他任何一个模块。于是大家很有可能就会把它们放入Common里面,我目前见到的大多数工程和大多数文档里面的代码都喜欢这么做。在当时来看,这么做看不出什么问题,但关键在于:软件是有生命,会成长的。当时分出来的小模块,很有可能会随着业务的成长,逐渐发展成大模块,发展成大模块后,可以再把它从Common移出来单独成立一个模块。这个在理论上是没有任何问题的,然而在实际操作过程中,工程师在拓张这个小模块的时候,不太容易会去考虑横向依赖的问题,因为当时这些模块都在Common里面,直接进行互相依赖是非常符合直觉的,而且也不算是不遵守规范。然而要注意的是,这才是Commom代码混乱的罪魁祸首,Common文件夹纵容了不精心管理依赖的做法。当Common里面的模块依赖关系变得复杂,再想要移出来单独成立一个模块,就不是当初设置Common时想的等规模大了再移除也不迟那么简单了。另外,Common有的时候也不仅仅是一个文件夹。在使用Cocoapods来管理项目库的时候,Common往往就是一个pod。这个pod里面会有A/B/C/D/E这些函数集或小模块。如果要新开一个app或者Demo,势必会使用到Common这个pod,这么做,往往会把不需要包含的代码也包含进去,我对项目有高度洁癖,这种情况会让我觉得非常不舒服。举个例子:早年安居客的app还不是集齐所有新房、二手房、租房业务的。当你刚开始写新房这个app的时候,创建了一个Common这个pod,这里面包含了一些对于新房来说比较Common的代码,也包含了对于这个app来说比较Common的代码。过了半年或者一年,你要开始二手房这个app,我觉得大多数人都会选择让二手房也包含这个Common,于是这个Common很有可能自己走上另一条发展的道路。等到了租房这个业务要开app的时候,Common已经非常之庞大,相信这时候的你也不会去想整理Common的事情了,先把租房搞定,于是Common最终就变成了一坨屎。就对于上面的例子来说,还有一个要考虑的是,分出来的三个业务很有可能会有三个Common,假设三个Common里面都有公共的功能,交给了三个团队去打理,如果遇到某个子模块需要升级,那么三个Common里面的这个子模块都要去同步升级,这是个很不效率的事情。另外,很有可能三个Common到最后发展成彼此不兼容,但是代码相似度非常之高,这个在架构上,是属于分类条理不清。就在去年年中的时候,安居客决定将三个业务归并到同一个App。好了,如果你是架构师,面对这三个Common,你打算怎么办?要想最快出成果,那就只好忍受代码冗余,赶紧先把架子搭起来再说,否则你面对的就是剪不断理还乱的Common。此时Common就已经很无奈地变成一坨屎了。这样的Common,你自己说不定也搞不清楚它里面到底都有些什么了,交给任何一个人去打理,他都不敢做彻底的整理的。还有就是,Common本身就是一个粒度非常大的模块。在阿里这样大规模的团队中,即便新开一个业务,都需要在整个app的环境下开发,为什么?因为模块拆分粒度不够,要想开一个新业务,必须把其他业务的代码以及依赖全部拉下来,然后再开新入口,你的新业务才能进行正常的代码编写和调试。然而你的新业务其实只依赖首页入口、网络库等这几个小模块,不需要依赖其他那么多的跟你没关系的业务。现在每次打开天猫的项目,我都要等个两三分钟,这非常之蛋疼。但是大家真的不知道这个原因吗?知道了这个原因,为什么没人去把这些粒度不够细的模块整理好?在我看来,这件事没人敢做。原来大家用的好好的,手段烂就烂一点,你改了你能保证不出错?这么复杂的东西,短期之内你肯定搞不好,任务量和工时都不好估,你leader会觉得你在骗工时玩自己的事情。就算你搞定了,QA这边肯定再需要做一次全面的回归测试,任务量极大,难以说服他们配合你的工作。花这么大的成本只是为了减少开启项目时候等待IDE打开时的那几分钟时间?我想如果我是你leader,我也应该不会批准你做这样的事情的。所以,与其到了后面吃这个苦头,不如一开始做架构的时候就不要设置Common,到后面就能省力很多。架构师的工作为什么是功在当代利在千秋,架构师的素质为什么对团队这么重要?我觉得这里就是一个最好的体现。简而言之,不建议开Common的原因如下:1.Common不仅仅是一个文件夹,它也会是一个Pod。不管是什么,在Common里面很容易形成错综复杂的小模块依赖,在模块成长过程中,会纵容工程师不注意依赖的管理,乃至于将来如果要将模块拆分出去,会非常的困难。2.Common本身与细粒度模块设计的思想背道而驰,属于一种不合适的偷懒手段,在将来业务拓张会成为阻碍。3.一旦设置了Common,就等于给地狱之门打开了一个小缝,每次业务迭代都会有一些不太好分类的东西放入Common,这就给维护Common的人带来了非常大的工作量,而且这些工作量全都是体力活,非常容易出错。那么,不设Common会带来哪些好处?1.强迫工程师在业务拓张的时候将依赖管理的事情考虑进去,让模块在一开始发展的时候就有自己的土壤,成长空间和灵活度非常大。2.减少各业务模块或者Demo的体积,不需要的模块不会由于Common的存在而包含在内。3.可维护性大大提高,模块升级之后要做的同步工作非常轻松,解放了那个苦逼的Common维护者,更多的时间可以用在更实质的开发工作上。4.符合细粒度模块划分的架构思想。Common的好处只有一个,就是前期特别省事儿。然而它的坏处比好处要多太多。不设置Common,再小的模块再小的代码也单独拎出来,最多就是Podfile里面要多写几行,多写几行最多只花费几分钟。但若要消除Common所带来的罪孽,不是这几分钟就能搞定的事情。既然不用Common的好处这么多,那何乐而不为呢?假设将来你的项目中有一个类是用来做Location的,哪怕只有两个文件,也给他开一个模块就叫Location。如果你的项目中有一个类是用来做ImageProcess的,那也开一个模块就叫ImageProcess。不要都放到Common里面去,将来你再开新的项目或者新的业务,用Location就写依赖Location,用ImageProcess就写依赖ImageProcess,不要再依赖Common了,这样你的项目也好管理,管理Common的那个人日子过得也轻松(这个人其实都可以不需要了,把他的工资加到你头上不是更好?:D),将来要升级,顾虑也少。结束一下子挖了个大坑,在开篇里扯了一些淡。嗯,干货会在后续的系列文章里面扑面而来的!
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量4849点击量4404点击量3835点击量3456点击量3217点击量3180点击量3133点击量2980点击量2812
&2016 Chukong Technologies,Inc.
京公网安备89}

我要回帖

更多关于 基于架构的软件开发 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信