リファクタリングが必要なプロジェクトがあります。これは、マイナーコンポーネントのライフサイクルを制御するメジャーコンポーネントを備えた約40のGUIコンポーネントを備えたJavaデスクトップSWT/JFaceアプリケーションです。結合度の低い優れたモジュラー設計が必要ですが、コンストラクターが非常に長い場合を除いて、グローバル状態を回避する方法を見つけることができません。
たとえば、ソフトウェアの国際化への現在のアプローチは次のようなものです。
public class Main {
public static void main(String[] args) {
MyMessages.loadMessages();
}
}
public class MyMessages {
private static ResourceBundle messages;
public static void loadMessages() {
messagesBundle = ResourceBundle.getBundle("messages", "en");
}
public static void getMessage(String m) {
return messagesBundle.getString(m);
}
}
public class SomeComponent extends Component() {
public void init() {
String textboxLabel = MyMessages.getMessage("someMessage");
}
}
コード内の他の場所ではシングルトン(データモデル用)を使用しているため、コードベースが大きくなるにつれて依存関係を分析するのは困難です。
別のアプローチは、MyMessages
ステートフルにし、そのインスタンスをGUIコンポーネントの階層全体に渡すことです。私には、これは厄介でエラーが発生しやすく、認識されている利点と比較して面倒な価値がないように見えます。
次のような方法でこれを設計するには、他にどのような方法がありますか。
- 本質的にグローバル変数であるものに依存しません。
- 依存関係を明示的にします。
- 長いコンストラクターでコードを乱雑にしません。
依存性注入フレームワークを検討する必要がありますか、それとも小さなデスクトップアプリケーションにとってやり過ぎではないように思われる別のアプローチがありますか?