簡體   English   中英

從另一個調用一個重載方法來構建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;
}

我的問題是,這是正確/最有效的方法嗎? 任何輸入將不勝感激。

實際上,使用鏈式重載的典型方法是將大多數邏輯放在最具體的邏輯中並適當地處理可選值:

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,則當前方法沒有任何不同,這可能沒問題,在這種情況下,您可以從過載中取出空檢查。

我認為從另一個重載版本調用方法沒有任何問題 - 我已經看到它完成了,並且能夠很容易地看到意圖。

你基本上是在說“如果我有fileId,我也想初始化FileDetails對象!”

我感覺合理 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM