我正在使用gson创建一个代表一些JSON的java对象。这个JSON定义了触摸屏游戏控制器的布局,因此非常复杂(每个设备都有一个方向,每个方向都有按钮,每个按钮都有位置/大小等)。
我尝试创建的程序将作为控制器布局的独立编辑器。
我所做的是为每种类型(按钮,设备等)创建一个类,如下所示:
public class Device {
public Button dpad;
public Button a;
public Button b;
public Button start;
public Button select;
public Button l;
public Button r;
public Button menu;
public ExtendedEdges extendedEdges;
}
对象本身没有逻辑;所有序列化/反序列化都由gson处理。
我最近阅读了一些编程书籍,其中一个主题是Demeter法则和代码耦合,这个类会导致其他对象破坏它。但是,实际上没有办法符合良好的编码实践。提供访问器方法和将字段设为私有只会是多余的,因为程序需要对整个对象的写访问权。另外,写起来相当容易:
Device device = foo(); //returns Device
bar(device.dpad.width); //Does something that involves the width of the dpad
有没有更好的方法来处理嵌套的JSON表示,或者在这种情况下违反了得墨忒耳法?
答案 0 :(得分:1)
你需要担心的耦合是你的数据表示,这确实带来风险;如果这个JSON对象被公开使用,你就不能自愿从中删除元素,因为依赖它的消费者会破坏它。您当然可以添加元素,因为使用遗留结构的消费者不一定会关心额外的字段。
除此之外,这种巨型数据对象结构在JSON数据的序列化/反序列化中很常见。再次,它是耦合的,但只与你的回应的实际结构有关。