之前遇到过一个挺头疼的bug。
我们的游戏将所有的数据放在一个单例中,每个人用到的时候都是自己去操作,数据是公开的,随便操作。
问题来了,突然有一天,一个比较复杂的系统里各种跳转界面,跳转函数的参数都是一个个数据对象,直接可以使用的数据。
有一个武将卡升级,直接新生成了一个武将卡(服务器给的)并塞到了数据单例的字典里,key没有变,但是value变了。这样之前所有用到这个value的地方,数据都是旧数据。
虽然可以通过对原始value的fileld赋值操作避免这个bug,但是如果原始的field是个非常庞大的类,操作起来还是麻烦很多,另外谁也不知道会不会有人哪天忘记了又new了一个出来。
我自己想了个办法。
传递的参数如果是key,就可以了。只是每次都要根据提供的查询函数,查找相应的value,这样我们的权利就变得越来越小,维护起来也就非常简单了。数据操作必须通过提供的入口,所有的数据都是私有的。
好了,既然参数是key,那就可以传递基类了。首先,所有的人物,装备,物品。。。都应该继承自一个基类(uid ...)。然后可能要面临到一个传递多个数据的问题(List<itembase>),那就通过“扩展方法”转换出来。
1 public static ListToItemBaseList(this List pEquipts)2 {3 List tItemBases = new List ();4 pEquipts.ForEach(v => tItemBases.Add(v));5 return tItemBases;6 }
这样做还有个好处,scrollview 等等都可以很方便的去写初始化函数了(代码生成简单了),肯定还有好多有用的地方。
不过以上都是个人观点,有利有弊肯定要到实战中才可以看出来。