dzf112233 课程是有时效性的,你这个课程明显针对6.0以前的,而7.0以后来说,IUnitCache这个代表的行为可以在System的实现上区分,比如服务器的System实现了IUnitCache这个接口,客户端你可以忽略他啊,他可以存在但是你可以不用,不是吗?
7gxz 是这样的,我只是举个例子,这个例子其实也没有很需要分开,不分开的原因仅仅是不想把接口暴露给客户端,当然,就算暴露了也确实没问题。感谢大佬的耐心解答
dzf112233 其实不想暴露这种实现方式有很多种,得看你这个IUnitCache的作用是什么,根据这个名称我猜测是服务器用来把unit序列化然后保存到数据库里的行为,然后提供了一个Save的方法,去实现?如果接口只是用于标记的话,更好的方式是用Attribute来替代接口。7.0里的Component都是不继承接口的,而框架里继承IAwake这种只是作为一个编译约束,没有实际作用
7gxz 强啊…真大佬,我还有好远的路要走(¦3」∠)_
7gxz 没有宏命令还是很难受,有很多公用组件,也许客户端只是多了一个字段,现在只能直接把字段加到类体里,但是服务端是不需要这个字段的。而且这种情况下也不可能拆分成c和s两个同名组件,因为可能剩下几十个字段都是共用的,就很麻烦,好多组件和实体都遇到了这个现象,只能被迫把某些字段暴露到服务端去,服务端不使用他们。
用#if DOTNET 表示服务器代码
多出来的字段,另外搞个组件啊。说明你抽象的不好啊。
egametang 就多了一个字段,感觉搞个组件是不是大材小用了,这个组件也不会写任何system
这个自己选择。组件多又不影响啥
7gxz 还是有问题。如果一个组件拆成“client”,“Server”,“Share”三份,每一份会被视为不同的组件,而不是同一个,这样GetComponent根本无法正确获取到组件。 所以如果一个组件,客户端需要字段ABC 服务端需要BCD,共用BC字段,则应该是将BC字段写在share中,客户端服务端分别挂含有A、D字段的新的组件,才能实现
dzf112233 你这属于思想上的误区,Share里本身意义就是”公有“,所以绝对不存在你所谓的a和d,所以自然a和d本身就应该存在于新的组件里。如果你单纯的觉得单列一个component很麻烦,那你都写一起也没人说你啥,这就看你对代码的干净程度的定义了。ET的设计初衷是绝对的干净。绝对的干净带来的就是麻烦!程序员追求的”解耦“也是为了追求干净,带来的也是更高的代码门槛。怎么用全看你自己。屎山也不一定是坏事,屎山好处是效率高,门槛低,副作用是难以维护。
字段不一样,为啥非得前后端共享呢,用两个组件啊
egametang 看了这个帖子,我也有类似的疑惑,持续关注中 ET6的代码转到ET7之后,就会碰到这种组件在ET6中用原本用宏来区分前后端,但是在ET7中出发点是要放到share中,因为要把宏去掉而需要考虑对于前后端不共用的接口和某些字段的问题,怎么说呢,想分开但是觉得分开又太浪费了,有重复代码的嫌疑 哈哈哈