【问题标题】:Java class & interface naming trouble [closed]Java类和接口命名麻烦[关闭]
【发布时间】:2016-09-27 07:11:27
【问题描述】:

在我的 github 存储库中,我有类的层次结构,当然它们存在序列化/反序列化机制。

我通过 Externalizable 手动对它们进行序列化,并且我想取出所有生成值的代码,例如从这些类中序列化以保持所有简单和灵活(或者只是为了解决这个问题)

所以我基本上想做的是创建SerializationHelpers 和DeserializationHelpers 类,其中特定类的名称将是NameOfClassSerializationHelper

这样的名字在最坏的情况下是 29 个字符,但我认为这太多了。是的,当然它可以更好地理解正在发生的事情,并且名称少于 50 个字符,用户将永远不会看到此类。

这里是这些帮助类的接口层次结构。

如您所见,我将Serialization 减少到SerDeserialization 减少到Deser,但似乎会损害可读性。

例如,实现TrieSerializationHelper 的类将具有名称LinkedTrieSerializationHelper

还有另一个麻烦:我不能将那些序列化/反序列化助手放到另一个包中,因为它们使用了一些包私有类(Node,正如你从WordGraphDeserHelperrestoreRooot 方法中看到的那样)。

所以我完全不知道如何做得更好以及我必须做什么。提前致谢。

【问题讨论】:

  • Helper 这个词只会制造噪音。为什么不SerializerDeserializer
  • @plalx 因为他们不直接进行序列化
  • 好的,它有什么作用?
  • 它们生成的值必须被序列化,并在DeserializationHelper的情况下通过这些值恢复Trie的根Node
  • 为什么不能是通用代码?这些助手生成的输出类型是什么?

标签: java architecture naming-conventions


【解决方案1】:

您可能还想创建带有特定实现的Externalizer 接口 (TrieExternalizer) 并将所有逻辑移到那里,这样您的主类(我认为它们是 TrieDAWG)就不会是用序列化/反序列化重载。

例子:

public interface Externalizer<T> {
    void write(T object, ObjectOutput out);
    void read(T object, ObjectInput in);
}

class TrieExternalizer implements Externalizer<Trie> {
    public void write(Trie object, ObjectOutput out) throws IOException {
        out.writeUTF(object.getSomeField());
    }


    public void read(Trie object, ObjectInput in) throws IOException {
        object.setSomeField(in.readUTF());
    }
}

class Trie implements Externalizable {
    private String someField;
    private static final Externalizer<Trie> externalizer = new TrieExternalizer();

    public String getSomeField() {
        return someField;
    }

    public void setSomeField(String someField) {
        this.someField = someField;
    }

    public void writeExternal(ObjectOutput out) throws IOException {
        externalizer.write(this, out);
    }

    public void readExternal(ObjectInput in) throws IOException {
        externalizer.read(this, in);
    }
}

【讨论】:

  • 抱歉回复晚了,是的,你的想法比我的要好得多,你将序列化/反序列化的整个逻辑完全放在 Externalizer 接口的后代中(通过调用 redressing),它减少了包中的类
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2019-02-14
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多