【PaPaPa】系统架构搭建浅析 - 人人可以搭架构

声明

【PaPaPa】这个项目是以技术分享与研究为目的而做的,并非商业项目,所以更多的是提供一种思路,请勿直接在项目中使用。

上一篇隐藏开源项目地址实属无奈,为了寻找一起做这件事的同伴不得已刷了一天推荐,在此希望大家能够理解。

从此篇开始将完全公开项目地址以及所有项目中涉及到的细节,包括文档、讨论过程、设计思路、实现方法全部整理出来写成一个系列,这个将在后续文章中一一揭开,敬请期待。

本项目与博文系列将秉承着“授人以渔”的方式写作,尽自己绵薄之力为C#出一份力以回馈我从C#中得到的快乐和生活上的改善。

同时因为本项目不涉及分布式和大数据方面的内容,所以本博文系列也不会有这方面的内容,即便是应用了Redis,也只是以缓存的方式来使用。

最后本着不想误人子弟的想法,欢迎各位同行斧正错误!

什么是软件架构

软件架构分逻辑架构、物理架构、系统架构。

一般情况下系统架构师会出起码包含以上3个部分的文档,而部分分工明细的公司,物理架构关于服务器配置与网络的章节由运维部(或其他类似职责部门)来补充或修改。

有此可以看出一个合格的系统架构师,他/她的知识广度是很恐怖的。

当然本文并不是一个维基百科或百度百科,所以只是浅谈即止。

系统架构如何产生

首先明确一点的,万能是因为它是一个兼顾与取舍的博弈,没有一个系统架构可以拍着胸脯说:我可以应用到任何场景。

系统架构与业务有着强烈的依赖关系,业务左右系统架构,而系统架构有时在特殊情况下也可能会影响业务做适当调整。

既然说到业务左右系统架构,那么很明显,要先有业务才有系统架构。

需求文档

需求文档是业务的可视化输出。正常情况下此文档由产品经理或需求专员来撰写,用来描述软件所包含的业务。

下面我们只简单的拿个【PaPaPa】项目在建立时‘老虎’随手画的2个脑图,现在的需求文档已经从v0.1-v0.4了,目前正在整理新版中,预计下周会出。

上面2副只是其中讨论过程中出现的比较典型的而已,当然正式的需求文档肯定不会是这个样子了。

系统架构搭建过程
  浅析业务模块

从上面图中可以看出大概分为Web端和移动端两个大的部分,

由于急着赶出一个雏形,我们当时确定了移动端的放到后面再做,所以暂时仅仅考虑了扩展而没有规划。

虽然延期了,但是系统架构搭建时必然是要考虑到这点的,否则后面的修改会让你很是头疼。

  解决方案文件夹

解决方案文件夹有助于帮助我们将类库进行归类,比较常见的是类似下面这样

当然,根据每个人的喜好命名会有所不同,有的项目需要可能会没有Test,也有的可能会把Business和Core合并等等。

而我们的划分则是上图这样,区分业务和核心是因为核心层提供了底层的数据操作。业务来组装这些操作来满足业务需求。

而这一块则是配合上面说到的,将来要做移动端,而移动端业务跟Web端是有一些差别的,不论是从接口数量还是接口内容都会有出入。

  类库命名

以业务层为例,PaPaPa.Web.* 为一组。

其中PaPaPa则是项目名称,Web则是分属哪一个业务模块,那么移动端的命名呼之欲出的方式则可能是 PaPaPa.Mobile.*

  如何区分核心层、业务层、基础设施层

由于其他分层并没有什么可想说的内容,所以其他的就忽略了。有疑问可单独提出。

我们先简单了解一下:

核心层:被业务层包围,给业务层提供底层操作支持,如DB、缓存等。

业务层:借助核心层提供的功能封装不同模块的业务。

基础设施层:给所有的层提供最基础的底层支持(不包含任何业务逻辑),以PaPaPa项目为例,包括但不限于:通用缓存操作(缓存监控)、通用类库、DB操作、通用的模型与实体映射、缓存操作。此层还应该有很高的移植性,在创建新项目时,此层可直接拷贝使用是一个隐含的标准。

在创建新的类库时,根据当前类库所承担的责任将其放到对应的层级中是对一个类库在系统中所处角色的一个重要的标识。

如果你不小心把一个处于核心层的类库放到业务层,后果则是出现各种冗余代码,因为不同业务模块间按理说是不允许互相重用的,除非你再创建一个 PaPaPa.BasicBusiness.* 类似这样的一个专门归类基础业务的模块。

当然这只是从合理角度来说的,如果设计者到后期无法维护自己心目中的系统架构时,则会出现各层级交叉调用的一种混乱局面,而那时,项目的维护成本将会很高!

  类库职责划分

有不少同行看到我的类库后觉得类库数量太多,有些类库内没几个类表示不解。

其实类库内类的数量多少不是关键,关键是类库的职责是否有明确划分,否则就会变成各个功能放在同一个类库。

一方面是会导致类库内文件夹层级过深,另外一方面则是升级时不相关业务会因为升级而中断,最最总要的一方面则是加大系统分层的难度,因为一个功能庞大的类库很可能会跨多个层级。

下面是PaPaPa项目中每个类库所担任的职责,这只是众多分类方式的一种。

只要你在做类库划分时,按照一定的规则来归类即可。

这能让开发者更明确的知道系统搭建者的意图。

源码

这只是这个系列的一个开篇,后面会把我们在写这个项目过程中的一些比较重要的环节以及实战经验加入到其中。

当然会包括很多人关注的缓存决策,如何在不破坏系统搭建意图的情况下加入新的底层支持。

