? 架构漫谈:从架构的角度看如何写好代码 - 企业架构 - 教育心理学
教育心理学,在线教育

产品分类

联系我们

联系人:经理
联系电话:13739411
电 话:13949134
电 话:030919
传 真:0306987
400免费热线:58-119
邮 箱:1500223288@qq.com
地 址:教育心理学官网怎么样南工业区
网 址:http://www.njhgdz.com

新闻中心

当前位置: 首页 > 新闻中心

架构漫谈:从架构的角度看如何写好代码 - 企业架构

日期:2019-06-11 13:18         本文来源:教育心理学

  学校设立奖学金和减免学费基金,奖励品学兼优的学生,帮助贫困生完成学业。在广州及珠江三角洲地区建立了几十家固定的实习基地,供学生进行专业实习。每年有省内外近200家企业单位到校招录毕业生,学生就97%以上。学校与广东工贸职业技术学院联合开办“3+2”中高职衔接班;与广东省外语艺术职业学院等院校合作开展成人教育;2010年与新西兰怀卡托理工学院合作开展国际化办学,为学生继续升学创造条件,形成了多元化、多层次的办学格局。

  徐志摩说:“当月光将花影描上石隙,这粗丑的顽石也化生了媚迹。”电子商务的同学们正是利用自己的妙手,为福大增添了一抹青春靓丽的颜色。

架构漫谈:从架构的角度看如何写好代码 - 企业架构

这样,就划分成了几个责任:Service就专注于user的需求,并组合GlueCode提供的服务完成需求。 GlueCode专注于组合business的调用,管理Business里面对象的生命周期,并且通过Repository保存或加载Business的状态Business专注于实现业务的核心模型。 Repository专注于数据的保存,并和存储设备一一对应。

大家注意看,还是树形架构。 并且左侧的主要需要计算机的相关理论知识,并且要直接面对用户的需求。 右侧的更多的需要面对业务的核心。

只要这几块的开发人员互相商量好了接口定义,这几个部分的开发就可以并行的进行,极大的提升开发的效率,缩短开发的时间。 要做好这几部分,还需要注意,逻辑只允许存在于Business中,Service、GlueCode、Repository都不允许存在业务逻辑。

为什么呢?首先我们来看看什么叫业务逻辑。

什么叫业务逻辑?首先这个定义的前提是指软件代码中的逻辑,不是现实生活中的逻辑。 在软件代码中,不需缩进和计算的顺序调用,包括缩进的代码目的是catchexception的,都不算逻辑,除此以外都是逻辑。 以下用严格的顺序调用来指代这种代码。

因为顺序调用是计算机的特性,由编译器来决定的,当然最本质的是因为我们计算的基础都是图灵机。 在现实生活中,顺序调用也是逻辑,大家不要和我们这里说的业务逻辑相混淆。 为什么说除了Business代码中有逻辑以外,其他地方不能有逻辑呢?我们每个部分分别分析:如果service里面不是严格的顺序调用,有很多分支,那么说明这个service做了两件或者两件以上的事情。

必须把这个service分拆,确保每个service只做一件事情。

因为如果不这么分拆的话,一旦这个service中的某各部分发生变动,其他的部分的执行必定会受影响。 而确定到底有哪些影响的沟通成本非常高,其他相关利益方没有动力去配合,我们往往不会投入精力仔细评估。

最后上线会出很多不可预料的问题,最终会导致损失用户的利益,并且肯定会导致返工,损坏自己的利益。

如果是有计算的逻辑的话,比如受益计算,订单金额计算等,那么这部分应该是Business代码需要完成的,不能交给service代码来实现。 GlueCode里面如果不是严格的顺序调用,同理会和service一样遇到同样的问题。 Repository里面如果不是严格的顺序调用,包括存储访问的代码里面(比如SQL),会导致逻辑进入到存储设备中。

存储设备的主要目的是拿来存储的,一旦变成了逻辑计算的主体,就会导致存储设备无法通过增加机器的方式横向扩展长大。

这个时候就没有架构了,只能换性能更好的机器,这个叫scaleup。

只有scaleout才能算架构。

以上都会导致架构无法快速的横向扩展和分拆,并且增加了修改的成本,这些是不符合开发人员以及业务的利益的。

这么做的好处有哪些呢?Service、GlueCode、Repository里面的代码是严格的顺序调用,那么这些代码只要做连通性测试即可,不需要单元测试。

因为这些代码都需要和很多上下文打交道,很难做单元测试。 这样才算是真正的组合。

Business不访问任何上下文,不访问任何具体的设备,所以这部分代码是非常容易些单元测试的,并且单元测试必须100%覆盖。 因为其他地方没有业务逻辑,所以一旦有问题,就可以断定是Model的问题,单元测试肯定可以发现。

如果单元测试没有发现问题,那么单元测试一定有问题。 线上问题的模拟也就变得非常的简单,单元测试也能够得到进一步的补充。 Repository很容易按照存储设备本身的最小访问粒度来完成工作,比如DB,完全可以做到单表访问。 因为这个时候存储设备只关心存取数据,完全和业务没有关系。 做表的分拆也是非常容易的事情,存储设备通过增加机器就可以横向扩展长大。 很多人会担心说,没有了join,访问DB的次数是不是更多了,会导致性能下降?按照现在网络的条件,网络访问和DiskIO访问的差距已经不大了,合理的设计下,多访问几次DB并不会导致这个问题。 另外如果多台DB的话,还能通过并行加速访问。

由于Service、GlueCode、Repository代码简单了,才可以让我们的开发人员投入更多的时间研究业务,毕竟这部分才是软件所真正服务的对象。

我们再来看一个实际的例子,如下图所示:。

  • 教育培训机构
  • 网站首页|公司简介|产品展示|新闻中心|客户分布|资质荣誉|联系我们|网站地图