使用同一的接口应对多处“模糊化”的代码

好久没写东西了,近一段加班比较多,还要看房子,前几天才把房子定下来,算是搞定了一件大事情,有点时间忙自己的事情。

去年底的项目目前已经在内测期了,内测期里暴露出了很多问题,做出了很多大的调整。这些调整又大又急,让代码问题暴露很严重,这些慢慢记录下来。

今天先记录一个“模糊化”的问题,也可以说是强转类型的问题。

举一个比较简单的例子:对RootViewController的模糊化导致的问题。项目在A版本时,RootViewController是TabbarVC,到了B版本时由于精简部分功能,调整了首页结构,使用了一个三方库的抽屉效果,RootViewController是DeckVC。这个时候我们可以就意识到了,获取到RootViewController后接下来的push、present、强转取值赋值等等之类的操作会导致异常。由于没有一致的对外接口,在取值到RootViewController后,如果需要进一步往下进行我们往往会进行强转,这些强转的代码分散在项目的各个地方埋下了定时炸弹。

在写代码的时候,为了安全我们尽量不应该使用强转,除非很肯定现在以及未来这里的类型不会因为其他情况作出调整才会使用强转。同时,由于强转之后代码监测的隐蔽性,躲避了编译的警告,使得我们在编译期间很难去发现这些异常,在运行期间如果不触发也不会发现,这就为以后上线之后埋下了隐患。

处理方式:针对需要使用RootViewController进行操作的地方统一使用接口返回,例如需要取到RootViewController的主nav进行push,就定义一个接口名为currentNavigationVC,在此接口中统一处理。虽然在版本更替的大改动时也需要处理,但统一处理保证了代码的一致性和安全性,有问题也可以尽早发现。

另外上面说到了可能对RootViewController进行赋值和取值,除非是和RootViewController生命周期同步的值操作,否则这里并不建议对RootViewController进行值操作,数据值操作可以使用数据单例或者AppDeleaget进行承载。

你可能感兴趣的:(使用同一的接口应对多处“模糊化”的代码)