只露出我班级的一部分

时间:2014-11-05 18:51:49

标签: oop design-patterns

假设我有一个具有多个属性的类用户。我正在构建一个基于REST的应用程序,所以在我的主页上,当我请求“用户详细信息”时,我只需要用户的一些属性和其他类的其他属性。我如何编写我将为“用户详细信息”返回的对象的类?

我当前的设计从类中检索所需的属性以构建JSON。我希望有更好的方法来解决这个问题。

我使用Play Framework 2.0 with Java

3 个答案:

答案 0 :(得分:0)

如果您不想公开整个业务类User,我将构建第二个类,即DTO。此类仅提供REST API要传输的所需数据。

User user = new User("admin");
// Set other properties
UserDetailsDTO userDetailsDTO = new UserDetails(user); //<- Transfer userDetailsDTO

或者,如果“用户详细信息”对您的应用程序很重要,也许您应该考虑创建一个UserDetails类,并通过组合在User类中使用它。

public class User {
    Long id;
    String name;
    String address;
    UserDetails userDetails; // Composition <- Tranfer userDetails
}

注意:在Java中使用的示例

答案 1 :(得分:0)

看起来你需要一个Facade:http://en.wikipedia.org/wiki/Facade_pattern。 它是一个简单的模式,可以帮助您从多个类中公开方法/属性。 您可以存储Facade类中对象的引用,并仅公开您需要的内容。

答案 2 :(得分:0)

可以选择创建View Model对象,为该JSON所需的信息提供适当的抽象。 有关它的更多详细信息,请访问:http://en.wikipedia.org/wiki/Model_View_ViewModel

但这通常用于视图直接在应用程序的视图中使用的情况。因此,在上面提到的用例中需要仔细分析,因为已经创建了JSON,这个View Model层的创建确实是合理的。