我有一个抽象类叫做
我有很多代码创建一个新的实例类,从ID中加载它,然后返回该类。我想将这个代码简化成一行代码(只是为了整洁,有很多类只有列表属性返回这些已加载的实例)。
我能想到两种方法,但都不太对。
1. 我可以在我的
2. 我可以创建一个通用方法来返回一个已加载的方法。
我看到一些其他代码使用与1号相同的方法,但我从未见过任何经验丰富的开发人员推荐它,也没有在.NET框架中发现执行相同操作的方法,所以这也许不是最佳实践?
有人知道是否有其他解决方案比这两个更好吗? 解决方案: 在阅读了SirViver的答案和评论之后,我意识到所有返回的属性都需要被缓存。解决方案略有不同,但类似于选项2(由于我没有解释设计的这一部分,我不希望任何人提出这个答案)
所有这些实例都将从数据库中检索到的值加载(如果您愿意,可以称之为数据库关系)。我创建了一个方法来通过列名加载实例,并在Dictionary中缓存加载的值。这对于
DatabaseRow
,在派生和构造后,主要从Load(object id)
方法中加载。我有很多代码创建一个新的实例类,从ID中加载它,然后返回该类。我想将这个代码简化成一行代码(只是为了整洁,有很多类只有列表属性返回这些已加载的实例)。
我能想到两种方法,但都不太对。
1. 我可以在我的
Load
方法末尾使用return this;
并使用return new Derived().Load(id);
。2. 我可以创建一个通用方法来返回一个已加载的方法。
public static T LoadRow<T>(object id) where T : DatabaseRow, new()
{
T row = new T();
row.Load(id);
return row;
}
我看到一些其他代码使用与1号相同的方法,但我从未见过任何经验丰富的开发人员推荐它,也没有在.NET框架中发现执行相同操作的方法,所以这也许不是最佳实践?
有人知道是否有其他解决方案比这两个更好吗? 解决方案: 在阅读了SirViver的答案和评论之后,我意识到所有返回的属性都需要被缓存。解决方案略有不同,但类似于选项2(由于我没有解释设计的这一部分,我不希望任何人提出这个答案)
所有这些实例都将从数据库中检索到的值加载(如果您愿意,可以称之为数据库关系)。我创建了一个方法来通过列名加载实例,并在Dictionary中缓存加载的值。这对于
DatabaseRow
类的主要功能之一非常有效。 private Dictionary<string, DatabaseRow> linkedRows;
protected T GetLinkedRow<T>(string key) where T : DatabaseRow, new()
{
if (linkedRows.ContainsKey(key)) return (T)linkedRows[key];
else
{
T row = new T();
row.Load(this[key]);
linkedRows.Add(key, row);
return row;
}
}
DatabaseRow
的类,并且有5个属性都使用相同的函数。类似于public Derived MyProperty { get { return new Derived().Load(myInt); } }
这样的5行代码会比将属性分成多行代码更整洁。 - Connellprotected T GetLinkedRow<T>(string key) where T : DatabaseRow, new()
会加载行并根据key
的值将其缓存在字典中。 - Connell