我正在参与「掘金启航方案」

  为什么一定要有分层架构?本文的意图是把架构的效果讲清楚,运用分层架构是为了处理实践开发中遇到的哪些问题。

1、架构能带来什么优点?

  先来简略的罗列一下架构有或许可以带来的一些优点。

1、健壮性:健壮性指的便是可以协助程序稳定的运转的任何的因素其实都可以归结为健壮性。

2、安全性:包含网络安全、代码安全,甚至是用户个人的账号隐私安全等等。

3、维护性:体现在多人开发以及代码规模胀大之后的维护本钱上。

4、可定制性:指的便是一个功用或者是一个模块可以被不同的需求定制成不同的形状。

5、可扩展性:指的便是添加新功用或者是扩展新的模块的时候,不会过多的依靠对现有代码的修正,能直接获得现有代码的支撑。

  这些都是软件架构可以直接带来的优点。健壮性和安全性都可以带来更好的用户体验。但架构能带来更多的,其实是工程师体验。一个好的架构,可以让运用它的工程师们感受到生产力上的提高。

  既然如此,架构可以带来的优点是不是包含研制功率呢?这个问题要分开来说。架构的实质其实便是一种通过技能手段来完成的编程标准。

  在架构标准之下,假如要确保以上这些优点,是有或许造成研制功率的下降了。那么从单一功用的视点来说,比如说咱们假如随性的把所有的事务代码和UI的完成都写在一个Activity里,是有或许很快的去完成一个功用的。但这种完成就没有可维护性可言了。

  反过来说,假如咱们的项目中没有对可定制化方面的需求,可是咱们花了很多的时间选择了一个以可定制为方针的架构。那么在完成功用时就会支付一些不必要的工作量,这便是架构过度设计的情况。从这个视点来说,架构是有或许妨碍咱们的研制功率的。可是从整个工程的视点来说,可维护性的提高,可扩展性以及可定制性的完成,都会带来更好的代码复用,更低的维护本钱,都是人力本钱的下降。从工程功率上来讲,对研制功率是会有更大的提高的。

  刚刚说的这些优点其实还比较抽象,咱们就来看一些更详细的优点。

第一个便是有了架构之后,咱们就可以用相同的方法来处理类似的问题,完成类似的功用。这个就叫做方法共同性。方法共同性有助于提高代码的可维护性以及代码的健壮性。复用现有的方法来完成类似的问题,更不简单出bug。

第二个便是可以让不同功用之间的数据来源保持共同,也便是数据共同性。或许有的同学会觉得确保数据共同性不是什么难事,比如数据都是从网络获取的,那么咱们是不是只要确保服务器不出错,客户端就不需求考虑数据共同性的问题?其实,恰恰是客户端更容会出现数据共同性导致的问题。多页面、多线程,甚至多数据库之间的数据同步都是十分简单出现问题的。

第三个便是可以让页面实例的生命周期的办理保持共同,也便是生命周期共同性。从客户端的视点来说,需求办理的生命周期还是十分多的。

第四个便是团队开发中可以运用相同的代码风格,也便是风格共同性。这四点其实都是处理了共同性的问题。

  也便是说,咱们架构的一个优点,便是可以协助咱们确保共同性。确保共同性的意图便是为了让不同的工程师完成出来的代码尽量是共同的。让不同页面不同功用之间的数据源生命周期也尽量是共同的。

  除此之外还能通过架构来确保对一个功用的修正,不影响其他功用。 可以让一个模块只有一个责任,契合单一责任准则。 削减功用之间的依靠。 通过依靠倒置去躲藏一些细节。

  这些优点总结一下,其实都是为了确保高内聚和低耦合。

什么是分层架构?

  分层架构。分层架构可以说是运用的最广泛的架构形式。最经典的分层架构便是把架构像这样分成三层,包含用户界面层、事务逻辑层以及数据拜访。层与层之间的关系是自上而下的依靠,不能逆向的去依靠。

  作为一个完好的分层架构,每一层的责任都是固定的,每一层完成方法的改动也不会影响其他层。依靠关系也是自上而下的单向依靠,事务代码会散布在这三层里,不同事务之间的代码有必要也要横向的解耦。

什么是分层架构,有什么好处

分层的根据是什么?

  1、要契合重视点分离的准则,每一层的重视点应该是不同的。
  层与层之间自下而上,应该是从机器到用户,从抽象到详细,从通用到事务。每一层各自重视各自所抽象的层次。比如说数据层会更倾向于底层的存储,而用户界面更倾向于用户的操作。数据层更原始和通用,用户界面更可以代表事务,便是自下而上。用户界面层最好只关怀页面怎么制作,用户怎么接受事件。数据层最好只重视底层的数据怎么存储和怎么提供给上面的层次。

  2、要重视修正技能方案或者是修正代码的时候所带来的对其他层次的影响。
  比如说咱们把UI层的技能完成方案,从XML 完成的 view 布局改成了 JetPack Compose 来完成。它也不应该影响到数据层的正常运转。反过来,假如数据层修正了一些数据库的拜访方法,也不应该带来事务上的改动和UI层的制作上的改动。

总结

咱们最终再来总结一下架构带来的优点。最重要的便是两方面。

1、可以让整个使用有更好的共同性,削减团队开发中遇到的各种妨碍。
2、可以让整个使用的代码到达一种高内聚和低耦合的状态。

最终再总结一句,架构其实并不是让写代码更简单,架构的效果是可以让咱们更好的去办理代码。