2016-05-29 48 views
0

在我的github回購中,我有類的層次結構,當然還有序列化/反序列化機制。Java類和接口命名故障

我手動序列化它們通過外部化,我希望採取一切產生價值的代碼,需要實例序列化了這個班,以保持所有簡單和靈活(或只是把這個爛攤子)

所以我基本上想要做的是創建SerializationHelper s和DeserializationHelper的類,其中特定類的名稱將是NameOfClassSerializationHelper

的名字,像這樣在最壞的情況下29個字符,但我認爲這是太多了。當然,它提供了對發生的事情的更好的理解,名稱少於50個字符,用戶永遠不會看到這些類。

下面是一些輔助類接口層次的scatch。 interfac hierarchy

因此,大家可以看到我減少SerializationSerDeserializationDeser但好像它傷害readabuility。

例如類,它實現TrieSerializationHelper將有名稱LinkedTrieSerializationHelper

有中的一個麻煩:我不能把那些序列化/反序列化的助手到另一個包,因爲他們使用的一些包的私有類(Node,你可以從WordGraphDeserHelperrestoreRooot方法見)。

所以我完全糊塗瞭如何做的更好,我必須做什麼。提前致謝。

+0

的'Helper'字剛剛產生噪音。爲什麼不'Serializer'和'Deserializer'? – plalx

+0

@plalx因爲他們不直接進行序列化 –

+0

好吧,它是做什麼的? – plalx

回答

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); 
    } 
} 
+1

對不起,反應遲緩,並且是的,你的想法是好多了,然後我的,你把串行/解串正好整個邏輯的'Externalizer'接口後代(通過調用readressing),並減少數的包裝類 –