在移动应用程序中处理大型对象的最佳实践

时间:2017-10-26 06:00:30

标签: android ios

我有一个带有很多“概述”屏幕的移动应用程序,即不同形式的对象列表。

这些对象相当大。 Model(struct或class)有70-80个属性。

很快就需要所有这些属性,特别是在所有对象频繁发生的列表中,通常只显示8-10个属性。

进入对象的详细信息屏幕时,会消耗更多属性。

那么,你通常会如何处理这样的情况:

1)创建两个类。一个拥有另一个的子集并使用列表中的子集和详细视图中的完整类

2)只创建一个类,但只获取列表所需的属性,并在获取列表数据时使用“虚拟值”填充其余属性,并仅在详细显示时获取完整对象

3)只有一个类的定义,并始终为它获取所有内容。这是2017年,数据可能仍然比您的平均网页小

如果您需要更多信息,请提出要求。

2 个答案:

答案 0 :(得分:2)

你绝对可以使用Model / POJO类。     就像我们在模块化编程中使用函数一样,您可以创建多个Model类,而不是创建一个具有所有属性的单个类。您可以根据所需的属性使用POJO类。

For example:-

    class student{
    String firstname;
    String lastname;
    String street;
    String pincode;}

**can be converted to :-
`
class student{
StudentName name;
StudentAddress address;
}
class StudentName {
String firstname;
String lastname;
}
class StudentAddress{
String street;
String pincode;
}`

答案 1 :(得分:1)

考虑从Web服务收到的数据是从SQLite数据库中保留和​​查询的。

当数据在数据库中时,您可以使用一对一的关系。例如

让我们假设您有模型/ POJO,其中您将用户数据显示为列表。

class User {
    //basic info showed in the list
    int userId;
    String name;
    String emailId;
}

class UserDetail {
    int id;
    int userPassportId;
    int userId; //foriegn key to user table
    .....
    // other nessesary details
}

SQL等效

CREATE TABLE user(
    id INTEGER PRIMARY KEY,
    name TEXT,
    emailId TEXT
);

CREATE TABLE userDetails(
    id INTEGER PRIMARY KEY,
    user_passport_number TEXT,
    user_id INTEGER,
    FOREIGN KEY(user_id) REFERENCES user(id) 
);

所以现在当您显示项目时,您只需查询所有用户的数据,这些数据将为您提供您可能希望在UI中显示的基本用户信息。

当您转到详细信息页面时,您可以使用用户ID进行查询以获取相关详细信息。

SELECT * FROM userDetails WHERE user_id = user_id_recived;