我正在开发一个Android应用程序,它需要几个步骤注册过程。由于我需要收集的数据量很大,因此我为每个步骤创建了一个活动和一个不同的片段。例如,在第一步/片段中,用户必须提供基本信息(姓名,性别,电子邮件),第二步/片段教育信息(大学,学位,参加日期)和最后一步/片段体验信息(公司,标题,日期)。只要用户正确完成所有步骤,我就会将所有信息以单个JSON请求发送到我的Web服务。我可以使用什么设计模式来完成几个步骤过程?
我的问题是:什么是设计或设计模式,以优雅,可读和可测试的方式更好地模拟此问题?这种方法我目前使用的,我认为是不擅长的一切,可能可以在应用中创建的内存泄漏是这样的:
class Registration {
// Contains basic user information such as name, gender, etc
private User user;
// Each Education instance contains info such as university, degree, etc
private List<Education> studies;
// Each Experience instance contains info such as company name, title, etc
private List<Experience> workExperience;
private static Registration currentRegistration;
public static Registration getCurrent() {
if (currentRegistration == null) {
currentRegistration = new Registration();
}
return currentRegistration;
}
/* There are getter and setter methods for each field */
}
正如你可以看到我所创建的注册类所需的字段和静态参考实例,表示通过getCurrent方法向每个从其onCreate方法调用它的片段提供的当前注册,并将该步骤的信息设置为相应的setter方法。当用户输入所有数据时,我将此POJO转换为JSON并发出网络请求。
另一种方法可能是将Registration实例从片段A传递到B,为此我需要实现可序列化的接口,但我不喜欢这种方法。
Builder和JavaBean模式已经出现在我的脑海中,但是当我必须在单个块语句中初始化对象时,我认为它们更合适。有关如何正确建模此问题的任何建议? :)
@jvrodriguez第一,但我不能使用这种方法。我所描述的是对我的真正问题的简单抽象,我只是用它来使问题变得可以理解。我认为实施像您这样的解决方案会迫使我有一个_god object_(https://en.wikipedia)。org/wiki/God_object)有很多责任。我喜欢为每个功能创建功能和单元测试,并且让一个类中的所有逻辑都是一团糟。 – Androider2
那么根据定义,神对象是执行太多任务的对象,这只能执行一个,它可能是一个冗长的任务,但仍然只有一个。无论哪种方式,我同意我可能低估了您的用户需要的数据量。这就是说,我会建议实施http://bit.ly/1hZQWAh,以便在每个片段之后回传活动并逐渐建立对象。 – jvrodrigues