我可以使用什么样的设计模式来完成几个步骤的过程?

时间:2015-07-19 14:14:00

标签: android algorithm oop design-patterns architecture

我正在开发一个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 */
    }

正如您所看到的,我创建了包含必需字段的Registration类和一个静态引用实例,该实例表示通过getCurrent方法提供给每个片段的当前注册,该片段从其onCreate方法调用它并设置该步骤的信息想到了相应的setter方法。当用户输入所有数据后,我将此POJO转换为JSON并发出网络请求。

另一种方法可能是将Registration实例从片段A传递给B,我需要实现可序列化的接口,但我不喜欢这种方法。

我想到了Builder和JavaBean模式,但是当我必须在单个块语句中初始化对象时,我发现它们更合适。有关如何正确建模此问题的任何建议? :)

1 个答案:

答案 0 :(得分:0)

你太复杂了。

我以前做过这种类型的实现,就注册实现而言,它实际上相当普遍。我不确定那里是否有更好的选择,我已经看到了很多不同的选项,但是与简单相比,它们在简单方面都失败了:

  1. 扩展选择的视图组 - 通常是滚动视图 - 创建xml布局并将其扩展到自定义视图组中。
  2. 在所述xml上添加一个包含每个注册步骤的不同视图组,并将可见性设置为已消失。
  3. 在每个注册页面上添加一个按钮以转到下一个。
  4. 在自定义视图组中,请确保先通过验证数据来处理“下一步”按钮。
  5. 当用户到达注册步骤的末尾时,您只需从相应的字段中检索所有数据(即passwordView.getText()。toString()),您可以放心地执行此操作,您将无法获得任何数据。由于您在不同步骤中验证了所有数据,因此出现空指针或惊喜。
  6. 如果您添加页面更改视图动画,则为奖励积分。
  7. KISS