【问题标题】:Best way to store user's input in a multi-step application [closed]在多步骤应用程序中存储用户输入的最佳方式[关闭]
【发布时间】:2014-07-16 03:32:04
【问题描述】:

我的程序由多个步骤组成。假设每个步骤都在tabpage 中,完成后,用户选择“下一步”。 存储这些信息的最佳/最快方式是什么?

【问题讨论】:

  • 有什么要求? “存储”是什么意思?
  • 很难说不了解更多,但我会说作为全局复杂类型“UserData”或其他东西。但是如果你需要保存这些数据以防有人稍后回来,它可能会更复杂..
  • 你想存储什么样的信息?
  • @L-Three 无特殊要求。不,只要程序运行,我只需要保存这些信息。因此,假设这类似于填写在线申请,一旦取消或关闭浏览器就会消失。
  • @manuchao 正常表单数据,用户应该运行一个活动:所以第一步他/她选择一个订阅者文件,第二步,选择活动类型和第三个活动,基于在类型上显示不同的表单,以便用户可以填写活动信息然后运行它。第 4 步,看起来像是对用户设置的所有内容进行全面审查,然后“运行”。

标签: c# winforms wizard


【解决方案1】:

如果您只想保留此信息以供程序执行,我会使用 In-Memory Repository,例如

namespace Repository {
    public class InMemoryRepository : IRepository{
        static readonly List<Item> items = new List<Item> {
            new Item("CurrentTaxRate", 20m),
            new Item("CurrentAmount", 100m)
        };
        public Item Get(string name) {
            return items.Single(x => x.Name == name);
        }
    }
}

public class Item {
    public Item(string name, decimal value) {
        Name = name;
        Value = value;
    }
    public string Name { get; private set; }
    public decimal Value { get; private set; }
}

您可以轻松地为此添加添加、删除或编辑功能,并将此处的“项目”替换为您自己的“用户数据”类型。

使用依赖注入获取此信息

    public class TaxRate : ITaxRate {
        private readonly IRepository repository;

        public TaxRate(IRepository repository) {
            this.repository = repository;
        }

        public decimal Get() {
            var item = repository.Get("CurrentTaxRate");
            return item.Value;
        }
    }

【讨论】:

  • 这太弱了,因为您错过了任何数据绑定和集成测试逻辑来验证参数 - 您可以在属性强类型视图模型中执行此操作。
  • 我同意你所说的关于数据绑定等的说法,但在任何时候问题都没有说明这需要在数据库中,事实上提问者已经在 cmets 中明确表示他们希望保留数据直到程序执行只是这样这个内存存储库只是提问者要求的临时数据存储。
  • 视图模型(即类)在哪里自动进入数据库?变得真实。 DataBinding 与数据库无关。但是,如果您采用正确的形式架构,您就会开始使用这种称为“模型”的东西。它与数据库无关。
【解决方案2】:

创建一个代表向导的视图模型,并在该视图模型中包含与您的步骤相关的所有数据。您还可以跟踪当前步骤,并实现一些方法来启用/禁用下一个和上一个按钮等。

然后您的实际向导窗口和选项卡(视图)都可以与向导视图模型(数据)一起使用。

【讨论】:

    【解决方案3】:

    我创建了一个单独的类,该类具有各个页面上“答案”的属性。不确定这是否是最好的方法,但它对我来说非常有效。用户可以在页面之间来回切换并存储答案。就 Prescott 而言,如果他们需要稍后回来,也许您可​​以将他们的部分形式保存为 XML。

    【讨论】:

      【解决方案4】:

      我通常会说这将是一个模型来保留所有数据 - 一旦用户在最后一页说“ok”,这些数据就会被转发到处理方法。但是,这在很大程度上取决于实际的使用场景,所以这可能不是一直都是最好的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-09
        • 2011-02-12
        • 2018-12-15
        相关资源
        最近更新 更多