以上三种方法我都见到过,不合方法对代码的影响也不合,这是个典范的例子,一个完全 App 里往往有多个类似 UserSession 须要被多处引用的对象,三种方法最后都不会影响功能的┞俘常实现,但在代码浏览保护上存在一些差别。
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
比来看了不少代码,想起写代码有意思的处所之一在于,实现同一个 feature,修复同一个 bug,不合法度榜样员可以写出风格迥异的代码,甚至流程也不合,固然最后都可行,大年夜结不雅论的角度对用户来说是一致的。我们可以称这种差别为小我 taste,taste 有短长高低之分,但有时刻若何评定却很难有一个清楚精确的界定标准,一般来说代码是越简单越清楚越轻易测试越好,但简单清楚轻易测试又是另一个维度的标准,又会产生不合,真要较真起来可以无穷无尽越扯越远。
我有个小例子,大年夜家可以按本身的经验来分个好坏。
UserSession
问题:ControllerA,ControllerB,ControllerC 都须要拜访 UserSession 实例,若何传递?
方法一:构造传递
所有的 Controller 在 init 办法里都传入 UserSession,之后再内部持有一个 strong property,类构造如下图:
如不雅应用这种方法,所有须要引用 UserSession 的处所都须要以 init 的方法传入,包含 Controller 内部的 View、Presenter 等对象,View 可能还有子 View,层层叠叠以树形构造,UserSession 将涌如今每一个相干 Class 的 init 办法之内。
方法二:办法参数传递
Controller 本身并不持有 UserSession 的实例,每个须要用到 UserSession 的办法以参数传入,如下图:
这种方法相较方法一,UserSession 作为每个办法的参数将涌如今更多的处所。显然,不持有 strong property 有他的好处,比如不会出现 Controller 无法释放导致 UserSession 也无法烧毁的情况。UserSession 和 Controller 之间的依附关系也更清跋扈,看 .h 中的办法就一目了然。别的须要测试某个办法的时刻,要比较轻易,办法的声明里就有完全的 context。
方法三:内部直接持有
Controller 在 .m 文件内部经由过程另一个 UserMgr 实例来同一获取 UserSession,如下图:
只要涉及用户登录的 App,都少不了有个 UserSession 的类,记录和用户相干的一切数据和行动,并在用户登出的时刻做烧毁。UserSession 是一个一旦创建之后,大年夜部分的营业模块都须要拜访的实例对象,其他 class 若何拜访 UserSession,或者说 UserSession 若何传递到各个 class,这琅绫擎的做法就多了。
这种方法在 .h 中看不出 Controller 和 UserSession 的关系,在 .m 中经由过程另一个类(xxxMgr、xxxFactory、xxxService)来获取 UserSession 实例。好处是 .h 文件干净一些,但 .m 中可能遍地都有获取 UserSession 的代码,一旦代码量多了之后很难理清 Controller 和 UserSession 二者之间的依附关系。
【编辑推荐】
- 安卓单位测试全攻略,让代码测试一劳永逸
- Google颁布I/O 2017 for Android的源代码
- 不须要写代码也能赞助你开辟App的七大年夜神器
- iOS自定义启动界面 附代码
- 阁下脑测试小法度榜样被微信封禁:谜底是随机的,代码是抄来的
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 摘要:若何保护微办事,确保>>>详细阅读
本文标题:iOS代码的taste(品味)
地址:http://www.17bianji.com/lsqh/38940.html
1/2 1