如何将类属性与实例属性

时间:2015-06-28 07:06:17

标签: c# optimization

我有Person,TaskListitem和Task的一些模型,如下所示。 我目前正在使用BindingList绑定到datagrid以在datagrid中显示任务。我正在使用它,因为我必须在网格中显示DeveloperName和ReviewerName。

背景:这是来自任务跟踪计划(学习项目)的代码。客户端是用C#编写的。 服务器是用Ruby编写的。服务器将数据存储在人员,任务的activerecord表中。 客户端也在sqlite DB中本地缓存它。

目前Globals.People定义为

public static class Globals
{
    ...
    public static List<Person> People = new List<Person>();
    ...
}

和Person,TaskListitem和Task类如下所示:

public class Person : TimeStamp, IEquatable<Person>
{
    public string name { get; set; }
    public string trigram { get; set; }
    public bool active { get; set; }
    public eLevel level { get; set; }
    public string internal_object_id { get; set; }
    public string token { get; set; }
    public int unread_objects_count { get; set; }
    public int documents_count { get; set; }
    public int work_tasks_count { get; set; }
    public int review_tasks_count { get; set; }

    public bool Equals(Person obj)
    {
        ...
    }
    public override bool Equals(object obj)
    {
        ...
    }
    public override int GetHashCode()
    {
        ...
    }
}

public class TaskListItem : Task
{
    public string taskName
    {
        get { return this.name + " - " + this.title; }
    }
    public string DeveloperName
    {
        get { return Globals.People.Find(x => x.id == this.developer_id).name; }
    }
    public string ReviewerName
    {
        get { return Globals.People.Find(x => x.id == this.reviewer_id).name; }
    }
}


public class Task : TimeStamp
{
    public Task()
    {
        ...
        if (Globals.People.Count == 0) Globals.People.Add(new Person { id = 0, name = "DummyUser", level = eLevel.Master });
        developer_id = Globals.People.First().id;
        reviewer_id = Globals.People.First().id;
        ...
    }

    public TaskListItem AsTaskListItem()
    {
    ...
    }

    public int developer_id { get; set; }
    public int reviewer_id { get; set; }
    public string name { get; set; }
    public string title { get; set; }
    ...
}

但是当我学习时,我发现静态对象不能用于保存状态。所以我开始寻找替代我的实现。我能够通过返回DeveloperName和ReviewerName以及任务来部分解决它。所以我不必使用静态列表。 但是现在我遇到了一个问题,当我从缓存中检索任务时。我无法将其与检索到的People数据合并。 我如何合并它。我上面的部分解决方案要求我检索冗余数据以及每个任务(即每个任务的人员名称,因为客户端已经检索了所有人员数据)。

Complete Code

请评论建议和改进。

0 个答案:

没有答案