が、私はこのこの場合、循環参照をリファクタリングまたは修正する方法はありますか? Javaの
public class MyAttibute extends MyObject
{
private MyClass definedOnClass;//point to its parentClass
}
よう コードこのようなMyClassのと呼ばれる親クラス、
MyAttributeクラスでpublic class MyClass extends CompositeObject{
protected Map<String,MyAttibute> attributes = new
HashMap<String,MyAttribute>
.....
}
、 コードを読んでいるこれは、円形のreference.Whichは、トラブル時にあなたを作る実際にされました深いserlizationと等しくする。そしてそれは良いデザインではないかもしれません。それを避ける方法は?また、それを修正した後も、その属性からparentClassを簡単に見つけることができます。
P.S.私は別の2つのクラスのデザインを参照してください
public class Transaction{
private ChangeManager parentManager;
....
public Transaction(ChangeManager parentManager)
}
public class ChangeManager {
//record transaction when commit
private List<Transaction> transactions = new ArrayList<Transaction>();
Transaction currentTransaction;
....
}
あなたはこの種のデザインが良いと思いますか?どうして? これらのクラスが定義しているドメインがわかるように、かなり一般的です。 誰もそれについていくつかの洞察を共有できますか? TransactionにChangeManagerが認識され、MyAttributesにそのプロパティのMyClassが認識されるようにすることは有害でしょうか?コメントは大歓迎です。短所と長所
を扱うことができることに注意してくださいからテストするときにequalsメソッドを異なるを使用することができますそれ自身の子供への影響? (それは私にとっては完全にはっきりしないので、そうでないとこれを無視してください)ああ、それは絶対に確かに良いアイデアではありません。シリアル化の問題はひどいデザインの上に氷結するだけです。クラスは子どもの知識を必要とすることは絶対に避けてはいけません – Voo
@ Voo、私たちはこの問題を直列化を扱うときに満たします。しかし、データモデルは私たちによって設計されていません。だからこれが問題です。 –
これは質問からはっきりと分かりません(特に "これは良いデザインですか?") - "この恐ろしいデザインを回避するにはどうすればよいのですか?")しかし、definedOnClassがサブクラス自体である場合どのように修正できるかは分かりません(その場合、再帰的な基底ケースはありません)。それがうまくいけば私は思うだろう - 正確なエラーは何ですか? – Voo