2011-12-20 43 views
1

我正在使用一個容器來容納對象列表(同一類)的某些字段使用自定義RetentionSortable註釋。註釋的目的有兩個:對對象分類器使用註釋嗎?

  1. 標記字段可以與另一個對象相同字段進行比較。
  2. 並給出字段的排序名稱(例如修改日期或名字)。然後

容器將通過對象的列表行走(還記得他們是等)收集的RententionSortable的是,對象包含列表,該列表傳遞給GUI。 GUI將顯示列表並請求一個可排序的選擇,並將其返回到可排序列表,然後根據所選的RetentionSortable對列表進行排序。

此方法或排序對象的目的是允許我創建一個小容器,只要它至少有一個RetentionSortable字段,就可以一般接受任何對象並對其進行排序。

我的直覺尖叫,這是不好的做法,依靠這種反思是一個壞主意,但我的測試完美無瑕,比我預期的更好。

是否使用註釋反射來查找所有由特定註釋標註的字段,以便抽象對象排序?

回答

2

註解是爲了方便,並且您的使用使情況更加方便,所以它看起來是合理的。另一種方法是維護一個單獨的字典,指出哪些字段可以分類哪些對象,並且稍微比較麻煩,但是從關注點的分離來看稍好一些。

問題是你的對象是否應該知道註釋或者不知道(在另一種註釋沒有意義或衝突的情況下,對象是否會被重用)。使用單獨的可排序字段列表,您可以選擇在任何特定情況下應用哪個列表。

如果便利權衡適合您,那麼您應該堅持使用註釋,只要您知道潛在的設計分支(這可能對您的特定情況沒有任何影響)。

2

您如何看待基本上每個註釋驅動的配置框架工作? 「給我所有用'@Inject'註釋的這種類型的字段」或者「給我所有的包含baz.plugh'@Controller'註解的東西。」

對於「抽象排序」與否,我不明白爲什麼不這樣做。如果它有效,並且不需要像bean映射器和bean信息類這樣的事情,那麼問題是什麼?

+0

呵呵,我從來沒有想過我的項目在註解方法上是獨一無二的,但我並不認爲整個框架都是基於它的。很高興知道。那裏的知識消除了我的問題。 – AedonEtLIRA 2011-12-20 19:58:00

相關問題