簡體   English   中英

MVC 中的模型到底應該包含什么?

[英]What exactly should a model contain in MVC?

我最近一直在閱讀微軟關於 ASP.NET Core 的教程,並且看到該教程的控制器類包括從數據庫中獲取數據的 LINQ 查詢。 例如,該教程的代碼片段如下所示:


// GET: Movies
public async Task<IActionResult> Index(string movieGenre, string searchString)
{
    // Use LINQ to get list of genres.
    IQueryable<string> genreQuery = from m in _context.Movie
                                    orderby m.Genre
                                    select m.Genre;

    var movies = from m in _context.Movie
                 select m;

    if (!string.IsNullOrEmpty(searchString))
    {
        movies = movies.Where(s => s.Title.Contains(searchString));
    }

    if (!string.IsNullOrEmpty(movieGenre))
    {
        movies = movies.Where(x => x.Genre == movieGenre);
    }

    var movieGenreVM = new MovieGenreViewModel
    {
        Genres = new SelectList(await genreQuery.Distinct().ToListAsync()),
        Movies = await movies.ToListAsync()
    };

    return View(movieGenreVM);
}

我的問題如下:模型類究竟包含什么? 在我讀到的所有關於 MVC 模式的文章中,我都被建議將我從數據庫中獲取數據的函數放入模型類中。 那么他們在本教程中是否犯了錯誤?

模型類是 DTO,您可以在此處閱讀有關它們的更多信息: https : //docs.microsoft.com/en-us/aspnet/web-api/overview/data/using-web-api-with-entity-framework /第 5 部分

您擁有的代碼中沒有錯誤,這只是一種不好的做法。 實體和 DTO 之間的主要區別在於您沒有提及與另一個 DTO 的關系。 例如,當我們談論實體時,我們有

public class Author{
public string name{get; set;}
public List<Book> Books {get; set;}
}

但是當我們談論 DTO 時,我們只會有

public class Author{
    public string name{get; set;}
    }

代碼將運行,但您不想獲取實體的全部屬性,只有少數並且顯然不是與其相關的實體。 如果您執行他們提供的版本,則代碼將需要更多時間來編譯並且容易出錯。

暫無
暫無

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

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