从一个重载方法调用另一个重载方法来构建ViewModel.净MVC
本文关键字:重载 方法 构建 ViewModel MVC 另一个 调用 一个 | 更新日期: 2023-09-27 18:17:02
对ASP半生不熟。NET MVC和编程。我有一个方法,它建立了一个ViewModel,我在大多数其他视图中使用,并有两个重载。我想从第二个重载调用第一个重载以提高效率,所以我这样做:
public HeaderViewModel BuildHeaderViewModel(int? chainId, int? sheetId)
{
HeaderViewModel header = new HeaderViewModel();
header.ChainName = db.Chains.Find(chainId).Name;
header.SheetName = db.Sheets.Find(sheetId).Name;
header.SheetDescription = db.Sheets.Find(sheetId).Description;
return header;
}
public HeaderViewModel BuildHeaderViewModel(int? chainId, int? sheetId, int? fileId)
{
HeaderViewModel header = new HeaderViewModel();
header = BuildHeaderViewModel(chainId, sheetId); // calling first overload
var fileDetails = db.FileDetails.Find(fileId);
header.SheetFileName = fileDetails.Name + fileDetails.Extension;
return header;
}
我的问题是,这是正确/最有效的方法吗?
实际上,使用链重载的典型的方法是将大部分逻辑放在最具体的逻辑中,并适当地处理可选值:
public HeaderViewModel BuildHeaderViewModel(int? chainId, int? sheetId)
{
return BuildHeaderViewModel(chainId, sheetId, null);
}
public HeaderViewModel BuildHeaderViewModel(int? chainId, int? sheetId, int? fileId)
{
HeaderViewModel header = new HeaderViewModel();
header.ChainName = db.Chains.Find(chainId).Name;
header.SheetName = db.Sheets.Find(sheetId).Name;
header.SheetDescription = db.Sheets.Find(sheetId).Description;
if(fileId.HasValue)
{
var fileDetails = db.FileDetails.Find(fileId);
header.SheetFileName = fileDetails.Name + fileDetails.Extension;
}
return header;
}
主要区别在于,如果fileId
为null, 当前方法没有什么不同,这可能是可以的,在这种情况下,您可以将null检查从过载中取出。
我不认为从它的另一个重载版本调用一个方法有什么错——我见过这样做,并且能够很容易地看出意图。
你基本上是在说"如果我有fileId,我也想初始化FileDetails对象!"
对我来说是有意义的