之前写的感觉有点乱,把架构的设计图先放上来吧,对照着说。

CAMCOCO架构能够支持的模型:

1、B/S程序,比如CRM什么的,和访问普通网站没什么区别,都是从WEB服务器上进行操作;

2、APP的服务器端程序。APP可以是原生的,也可以是HTML5的。APP都通过WEB服务器获取REST数据进行访问,保护SOA的安全性;

3、WINFORM程序的服务器端;

从设计图上可以看出,老胡把客户端(使用场景)分为了三类:

1、不可信远程客户端:意思是可以被任何用户使用的,我们无法确保用户不会通过URL欺骗、COOKIE欺骗等等非法访问的情况,SOA服务的访问需要一个secrtKey,这个秘钥是不能被客户端掌握的,这种情况下,这类不可信客户端只能通过WEB服务来作为跳板访问SOA,而SOA的秘钥则保持在WEB服务里,不直接交给客户端。

2、可信任的远程客户端:在局部范围内使用的一些场景,用户身份和安全性是可以得到保证的,他们不会进行各种欺骗或尝试破解获得SOA秘钥。那么他们可以直接访问SOA服务进行操作。

3、可信任的本地客户端:有一些本地化的服务,比如我们引入了消息中间件后,需要做一些消息队列处理的服务时,就可以跨过SOA直接访问业务层了。

WEB服务和SOA服务的集群化

集群化是一个比较高大上的名词,其实老胡就是把各种服务给分解开来,从功能模块级就开始进行解耦。

例如一个CRM里,老胡将功能系统进行拆分:

WEB集群

1、框架WEB: framework.camcoco.com

2、身份验证WEB服务:passport.camcoco.com

3、组织架构管理WEB服务:org.camcoco.com

4、客户管理WEB服务:customer.camcoco.com

5、订单管理WEB服务:order.camcoco.com

6、....

SOA集群

1、身份验证SOA服务:soa_passport.camcoco.com

2、组织架构管理SOA服务:soa_org.camcoco.com

3、客户管理SOA服务:soa_customer.camcoco.com

4、订单管理SOA服务:soa_order.camcoco.com

5、...

框架WEB负责加载一个CAMCOCO的Client Framework,里面包含了一堆老胡写的JS,比如AJAX调用、场景保持及还原、数据提交验证、CSS样式等等。

其他的WEB服务都是一些轻量级的服务了,比如客户管理里面,就只做和客户相关的功能,比如客户列表、查询、新增、维护等等。

每个WEB服务后面是一个对应的SOA服务,WEB服务负责接收客户端数据然后转交给SOA进行处理。

这样拆分之后,今后老胡要做一个新项目,里面也用到组织架构、身份验证、客户管理、生产管理,那我们直接就把之前的服务调用过来,然后新做一个生产管理就行了。(当然这是理想情况,客户管理模块多半还是要修改的)

如果卖出一套程序给某家用户后,用户说客户这里我需要进行一些修改,那我们能很方便地定位到客户这个模块中,无论是从业务层开始修改还是只修改界面层,都是很方便的。同时在更新的时候,不会影响到其他功能模块的正常使用。

至于业务层,老胡设计的实体中不包含操作方法,所有的操作都是放在聚合中进行,实体只负责数据合法性验证。SO,老胡认为实体是可以交给之上任意层使用的,这样在各层间传递参数时就可以直接传递实体对象,而不需要设计复杂的接口函数将实体的各个属性分别传递下去了。

业务层里针对不同的服务包含了N多的业务单元,如上面的例子,那么里面就至少会包含CAMCOCO.Business.Customer和CAMCOCO.Business.Order,至于每个业务单元如何去设计,就根据需要了,比如你要用到消息中间件减轻压力,比如要用到IOC实现业务灵活转换。

总之,CAMCOCO设计的初衷就是:

1、每个业务都是可拆分可组合的,不同的系统可以共用尽量多的业务模块;

2、在框架允许范围内,尽量少的编写代码,且代码是尽量规范的;

3、单独业务(核心业务除外)不会影响全局系统的运行,不同业务可以交由不同人员完成,每个业务的不同层级也可以交由不同人员完成。

GO ON...

