问题描述
有如下需求有一个模块,根据实际情况,存在多个输入或输出通道,定义为Channel,且Channel存在属性Value但不同的Channel的Value类型不一致。ChannelA--ValueA--bool--ValueB--int起初的想法是使用泛型Value<T>,则ValueA=newValue<bool>ValueB=newValue<int>如果只有一个Channel,则问题不大,但当我需要更多的Channel,且不同的channel的Value都不同时则出现了问题。当两个Value类型一致,则可以使用List<Value<bool>>这样的实现方式,但类型不一致后,则无能为力。请教一下,有没有更好的抽象方式,或解决方案。
解决方案
解决方案二:
那你就应该定义多种类型的模块,需要哪个用哪个,而不是硬把各种完全不同的东西塞进一个模块里去
解决方案三:
模块不是魔术本来模块化就是为了解决这种乱七八糟的问题而你却非要把一个模块做成一个大厦
解决方案四:
引用1楼Z65443344的回复:
那你就应该定义多种类型的模块,需要哪个用哪个,而不是硬把各种完全不同的东西塞进一个模块里去
恩,其实是可以定义多种类型的模块,每个模块内部的value的类型在模块内部定义。但如果可以抽象出来不是可以更好吗。我想了下面的代码,准备试试publicclassChannelValue{publicboolValueType{set;get;}publicbool_boolValue;publicint_intValue;publicobjectValue{set{if(ValueType){_boolValue=(bool)value;}else{_intValue=(int)value;}}get{if(ValueType){return_boolValue;}else{return_intValue;}}}}
解决方案五:
是谁告诉你"抽象出来就会更好"?这就好比电路里的电阻,电容,电感,本来就应该各是各,不一样的非要把它们集成在一个模块里,通过拨码来设置它到底是当什么用,只会造成混乱明明是不一样的东西,但是从外观上看起来没有什么区别,还要去仔细看拨码到底拨的是啥而你这个也一样不同类型的数据就应该放到不同类型的集合里去,而不是把鸡蛋和垃圾都套上同样的包装然后塞进同一个箱子里
解决方案六:
如果你想返回个object了事的话你不如一开始就把这个模块的输入输出都定义成object算了,还用别的类型往object里装箱干嘛
解决方案七:
编程要从需求出发,不能太教条如果你为了抽象而抽象,把本该2个模块做的工作硬塞进一个模块里去这里可能节约了一半的代码但是在其他调用的地方可能就要复杂10倍
解决方案八:
去了解下协变逆变
解决方案:
这么说吧引用6楼Z65443344的回复:
编程要从需求出发,不能太教条如果你为了抽象而抽象,把本该2个模块做的工作硬塞进一个模块里去这里可能节约了一半的代码但是在其他调用的地方可能就要复杂10倍
了解了您的思路可能我需要两个channel,BoolChannel和IntChannel,都从ChannelBase继承在Module里面可以使用List<ChannelBase>来添加不同类型的channel
解决方案:
引用7楼starfd的回复:
去了解下协变逆变
也许单纯从解决上述问题,这是一个可行的方法,谢谢