简单说下,缓存决策又分自动决策和手动决策两部分,底层支持跨了2个层级,且因为灵活性问题部分区域为何放弃自动决策。

当然了,这个说起来名字很高大上,其实也就是普通的C#语法的一个组合罢了。

最后,源码地址:http://git.oschina.net/doddgu/PaPaPa

时间: 2024-11-08 21:53:25

【PaPaPa】系统架构搭建浅析 - 人人可以搭架构的相关文章

用c#开发微信 (11) 微统计 - 阅读分享统计系统 1 基础架构搭建

微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享与来源统计及手机网页在朋友圈的传播路径分析. 本系统使用最传统的三层架构.本文是微统计的第一篇,主要介绍如下内容: 1. 数据库设计 2. 数据访问框架层及数据实体层 3. 数据访问层 4. 视图实体定义层   下面是详细实现步骤: 1. 数据库设计 阅读记录 PageNav 分享记录 PageSh

LAMP架构搭建+Discuz论坛搭建【weber出品必属精品】

一.     本机简介: 本机系统: CentOS-6.4-x86_64 主机名:oracle.ywb IP地址:192.168.146.129 二.     在Linux环境下安装Apache步骤 首先将准备好的文件通过PSCP发送至Linux的/Root/test/soft目录下 在windows下按住Ctrl+R,打开运行,输入CMD进入DOS命令行.在dos命令行中使用pscp –scp  命令将要上传的文件上传至Linux中. 上传成功后.我们总共要安装四个文件.第一个我们首先解压:a

drbd+heartbeat+nfs高可用架构搭建

一.客户需求 1.需求描述 有些客户有自己的存储设备,但是并没有集群文件系统服务,所以如果我们多个节点(计算节点)如果想同时使用其中的一个块且要保证高可用的话,就需要我们自己来完成类似集群文件系统的服务组合,在此我们使用的服务组合是:iscsi共享+drbd+heartbeat+nfs. 2.服务说明 Iscsi共享:这里通过iscsi共享服务将存储设备上的存储块共享出去,提供节点(NC1+NC2)使用,此处我们将在iscsi服务短创建两个镜像充当块设备. Drbd   :服务器之间镜像块设备内

Linux之LAMP架构搭建配置

Linux之LAMP架构搭建配置 LAMP简介 LAMP定义指Linux(操作系统).ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台. 对于大流量.大并发量的网站系统架构来说,除了硬件上使用高性能的服务器.负载均衡.CDN 等之外,在软件架构上需要重点关注下面几个环节: 使用高性能的操作系统 (OS) . 高性能的网页服务器 (Web Server) .高性能的数据库(Data

系统架构师-基础到企业应用架构-客户端/服务器

开篇 上篇,我们介绍了,单机软件的架构,其实不管什么软件系统,都是为了解决实际中的一些问题,软件上为了更好的解决实际的问题才会产生,那么对于单机软 件的架构则也是在不断的变化和发展,当然好的软件架构会对软件的生命周期起到决定的作用.好的软件架构,无疑会延长单机软件的生命周期,同时适应后期的不断的衍生的需求变化,.NET FrameWork的架构设计和体系结构设计,我相信是非常优秀的. 本篇,将会讲述大家比较常见的架构模式,客户端-服务器的模式,可以理解成C/S架构模式.现在的C/S架构已经从原来

Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境

原文:Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. The Raspberry Pi Foundation 是英国一个致力于科技推广的慈善组织,为广发爱好者和DIY科技迷开发了搭载ARM架构处理器的 mini 电脑 Raspberry Pi 并获得了成功.而微软最新发

android开发之-win8上安装linux系统,搭建Android开发环境

本文假设您不熟悉linux上搭建Android开发,为初学者准备. 一.为什么要学习linux编程? 众所周知,在企业实际开发中linux是十分重要的,多数的服务器是linux系统上搭建的.对于我们学习Android开发的人而言,Android的系统的底层也使用linux构架的,所以学习linux上Android开发,对我们的帮助是不言而喻的.可以是我们熟悉linux简单使用.开发,对以后走向更高层次有较大帮助. Android系统架构图 二.怎么搭建linux上的Android开发环境? 2.

iOS蓝牙架构搭建-2

蓝牙架构的搭建 前言:笔者认为,如果只是单纯的传授大家代码怎么敲,那么大家很有可能在实际开发中难以运用.刚好本人曾经参与过多款智能硬件开发的架构搭建,本小节本人就现场带领大家开发出一个通用的蓝牙工具类 既然是工具类,虽然大家以后可以在开发中直接拿去用,但是我的目的是想要传授给大家架构的思想,而不是教大家如何偷懒 为了能够让大家对蓝牙通讯理解的更加的透彻,本人专门买了一个小米手环,并且经过大量的测试,破解了部分小米的蓝牙协议(小米手环蓝牙数据是没有加密的)  只有对技术执着的追求,才能造就更高的品

c#项目架构搭建经验

读过.Net项目中感觉代码写的不错(备注1)有:bbsMax(可惜唧唧喳喳鸟像消失了一样),Umbraco(国外开源的cms项目),Kooboo(国内做开源cms).本人狭隘,读的代码不多,范围也不广泛. 你是否一直渴望自己能开发出一套系统架构,让人读起来感觉到程序有条理,结构很合理. 好的架构师需要具备:   1.项目经验丰富.(应该是从一堆堆项目中走出来的,丰富的经验比大篇大论的理论更深刻.) 2.知识的全面性,基础的扎实程度.(知识的全面性不要求你什么都知道,起码要能熟练掌握WCF,Sil