「写死」是什么意思?写死还是不写死,这是一个纠结的问题。

程序员嘴里说的「写死」是什么意思?可以不写死吗?不写死就会增加难度吗?「写死」和「不写死」不可调和吗?究竟怎么决策选用那种方法?

今天谈谈这个话题,也顺便说下「打底数据」和「云端控制」的设计方法。

首先明确「程序员嘴里说的写死」到底是什么意思?本篇文章中,我们的举例都以客户端写死为例进行说明,其他程序亦然。程序员所说的是指对一些参数或配置写死。写死意味着除非发下一个版本,否则这个数据不可更改。比如微信下面的四个TAB,就是写死的,因为那四个TAB永远不会变。在程序实现的时候,程序员问是否要写死,其实是探求这里是否会变化。如果不变,那就写死。

不写死又会增加多大难度呢?

不写死意味着这个数据是变化的,可运营的,那这个运营数据应该在服务器端进行配置,再由客户端拉取下来,然后运行时启用新的配置数据,多出的成本是需要设计一条协议拉取这项配置或参数,然后应用到程序中,如果已经有这样的运营配置协议,那直接配置即可。

我们去兰州拉面,跟老板说,给我来碗“牛肉面,毛细,不要辣椒”,需求非常明确,所以上桌的面一定是这样,只要订单下了,基本没有任何变化的空间,除非你再要一碗。

而你对女友说:“下面给我吃”,你女友可能会给你用白水煮一碗面,然后问你“要什么调料”,这个时候,你就可以加上“饭扫光”,“老干妈”等一些调料了。

  • 二者的本质区别是一个发生在编译时,一个作用于运行时。
  • 二者并不互斥,有的时候是要一起配合的,既要本地写死,也要云端可控。

假设你是一个资讯客户端的产品经理,一个资讯客户端经常有这些TAB或者叫频道:推荐、热点、视频、本地、美图、娱乐、体育、汽车。

可这些频道的数据是可运营配置的,可以调整顺序,可以调整文案,可以新增一个频道(比如增加一个叫岛国的频道),也可以删除某一个运营效果不好的频道。

一个好的产品设计是,本地要默认写死一些频道,这些频道通常是一个资讯客户端不怎么变化的,每次都要展示的,这些成为打底数据或者叫default默认数据,如果没有这份写死的数据,你的客户端运行起来,就会头部没有任何信息,等网络数据回来才有展示,或者无网络时,就像出了bug一样没有任何展示。所以打底数据主要解决用户体验问题,无网络或初次启动时,给用户隐喻这个客户端已经在正常运行。

展示了打底数据之后,此刻发起云端请求,请求云端运营数据,拉取成功之后,将新的频道数据覆盖本地数据,如果此次请求失败,则继续展示本地数据,保障用户浏览。在拉取成功的情况下,应该把新的频道数据覆盖本地Default打底数据,保证客户端下次启动展示上一次成功拉取的频道数据。

这是客户端产品和程序设计的基本逻辑,希望不要割裂开看本地数据和云端数据的问题,二者配合效果更佳,就像奥利奥要沾牛奶吃。