如何从不同的数据源/格式创建对象

时间:2013-02-07 11:21:49

标签: java design-patterns gson ormlite

我正在处理需要从不同数据源/格式创建对象的项目。我想知道组织源代码以使其变得简单的最佳方法是什么。

假设我有类User,我希望能够从数据库和JSON中的数据创建对象。它的目的是让我的应用程序的用户在线和离线浏览数据。我正在使用GSON和ORMLite。此外,JSON和数据库中的字段可能不同,但“主”字段是相同的。创建包含JSON和数据库中所有属性/字段的类是一个好主意吗?类似下面的类:

@DatabaseTable(tableName = "user", daoClass = UserDaoImpl.class)
public class User {

    public static final String ID_FIELD_NAME = "id";
    public static final String USER_LOGIN_FIELD_NAME = "login";
    public static final String USER_EMAIL_FIELD_NAME = "email";
    public static final String SERIALIZED_COUNTRY_FIELD_NAME = "user_county";

    // DB & JSON
    @DatabaseField(generatedId = true, columnName = ID_FIELD_NAME)
    int id;

    // DB & JSON
    @DatabaseField(columnName = USER_LOGIN_FIELD_NAME)
    String login;

    //DB & JSON
    @DatabaseField(columnName = USER_EMAIL_FIELD_NAME)
    String email;

    //Only JSON
    @SerializedName(SERIALIZED_COUNTRY_FIELD_NAME)
    String country;

    public Track() {

    }
}

2 个答案:

答案 0 :(得分:1)

考虑factory pattern,您可以使用它来抽象具体用户类的创建作为数据源的函数。

将User设置为一个接口,并为每种类型的数据源提供User的特定于数据源的实现。

答案 1 :(得分:1)

  

创建包含JSON和数据库中所有属性/字段的类是否是个好主意?

我认为简短的回答是肯定的。您可以使用相同的对象来表示数据库中的数据并通过JSON。

当您遇到问题时,您需要更改数据库中的数据表示但不想更改JSON API,反之亦然。然后,您将需要2个单独的类和它们之间的映射函数。

但是,如果你可以逃脱一个班级,那么这是最好的方式。