如何清理我的Delegate类更干净?

时间:2015-02-20 23:14:03

标签: sdk refactoring

我正在编写SDK并希望知道如何更清晰地编写内容。

例如,我有一个GodManager委托类(它将是用户可以与之交互的中心类)(这是伪代码):

public class GodManager {
  private CloudApi cloudApi;
  private SensorApi sensorApi;
  private CacheApi cacheApi;
  .
  . And about 5 more API classes of similar sorts
  .
  GodManager() {
    cloudApi = new CloudApi();
    sensorApi = new SensorApi()
    cacheApi = new CacheApi();
  }

  public void someCloudApiMethodAccess() {
    cloudApi.someCloudApiMethodAccess();
  }
  .
  .
  .  And I have about 25 other methods where GodManager delegates to API classes   
  .      

}

如何通过GodManager允许我的用户访问,但是删除这些只是每个Api类的代理方法的25种方法?

我知道Android Wear可以解决这个问题:

public class Wearable {
    public static final com.google.android.gms.wearable.DataApi DataApi;
    public static final com.google.android.gms.wearable.MessageApi MessageApi;
    public static final com.google.android.gms.wearable.NodeApi NodeApi;
}

您可以在代码中访问这些API:

Wearable.DataApi.getFdForAsset(...)

所以我猜测我可以模仿这个并做类似的事情:

class GodManager {
  public static CloudApi CloudApi;

 GodManager {
   CloudApi = new CloudApi();
 }
}

然后在我的实现课程中,我可以:

class ImplClass {
  public void method() {
    GodManager.CloudApi.someCloudApiMethodAccess()
  }
}

我错过了什么吗?会不会有一些尴尬的副作用,我还没考虑过?任何建议都会非常感激,以便清理我的GodManager。

或者也许某人有其他一些我可以看到和学习​​的例子?

1 个答案:

答案 0 :(得分:0)

创建公共字段通常是反模式,尽管有一些legid用法。危险在于,如果用户可以访问您的字段,它可以使用它进行任何操作。

如果CloudApi包含它自己的公共方法或公共字段,那么用户不应该捣乱,那么解决方法就是创建一个庞大的委托类。如果您完全控制CloudApi,并且/或者您可以确保只有公共成员是可以安全,无条件地被其他人访问的成员,那么您可以将该实例公开。 (这是legid使用)

(请注意,将成员设为私有并为返回实例的方法创建公共getter,完全相同!)

即便如此,您仍然限制自己,因为您正在定义您的API(GodManager)并且您正在阻止自己延长所引用实例的EVER扩展功能。例如,您可能希望同步拨打CloudApi,或检查参数有效性,但不想(或可以)更改CloudApi。如果您有委托方法,则可以在不更改GodManager API的情况下扩展功能,并且现有用户不会中断。