我有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数据合并。 我如何合并它。我上面的部分解决方案要求我检索冗余数据以及每个任务(即每个任务的人员名称,因为客户端已经检索了所有人员数据)。
请评论建议和改进。