2020-10-25
架构模式&开发模式
近日在写移动端开发文档时傻傻分不清架构模式和开发模式区别,刚好看到一篇公众号文章讲架构模式,先就班门弄斧谈谈常见的几种架构模式,由于公号中谈到的有点多,需要了解更多,请自行查阅十种架构模式,当然了,既然开篇谈到了结构模式和开发模式,那么开发模式当然也要谈一谈啦。
- 架构模式
1.概念
架构模式,在给定上下文中解决软件架构中常见的问题的通用、可重用的解决方案。架构模式类似于软件设计模式,但范围更广。重点是什么那?当然就是通用、可重用,就是反反复复会用到的方法。
2.常见的架构模式
原文中谈到了十种,但由于本人才学疏浅,接触过的还真没那么多,因此仅谈谈自己见过的哈,先来个大纲吧。
正题来了,下面逐一介绍:
2.1分层模式
分层模式用于构建为子任务组的程序,其中每个都处于特定的抽象级别。每一次都想更高层提供服务。
一般信息系统中最常见的4层划分如下:
- Presentation layer表示层(UI层)
- Application layer应用层(服务层)
- Business logic layer业务逻辑层(领域层)
- Data Access layer数据访问层(数据持久层)
应用:
- 一般桌面应用程序
- 电子商务Web应用程序
其实数仓中也用到了该思想,比如数仓中一般(层数不固定)分为四层,分别是:ODS原始数据层、DWD明细数据层、DWS服务数据层以及ADS数据应用层(从下到上)。
2.2客户端-服务端
该模式由两部分组成:一个服务端和多个客户端,服务器向多个客户端提供服务。客户端向服务器发起请求,服务器向这些客户端提供相关服务,之后,服务器继续侦听客户端的请求。
应用:在线应用程序,如电子邮件、文件共享和银行业务,真的很常见。
2.3主从模式
该模式也分为两块:主模块和从模块。主模块在相同的从模块之间分配工作,并根据从模块返回的结构来计算最终的结果。
应用:
在数据库复制中,主数据库被视作权威数据源,而从数据库与其保持同步
连接到计算机系统总线上的外围设备(主驱动器和从驱动器)
集群中应用较多,大数据中很多框架都采用主-从架构,比如HDFS、Spark等。
2.4Broker模式
此模式是使用解耦的组件构建分布式系统,这些组件可以通过远程服务调用实现交互。代理组件负责协调组件之间的通信。
服务器将它们的功能(服务和特征等)发布到代理,客户端向代理请求服务,然后代理根据其注册表将客户端请求转发给合适的服务。
应用
消息代理软件,如 Apache ActiveMQ, Apache Kafka, RabbitMQ 和 JBoss Messaging,Kafka大数据中很重要的内容,后续再和大家谈。
2.5MVC
该模式将交互式应用分为三个部分,
1.模型——包含核心功能和数据
2.视图——向用户显示信息(可以定义多个视图)
3.控制器——处理用户的输入
这样做是为了将数据的内部表示与用户输入和向用户展示的形式分离开来,这样可以解耦组件,同时也可以进行高效的代码重用。这也是一种很常见的架构模式,分层很清晰,Android开发就是经历了从MVC->MVP->MVVM阶段,最近移动端项目在用MVVM,其实还没怎么吃透,先不做过多解释,后续再详谈。
应用
主流编程语言的互联网应用架构
网络框架,如Django 和 Rails.
2.6解释器模式
此模式通常用于设计组件来解释使用专用语言写出的程序,它主要指定如何估算程序行,即以特定语言编写的语句或表达式。基本思想是为每种语言符号都设计一个类。大数据中数仓工具Hive的架构就用到了此种模式,后续谈Hive时再详细介绍。
应用
数据库查询语言,如SQL
用于描述通信协议的语言
2.7P2P模式
在此模式中,每个独立的组件被称为对等点(或对等端,peer)。对等端既可以充当客户端(向其它对等端请求服务),又可以充当服务器(向其它对等方提供服务)。同一个对等端可能既是客户端,又是服务器,并且可以动态改变其角色。
P2P稍微接触过理财的童鞋们肯定都听过,收益率都在6%+,毛竹也入了一些,但18年暴雷后好些人的钱都没取出来,当然毛竹也有点钱出不来啦,多少就不在这说了,反正不多。再来说说比特币,以北京同学16年左右入职的一家和比特币有关业务的公司,据说是赚了不少,后来安全退出,当然这是幸运的。还一同学目前在搞区块链,听说类似于搞理财,其实毛竹觉得吧,这种风险肯定是有的,说不好,可能和P2P一样,所以不建议大家去投资。国庆前后参加了某投资理财课的小白训练营,里边讲了基金、股票、REITs等理财产品,关于理财,毛竹觉得,你要有承担风险的勇气,但也不能盲目投资,在你不深入了解的情况下不要盲目投资,要不就投资风险小的产品,大白话就是本金不能亏损的,当然银行的理财也不定可靠,近期宇宙第一大行的一块理财产品收益率4%左右就暴雷的,这挺可怕把,总之,理财有风险,投资需谨慎。
应用
文件共享网络,如Gnutella 和 G2
多媒体协议,如P2PTV 和 PDTP
基于加密货币的产品,如比特币和区块链
2.8事务总裁模式
该模式主要处理组件,有4个重要的组件:事件源、事件侦听器、通道和事件总线。事件源将消息发送到事件总线上的特定通道,侦听器会订阅特定的频道。当消息发送到频道中后,订阅该频道的侦听器会收到该消息的通知。
应用
安卓开发
通知服务
- 开发模式
学过软件工程的同学肯定都知道这个,瀑布模式、迭代式开发、螺旋式开发和敏捷开发。
这几种开发模式很重要的知识点,软考高项和PMP都会考,后续关于软考高项和PMP都会和大家谈。这行有很多其他专业转的,毛竹见过好些文科生,见过学体育的、学舞蹈的、学 经济的等等吧,所以有必要给大家谈谈。
1.瀑布模式
需求->设计->编码->测试->提交的每个开发阶段都要做到最好,特别是在前期阶段设计得越完美,提交后的损失就越少。然而现在的系统很复杂且多变,所以很难在现实中应用瀑布式开发。
2.迭代式开发
不要求每个阶段的任务都做到最好,可以容忍一些不足,先不去完善它,将主要功能先搭建起来,以最短的时间及最少的损失完成一个不完美的成果直至提交,然后通过客户或用户的反馈信息,在这个不完美的成果上逐步进行完善。
3.螺旋式开发
在很大程度上是一种风险驱动的方法体系,因为在每个阶段及经常发生的循环之前,都必须先进行风险评估。
4.敏捷开发
和迭代式开发相比,两者都强调在较短的开发周期内提交软件,但是,敏捷开发的周期可能更短,且更强调队伍种的高度协作。敏捷方法有时被误认为是五计划性和纪律性的方法,实际上更确切的说法是敏捷方法强调适应性而非预见性,适应性的方法主要用于快速适应需求的变化。当项目的需求有变化时,团队能够迅速应对新的需求。
好了,这次的分享就到这里,我们不仅分享技术,也顺带谈谈最近遇到的事情等,第一篇谈到过数据的内容,下一篇就谈谈sql优化的内容,下一期见。