2015-07-19 61 views
3

我正在开发一个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模式已经出现在我的脑海中,但是当我必须在单个块语句中初始化对象时,我认为它们更合适。有关如何正确建模此问题的任何建议? :)

回答

0

你是一个非常简单的事情过于复杂。

我之前就已经完成了这种类型的实现,就注册实现而言,它实际上相当普遍。我不知道是否有更好的选择了那里,我看到了很多不同的人,但他们都说到简单比较失败,我通常如何做到这一点:

  1. 扩展的一个ViewGroup选择 - 通常为scrollview - 创建一个xml布局并将其充入您的自定义视图组。
  2. 在上述XML中添加一个包含每个注册步骤的不同视图组,并将可见性设置为消失。
  3. 在每个注册页面上添加一个按钮以转到下一个。
  4. 在您的自定义视图组上,确保先通过验证数据来处理“下一步”按钮。
  5. 当用户到达注册步骤的末尾时,您可以简单地从相应字段(即passwordView.getText()。toString())中检索所有数据,并且您可以自信地做到这一点,空指针或意外,因为您在整个不同步骤中验证了所有数据。
  6. 如果您添加页面更改视图动画,则可获得奖励积分。所有感谢你的答案

KISS

+0

@jvrodriguez第一,但我不能使用这种方法。我所描述的是对我的真正问题的简单抽象,我只是用它来使问题变得可以理解。我认为实施像您这样的解决方案会迫使我有一个_god object_(https://en.wikipedia)。org/wiki/God_object)有很多责任。我喜欢为每个功能创建功能和单元测试,并且让一个类中的所有逻辑都是一团糟。 – Androider2

+1

那么根据定义,神对象是执行太多任务的对象,这只能执行一个,它可能是一个冗长的任务,但仍然只有一个。无论哪种方式,我同意我可能低估了您的用户需要的数据量。这就是说,我会建议实施http://bit.ly/1hZQWAh,以便在每个片段之后回传活动并逐渐建立对象。 – jvrodrigues

相关问题