如何最好地表示C#中的表单字段

时间:2011-06-27 21:38:04

标签: c# windows-phone-7 dictionary

我开始学习WP7的C#,我正在制作一个应用来抓取各种网站并在页面上显示几项信息。

我将允许用户在手机上创建多个“帐户” - 每个帐户都是特定网站的一组登录详细信息。例如,如果我使用stackoverflow作为示例,我将有一个类:

public abstract class MyBaseClass
{
    public Dictionary<string, string> fields;
}

public class StackOverflow : MyBaseClass 
{
   public StackOverflow()
   {
       fields.Add("Username", "Default Username");
       fields.Add("Password", "");
   }
}

该课程将完成所有工作,我希望人们能够提交新课程以包含在以后的版本中。

应用程序将迭代每个字段,向用户显示相应的表单字段。完成后,UI将更新字典,准备开始抓取。

使用字典似乎可以开始,但我没有考虑如何表示数据类型 - 我想定义输入应该是文本,数字还是密码。

我如何才能最好地包含这些数据?

3 个答案:

答案 0 :(得分:2)

鉴于屏幕抓取充其量是坏事并且最糟糕的是灾难性的,我必须建议您只包含提供公共文档API的站点(或服务),然后使用该引用来定义您正在存储的数据类型。

也就是说,如果您使用的是C#/ .NET 4,则可能需要使用Tuple数据类型。

答案 1 :(得分:1)

要记住这个模式的一件事是,你使用这个对象所做的一切都基于“魔术字符串”。字符串数据很少,可以在编译时检查;引用为字符串的字段名称可能具有拼写错误,编译器会立即捕获该错误;类似地,将“ABC123”设置为应该是小数的字段就好了,直到你尝试解析它为止。

如果您决定沿着这条路走下去,我会将Dictionary更改为包含该字段所有元数据的自定义类的列表;它的名称,类型,当前值等。列表应该受到保护,并通过类中的一个或多个索引器访问,这些索引器派生自MyBaseClass类,它可以根据索引位置或字段名称提取数据,如情况可能要求。

请注意,在更改为List时,天真的实现会导致字段的线性搜索时间,而Dictionary会为您提供对数访问时间。您可以通过对列表进行排序并实现BinarySearch来查找字段名称来缓解此问题。

答案 2 :(得分:0)

您将不得不创建自己的模型来表示这一点。做自然而有意义的事情。怎么样:

public enum InputType
{
    Text,
    Number,
    Password
}

public class Value
{
    public object Value { get; set;}
    public InputType InputType { get; set;}
}

public abstract class MyBaseClass
{
    public Dictionary<string, Value> fields;
}

public class StackOverflow : MyBaseClass 
{
   public StackOverflow()
   {
       fields.Add("Username", new Value() {
           Value = "Default Username",
           InputType = InputType.Text
       });
       fields.Add("Password", new Value() {
           Value = "hw78fksm9",
           InputType = InputType.Password
       });
   }
}

顺便说一下,不要将fields变量MyBaseClass公开,这是一个实现细节,应隐藏/封装!