多くの Android アプリには独自の BaseActivity クラスが含まれており、アプリ内のすべてのアクティビティが拡張されます。これは、ほとんど/すべてのアクティビティに共通する機能を配置するための中心的な場所を提供するため、便利です。BaseActivity を持つことの主な欠点は、Activity サブクラス (ListActivity など) を使用できないことです。
1 つの代替手段は、ActivityDelegate を使用することです。これにより、Activity サブクラスを使用できるようにしながら、機能の中心的な場所が提供されます。また、継承の代わりに構成を使用するため、間違いなくよりテストしやすくなっています。
これらのソリューションはどちらも、BaseActivity/ActivityDelegate が大きくなりすぎて複雑になると、大量のスパゲッティ コードになる可能性があります。これに対する考えられる解決策は、デリゲート パターンを使用することですが、機能を多くの異なるデリゲートに分割します。これにより、デリゲートのスパゲッティ コードが削減されますが、アクティビティはより複雑になります。現在、on* メソッドを 1 つだけではなく、さまざまなデリゲートに転送しようとしています。
これらすべての問題に対する可能な解決策は、デリゲート マネージャーを使用することです。デリゲート マネージャーは、アプリ内のすべての小さなデリゲートを追跡します。アクティビティは on* メソッドを Delegate Manager に転送し、Delegate Manager はそれらを個々のすべての Delegates に転送します。これにより、次のすべてが達成されます。
- コードの重複排除 - すべての一般的な機能がいずれかのデリゲートに配置されます
- Activity サブクラスの使用を許可します
- すべてのアクティビティのシンプルなコード - すべての on* メソッドが 1 つのクラスに転送されます
- 簡単にテスト可能 - 単体テスト用にデリゲートとデリゲート マネージャーの周りのすべてを簡単にモックアウトできます
このパターンを使ってみた人はいますか?もしそうなら、それはどうなりましたか?