许多Android应用程序都包括自己的BaseActivity类,所有应用程序中的活动都扩展该类。这很有用,因为它提供了一个集中放置大多数/所有活动通用功能的中心位置。拥有BaseActivity的主要缺点是您无法使用任何Activity子类(ListActivity等)。
一种替代方法是使用ActivityDelegate。这提供了一个集中的地方来放置功能,同时仍然允许您使用Activity子类。而且这种方法可以说更易于测试,因为它使用组合而不是继承。
这些解决方案可能都会导致BaseActivity / ActivityDelegate变得过于庞大和复杂,产生许多混乱代码。通过将功能分成许多不同的Delegates,使用委托模式可能是一个解决方案。这将减少Delegate中的混乱代码,但然后活动变得更加复杂 - 现在它们试图将它们的on*方法转发到许多不同的Delegates而不仅仅是一个。
解决所有这些问题的一种可能方法是使用Delegate Manager。Delegate Manager跟踪应用程序中的所有较小的Delegates。活动将它们的on*方法转发给Delegate Manager,后者将它们转发给所有单独的Delegates。这完成了以下所有内容:
- 去重代码 - 所有通用功能都放置在其中一个Delegates中 - 允许使用Activity子类 - 所有活动中的简单代码 - 所有on*方法都转发到一个类 - 易于测试 - 为单元测试轻松模拟Delegates和Delegate Manager周围的所有内容
是否有人尝试过这种模式?如果是,它效果如何?
一种替代方法是使用ActivityDelegate。这提供了一个集中的地方来放置功能,同时仍然允许您使用Activity子类。而且这种方法可以说更易于测试,因为它使用组合而不是继承。
这些解决方案可能都会导致BaseActivity / ActivityDelegate变得过于庞大和复杂,产生许多混乱代码。通过将功能分成许多不同的Delegates,使用委托模式可能是一个解决方案。这将减少Delegate中的混乱代码,但然后活动变得更加复杂 - 现在它们试图将它们的on*方法转发到许多不同的Delegates而不仅仅是一个。
解决所有这些问题的一种可能方法是使用Delegate Manager。Delegate Manager跟踪应用程序中的所有较小的Delegates。活动将它们的on*方法转发给Delegate Manager,后者将它们转发给所有单独的Delegates。这完成了以下所有内容:
- 去重代码 - 所有通用功能都放置在其中一个Delegates中 - 允许使用Activity子类 - 所有活动中的简单代码 - 所有on*方法都转发到一个类 - 易于测试 - 为单元测试轻松模拟Delegates和Delegate Manager周围的所有内容
是否有人尝试过这种模式?如果是,它效果如何?