app组件化显然分两种:
1.基础组件组件化。
对基础的操作进行组件化。这种组件的通用性很强,本质是通过私有库来实现代码分割。一个组件就是一个私有库。很多公司在做基础组件,做业务组件的不多。基础组件可以依赖其它的组件,它和它依赖的组件是独立的,不能直接访问app应用的对象,变量,函数。如何解决基础组件间的互相依赖,也就是基础组件间的解藕?通过设置代理和block来解决。我倾向于使用block。
2.业务组件化。
就是为了实现一定的业务来抽象出来的私有库。它通常包含一定的页面或一组相关的页面。由于直接参与业务,所以它的抽象层次很高,可复用性比较低。大家知道传统的页面间跳转是通过在前一个页面生成另一个页面的对象软后pushViewController或presentViewController到另一个页面,这样肯定没有办法实现带页面的业务组件。如何实现页面间的跳转,也就是如何解藕业务组件?我们是使用的蘑菇街页面跳转来实现的解藕的。由于业务组件可复用性比较低,所以很多公司没有公司没有实现业务组件化。当然现在比较流行sdk开发,sdk也可以做成业务组件。为了不打破app原来的色调,所以sdk很少包含页面的。
页面跳转如下:
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; [userInfo setSafeObject:self.auctionListEntity.auctionSpecialLiveEntity forKey:@"auctionSpecialLiveEntity"]; [MGJRouter openURL:@"gb://auctionSpecial" withUserInfo:userInfo completion:nil];
可见,页面间的跳转没有使用另一个页面的类命。
很多人搞不清楚组件和app架构等基本概念。
mvc和mvvm指的是架构。它只是已经代码组织形式。它是一种看不见摸不着的概念。
蘑菇街跳转基础组件不是蘑菇街架构,它只是页面跳转的解藕方式,它也方便了实现mvvm架构的实现,属于它是一种看得见的技术。
组件本质就是私有库,它是看得见一堆相关文件。
蘑菇街的框架是包含一组技术,蘑菇街的页面跳转只是一种页面跳转技术。
所以别把组件当架构理解了,更别把蘑菇街页面跳转当app框架理解。