最大限度地减少对其他第三方库的依赖

时间:2013-06-29 20:56:13

标签: design-patterns

我正在开发移动项目,目前正在使用Parse(parse.com),它可以帮助我专注于与客户端合作。但是,我希望我的应用程序能够快速增长,我迟早会离开Parse

由于这种情况,我希望编写尽可能少依赖Parse的代码,或者可以很容易地调整另一个类似于Parse的服务(甚至是我自己编写的服务器)。

Parse提供了ParseUser类,但是当我离开Parse时,我将不得不编写自己的User类。我现在想要做到这一点,将来,当ParseUser类不再存在时,我可以使用旧的User类。

如果有任何好的设计模式,请告知!

2 个答案:

答案 0 :(得分:0)

如果你可以使用界面那么相当容易。这是一个非常小的例子。

// Define a proper interface for User instances
interface User() {
    public String getName();
}

// Define the interface that all UserServices must use
interface UserService {
    public User getUser();
}

// Specialized implementation using Parse
class ParseUserService implements UserService {
    public User getUser() {
        return new ParseUser();
    }
}

// Specialized implementation using Other
class OtherUserService implements UserService {
    public User getUser() {
        return new OtherUser();
    }
}

// No need to care about implementation details
class App {
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void doStuff() {    
        User user = userService.getUser();
        String name = user.getName();
    }
}

答案 1 :(得分:0)

最小化对3d方库的依赖的一种方法是围绕它创建一个包装类 不要直接在第三方库中调用应用程序方法,而是调用包装器类中定义的方法。

我不知道Parse做了什么,但我们假设它有一个方法parseData(),您可以在项目中使用这样的方法:

Parse p = new Parse();
p.parseData();

要最大限度地减少依赖项,请创建一个类ParseWrapper,除了将工作删除到Parse之外什么都不做:

public class ParseWrapper{
   Parse p = new Parse();

   //....

   public void parseData(){
       p.parseData(); // Delegate the real work to Parse.
   }
}

现在,项目中的每个地方都使用ParseWrapper而不是Parse

ParseWrapper p = new ParseWrapper();
p.parseData();

这样,即使您稍后需要从Parse切换到另一个实现,您也只需要在一个地方进行修改 - ParseWrapper,项目的其余部分将保持不变。