04 | 项目大了人员多了,架构怎么设计更合理?

我认为学习总结,要有所总,所结,就是有归纳后,能用自己的话告诉别人!有所结,就是有所收获输出,一般我认为是思维导图

所以,接下来我们就不得不考虑模块粒度如何划分、如何分层,以及多团队如何协作这三个问题了

对于 iOS 这种面向对象编程的开发模式来说,我们应该遵循以下五个原则,即SOLID 原则。

单一功能原则:对象功能要单一,不要在一个对象里添加很多功能。

开闭原则:扩展是开放的,修改是封闭的。

里氏替换原则:子类对象是可以替代基类对象的。

接口隔离原则:接口的用途要单一,不要在一个接口上根据不同入参实现多个功能。

依赖反转原则:方法应该依赖抽象,不要依赖实例。iOS 开发就是高层业务方法依赖于协议。

协议式架构设计主要采用的是协议式编程的思路:在编译层面使用协议定义规范,实现可在不同地方,从而达到分布管理和维护组件的目的。这种方式也遵循了依赖反转原则,是一种很好的面向对象编程的实践。

但是,这个方案的缺点也很明显,主要体现在以下两个方面:

由于协议式编程缺少统一调度层,导致难于集中管理,特别是项目规模变大、团队变多的情况下,架构管控就会显得越来越重要。

协议式编程接口定义模式过于规范,从而使得架构的灵活性不够高。当需要引入一个新的设计模式来开发时,我们就会发现很难融入到当前架构中,缺乏架构的统一性。

虽然协议式架构有这两方面的局限性,但由于其简单易用的特点依然被很多公司采用。

另一种常用的架构形式是中间者架构。它采用中间者统一管理的方式,来控制 App 的整个生命周期中组件间的调用关系。同时,iOS 对于组件接口的设计也需要保持一致性,方便中间者统一调用。

在我看来,好的架构一定是健壮的、灵活的。中间者架构的易管控带来的架构更稳固,易扩展带来的灵活性,所以我认为中间者这种架构设计模式是非常值得推荐的。casatwy 以前设计了一个 CTMediator 就是按照中间者架构思路设计的。你可以在GitHub上看到它的内容。

可以看出,指定了对象名和调用方法名,把参数封装成字典传进去就能够直接调用该方法了。

但是,这种运行时直接硬编码的调用方式也有些缺点,主要表现在两个方面:

直接硬编码的调用方式,参数是以string的方法保存在内存里,虽然和将参数保存在Text字段里占用的内存差不多,同时还可以避免.h文件的耦合,但是其对代码编写效率的降低也比较明显。

由于是在运行时才确定的调用方法,调用方式由 [obj method] 变成 [obj performSelector:@""]。这样的话,在调用时就缺少类型检查,是个很大的缺憾。因为,如果方法和参数比较多的时候,代码编写效率就会比较低。

所以,在考虑架构设计时,我们更多的还是需要在功能逻辑和组件划分上做到同层级解耦,上下层依赖清晰,这样的结构才能够使得上层组件易插拔,下层组件更稳固。而中间者架构模式更容易维护这种结构,中间者的易管控和易扩展性,也使得整体架构能够长期保持稳健与活力。所以,中间者架构就是我心目中好的架构。

你可能感兴趣的:(04 | 项目大了人员多了,架构怎么设计更合理?)