在多步骤应用程序中存储用户输入的最佳方式

本文关键字:输入 用户 最佳 方式 存储 应用程序 | 更新日期: 2023-09-27 18:05:24

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

在多步骤应用程序中存储用户输入的最佳方式

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

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

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

实际的向导窗口和选项卡(视图)然后都与向导视图模型(数据)一起工作。

如果你只是想为程序执行保留这些信息,我会选择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; }
}

您可以轻松地添加,删除或编辑功能,并将这里的"Item"替换为您自己的"UserData"类型。

使用依赖注入来获取这些信息

    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;
        }
    }