架构学习(一)

最近在做版本同步,利用svn+beyond compare同步了大量的文件,在这大量阅读代码的过程中有了一点点关于平台化、模块化的概念。现在对这些词的理解和与学生时代的远远不同,那时做的几K行代码量的工程也远不是现在动辄几百w行代码量的工程可比的,些许感悟特此记录。只是感悟....非干货....

  • 模块化

  相信做过软件设计的学生都听过这个名词,要将具有不同功能,不同特性的组件设计成不同的模块,并且模块之间要“低耦合、高内聚”。最直观的理解就是将负责不同类别的function,file放到不同的目录下,也就归档成了一个个的模块A, B, C。至于以前,没有想过模块(此处说组件或许比较合适,在我的理解,组件更类似于running状态的模块)之间的通信会有多少的问题,假设A想获得B中的数据,那么就在B中设计一个public接口,然后直接调用就好了。

  按常理说,这种设计在代码量小,逻辑清晰简单的情况下是完全可行的,看上去也实现了“高耦合低内聚”的设计。然而实际往往不是这么简单。

  在大型工程开发过程中,经常会让不同的人负责不同的模块(都是同一项目组内的都算好的了,我还见过有不同部门的人负责同一项目里的不同模块= =),这样一旦某一模块B需求变更,那么对这个模块有依赖的所有模块都无法进行编译调试。

  相当于一个项目的开发被单个的模块给阻塞住了,对公司而言浪费大量的成本,对开发者而言写工程的makefile,进行统一的编译调试也无比的麻烦复杂。

  看到同事针对以上这种场景进行了阐述:在大型工程中,模块之间的去耦合是首位的,在一定情况下甚至可以增加冗余来实现这一目标。假设现在有A,B,C三个模块,A,B都要访问C模块内的数据,那么最好的方式不是写一个C的接口,而是在A和B中各自定义访问C模块数据的function,实现模块解耦。

  当然实际的模块设计还有很多很多的问题,以上只是博主最近的一个痛苦经历,很多后续的需求变更也是模块耦合大的原因。

  • 平台化

  现在经常可以听到xx平台,o2o平台,b2b平台,交友(??)平台。其实总的来说,平台可以理解成支持功能/产品的软件。

  这么说有点抽象,举个例子。

  现在有一个内部使用的网络平台,它是一个1000W+的代码框架。在这个框架下定义了很多的基本组件,定义了很多消息处理、传输的方式,并且支持不同的部门在这个代码框架下添加定义自己需要的组件,也就是我们通常说的可扩展性良好。如果你需要在这个框架下添加新的功能,那么就只需要在特定的xml,c文件中增加自己的字段就可以了,其他的东西这个平台都已经帮你做好了。

  所以这个平台已经支持了多种产品的研发,因为它的可扩展性实在是太高了....

  然而这并不意味这就是一个很好的平台!

  因为要支持多种产品,所以它的逻辑流程和代码实在是太复杂了。光是启动这个平台,将所有的启动进程拉起来,都足足需要好几min。从商业角度的来看,在使用这个平台之前先是需要花费大量的时间产品上车,随后才能进行开发。由于平台代码逻辑太过复杂,调试也变得复杂无比,出现bug的概率也大大增加。虽然这个平台一旦研发成功可以支持公司好几年的业务发展,然而在这基础上开发的时间成本也大大增加了,开发的产品质量也未必有使用专门定制的平台开发出来的产品质量好。

  架构的很多设计都只是一种选择、一种决策。你选择了一种优势,那么同时就一定存在着某种弊端。

时间: 2024-11-06 22:56:23

架构学习(一)的相关文章

MySQL Innodb 架构学习

一.MySQL后台线程   1.Master Thread 核心后台线程,主要负责将缓冲池的数据异步刷新到磁盘.例如脏页的刷新,插入缓冲的合并,undo 页的回收等. 1)每秒一次的操作: 日志缓冲刷新到磁盘,即使该事务还没有提交.该操作总是会发生,这个就是为了再大的事务,提交时间都很短. 当IO压力很小时(1s内发生的IO次数小于5% innodb_io_capacity)合并5% innodb_io_capacity 的插入缓冲. 当脏页比例大于 innodb_max_dirty_pages

高可用软件Keepalived学习之Keepalived架构学习

最近在测试新游戏的部署方案,我们正在测试的一款手游后端代码部署采用HAProxy+Keepalived的方式进行部署,所以顺便研究下Keepalived的详细资料. Keepalived的官方地址是http://www.keepalived.org/index.html Keepalived是一个用C语言编写的路由软件,它的目的是为Linux系统或基于Linux系统的基础架构提供简单而强壮的负载均衡和高可用机制.负载均衡框架依赖于LVS的内核模块并提供四层负载均衡功能.它可以根据负载均衡器后端的