[CAMCOCO][C#]我的系统架构 总图的更多相关文章

  1. [CAMCOCO][C#]我的系统架构.服务器端.(四)----Model层 实体的自我验证

    这是Model的第二篇,上一篇点这里 这块完全是扒了@何镇汐大神博客里的教程实现的,在这之前完全没想到数据验证居然可以这样做!!在此表示严重感谢!!! 点击这里可以去了解这个方法的原理,老胡估计自己是 ...

  2. [CAMCOCO][C#]我的系统架构.服务器端.(三)----Model层

    我估计一片帖子写不完这个,慢慢来吧... 先上个图,按照图来说明应该容易说清楚一些. 在Model Core核心代码中,老胡创建了一个类 CAMCOCO.Model.Core,要求今后在Model L ...

  3. [CAMCOCO][C#]我的系统架构.服务器端.(二)----DATA层

    这一层在园子里有很多很多的介绍了,这层写好之后老胡也没多研究,基本上就是参考的园子里大咖们的写法,具体的说明老胡也细说不了了,把接口和思路简单描述一下就好,如果有问题还是那句话,感谢您不吝赐教,老胡这 ...

  4. [CAMCOCO][C#]我的系统架构.服务器端.(一)

    尽量少的前言 虽然写了N年代码了,但总觉得什么东西都是囫囵吞枣,无法尽得其精髓.最近整理了一套心目中的架构,如有错误之处,烦劳不吝指正,老胡在此不胜感激!! 第一篇 我心目中的架构 做了无数个系统,写 ...

  5. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  6. 千万pv大型web系统架构,学习从点滴开始

     架构,刚开始的解释是我从知乎上看到的.什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像.更抽象一点,说架构其 ...

  7. [网站性能1]对.net系统架构改造的一点经验和教训

    文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...

  8. 5G系统架构

    原文标题:迈向5G之路,颠覆性的5G系统架构?   本文部分图片,资料摘自<迈向5G C-RAN:需求.架构与挑战> 突如一夜春风来,随着Polar码与LDPC码作为5G编码候选方案,通信 ...

  9. 异构(兼容dubbo)SOA系统架构(.net)优化升级

    前面一片文章已经提到我司的异构(兼容dubbo)SOA系统架构,解决了不少技术痛点,也还算比较完善,也顺利推广开来. 但作为项目的开发者,自己产品的问题心里是清楚的,离自己满意还是有不小的距离. 在推 ...

随机推荐

  1. ARM体系架构下的同步操作

    http://blog.hamobai.com/2012/06/28/synchronization-on-ARM-one/ 处理器在访问共享资源时,必须对临界区进行同步,即保证同一时间内,只有一个对 ...

  2. 理解MapReduce哲学

    Google工程师将MapReduce定义为一般的数据处理流程.一直以来不能完全理解MapReduce的真义,为什么MapReduce可以“一般”? 最近在研究Spark,抛开Spark核心的内存计算 ...

  3. 使用NSData来加载文件

    1. Loading Data from Files and URLs // Assuming that there is a text file at /Examples/Test.txt: NSS ...

  4. Codeforces Round #180 (Div. 2) C. Parity Game 数学

    C. Parity Game 题目连接: http://www.codeforces.com/contest/298/problem/C Description You are fishing wit ...

  5. 关于View端

    View--------------Request 1 URL vs n View 同一个URL可以对应多个View, HTML(通过Request请求获得) 例如SAO项目中的step1--> ...

  6. HDU1003 Max Sum(求最大字段和)

    事实上这连续发表的三篇是一模一样的思路,我就厚颜无耻的再发一篇吧! 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 -------------- ...

  7. Lvalue, Rvalue, Xvalue, Prvalue, Glvalue

    c++11中关于什么是lvalue, 什么是rvalue, 什么是xvalue, 什么是prvalue, 什么是… 一直搞得我晕头转向的, 今天下定决心一定要把它搞定, 写了一个程序来判断lvalue ...

  8. oc-15-匿名对象

    /** 匿名对象 1.访问成员变量--->只能给成员变量设置值,只能成功1次,每次都是新的对象. 2.调用方法时类似类方法: 跟类方法区别:匿名对象创建对象了,开辟空间了. */ #import ...

  9. mysql 升级方法

    Performing an In-place Upgrade This section describes how to perform an in-place upgrade. Review Bef ...

  10. ext2磁盘布局

    概述           本篇博客主要关注ext2文件系统的磁盘布局,即ext2会在格式化时将磁盘划分成什么样子.   ext2磁盘布局   任何Ext2分区中的第一个块从不受Ext2文件系统的管理, ...