从另一个调用一个重载方法来构建 ViewModel C#/ ASP.NET MVC
Calling one overloaded method from another to build ViewModel C#/ ASP.NET MVC
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;
}
我的问题是,这是执行此操作的正确/最有效的方法吗?如有任何意见,我们将不胜感激。
我认为从它的另一个重载版本调用方法没有任何问题 - 我已经看到它完成了,并且能够很容易地看到意图。
你基本上是在说"If I have the fileId, I'd like to also initialize the FileDetails object, too!"
对我来说很有意义:)
实际上,典型的使用链重载的方法是将大部分逻辑放在最具体的逻辑中,并适当地处理可选值:
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,您的 current 方法没有任何不同,这可能没问题,在这种情况下,您可以进行 null 检查过载。
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;
}
我的问题是,这是执行此操作的正确/最有效的方法吗?如有任何意见,我们将不胜感激。
我认为从它的另一个重载版本调用方法没有任何问题 - 我已经看到它完成了,并且能够很容易地看到意图。
你基本上是在说"If I have the fileId, I'd like to also initialize the FileDetails object, too!"
对我来说很有意义:)
实际上,典型的使用链重载的方法是将大部分逻辑放在最具体的逻辑中,并适当地处理可选值:
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,您的 current 方法没有任何不同,这可能没问题,在这种情况下,您可以进行 null 检查过载。