ABP架构学习系列

ABP实践学习系列 ABP Zero 本地化语言的初始化和扩展 ABP Zero 导航菜单之角色权限 ABP Zero示例项目问题总结 ABP后台服务之作业调度Quartz.NET ABP架构学习系列 ABP架构学习系列一 整体项目结构及目录 ABP架构学习系列二:ABP中配置的注册和初始化 ABP架构学习系列三:手工搭建ABP框架 IOC基础学习系列 .Net IOC框架入门之一 Unity .Net IOC框架入门之二 CastleWindsor 各大主流.Net的IOC框架性能测试比较(转

spring 架构学习

学习目的用于抽象业务逻辑,因spring本身就是抽象业务逻辑的框架,如做业务架构网面的工作 spring为不二之选. 一些好的网址 http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ http://www.iteye.com/blogs/subjects/Spring_jiwenke http://blog.csdn.net/it_man/article/details/4402245 http://elf8848.i

转:大型网站架构学习笔记

前言 最近一直在拜读两本书: 1.李智慧老师的<大型网站技术架构 核心原理与案例分析> http://www.linuxidc.com/Linux/2015-11/125137.htm 2.曾宪杰老师的<大型网站系统与Java中间件实践> http://www.linuxidc.com/Linux/2015-11/125138.htm 看了并结合自己目前的工作进行了思考,感觉获益匪浅.受益良多,自己对大型网站的理解又有了不少的加深,下面分享一下自己的学习笔记. 学习笔记 1.大型网

iOS开发架构学习记录

闲着没事看了一些iOS开发架构的视频,简单的介绍了几个常用的架构设计,现将它记录如下,以后有时间再专门写这方面的内容,大家可以看看,感兴趣的就进一步学习. 一.架构基础 1.架构设计的目的 进一步解耦. 2.耦合的方式 1)单例-彼此知道对方的存在 2)delegate-被委托方不知道委托方的存在,委托方知道被委托方的存在 3)通知-双方都不知道对方的存在 二.MVC C可以控制V的渲染,C可以修改M. V可以将用户这边采集到的数据和用户事件反馈给C做进一步的处理,V可以读取到M中的数据进而展示

三层架构学习实例

如有雷同,不胜荣欣,如转载,请注明 一.三层架构实例 首先学习三层架构模式­——三层架构实现的留言和查看留言 下面是本人学习三层架构的一点感想和理解,肯定有许多不足的地方,欢迎大家斧正,谢谢,废话到此,下面咱们开始三层架构 大家都知道三层架构分为:1,表示层(UI)2,业务逻辑层(BLL)3,数据访问层(DAL),下面咱们用一个简单的实例,实战三层架构 首先建立一个空白的解决方案,添加如下项目以及文件 1.添加一个ASP.net WebApplication项目,命名为UI,新建WebForm类

大型网站架构学习笔记

前言 最近一直在拜读两本书: 1.李智慧老师的<大型网站技术架构 核心原理与案例分析> 2.曾宪杰老师的<大型网站系统与Java中间件实践> 看了并结合自己目前的项目进行了思考,感觉获益匪浅.受益良多,自己对大型网站的理解又有了不少的加深,下面分享一下自己的学习笔记. 学习笔记 1.大型网站架构的发展史(红字就是每一步发展历程的关键) (1)从一个小网站发展起来,一台服务器,应用程序.数据库.文件等所有资源都在一台服务器上 (2)网站业务的发展,一台服务器逐渐不能满足需求,因此要将

app架构学习之MVP

App有一个好的架构,它可以带来如下的好处:容易扩展:容易维护.如果一个App没有一个好的架构,那么,耦合的代码会到处出现.没有一个架构,那么,代码会是各种混乱,我深有体会. 混乱,看起来问题不大,对于小规模的app,因为,我始终还是可以花时间读懂它.但是,随着app的功能越来越多,那么,你每次添加一个功能或者修改一个功能的时候,你会发现:1.你做的功能和之前做的功能,有重复代码.2.你难以快速完好,正确的修改一个功能,因为代码过于耦合,因为代码层次不清楚. 总之,过去的经验告诉我,要对一个Ap

linux架构学习第二十五天HTTP协议详解

内容: 1.http协议概述 2.http协议特点 3.http的工作模式(过程) 4.http请求报文.响应报文格式.常见状态码解析 5.web资源概述(静态资源.动态资源) 1.http协议概述 http协议工作在TCP/IP模型的应用层,其定义web服务间通信的约定通信方式,HTTP基于tcp传送数据,默认是80端口(服务器端) 几个名词: http:hyper text transfer protocol,超文本传输协议,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(