2013-06-29 55 views
0

我正在开发移动项目,目前使用的是Parse(parse.com),它可以帮助我专注于与客户端的合作。但是,我期望我的应用程序快速增长,迟早我会移出解析尽量减少对其他第三方库的依赖

因为这种情况,我想尽可能少依赖于Parse编写我的代码,或者可以使它更容易调整另一个类似于Parse的服务(即使是我自己写的服务器)。

Parse提供了ParseUser类,但是当我移出Parse时,我将不得不编写自己的User类。我现在要做的是,将来当ParseUser类不再存在时,我可以使用旧的User类。

如果有什么好的设计模式,请指教!

+0

我认为您正在寻找的设计模式是提供商模式模式:http://en.m.wikipedia.org/wiki/Provider_model –

+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(); 
    } 
} 
+0

这个实现实际上是我想要的。由于ParseUser已关闭,我想你想创建另一个类扩展ParseUser并实现用户界面? –

+0

这是正确的。你也可以编写一个包装器/适配器,它可以做更多的工作,但更灵活。 – Bart

0

一种最小化对三方库的依赖性的方法是围绕它制作一个包装类。
不要直接从第三方库中调用应用程序方法,而是调用包装类中定义的方法。

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

​​

为了减少依赖,创建一个类ParseWrapper,不会做不过delegeting工作,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,该项目的其余部分将保持不变。

+0

这是一个简单的方法,但是当我想要使用其他类的User对象时,我也必须更改ParseWrapper中的代码。 –

+0

你可以创建一个接口,然后具体的'ParseWrapper'类。基本上,您可以将我的答案与接受的答案结合起来。 –

+0

同意。这将是最好的办法。谢谢 :) –