gpt4 book ai didi

asp.net-mvc - 你喜欢把 MVC View 模型数据转换逻辑放在哪里?

转载 作者:行者123 更新时间:2023-12-04 12:08:33 25 4
gpt4 key购买 nike

这是场景,我需要从多个 Web 服务调用返回的多个域​​对象加载 View 模型对象。将域模型对象转换为可理解的 View 模型对象的代码是一些相当复杂的代码。我考虑过的三个地方是:

  • Controller 内部用于加载实例 View 模型的内部方法。
  • View 模型类本身的静态 get 方法或属性,它返回 View 模型的加载实例。
  • 一个完全独立的构建器或帮助器类,具有静态 get 方法、属性或重载构造函数,可返回加载的 View 模型实例。

  • 需要明确的是,我不想使用 AutoMapper 或类似的工具。从最佳实践的角度来看,我想知道这个逻辑应该去哪里,以及为什么。

    编辑

    所以这是我到目前为止所拥有的,这确实给了我“瘦”的 Controller 逻辑和关注点分离。我怎样才能让它变得更好呢?
        // ** Controller **
    public ActionResult Default()
    {

    var viewModel = MyViewModelBuilder.BuildViewModel(MarketType.Spot);

    return View(SpotViewUrl, viewModel);
    }

    // ** Builder **
    // Lives in MVC project under ViewModelBuilders folder
    public class MyViewModelBuilder
    {
    public static ChartsModel BuildViewModel(MarketType rateMarket)
    {
    var result = new ChartsModel
    {
    RateMarket = rateMarket,
    DateRange = new DateRange()
    };
    LoadGroupedRateLists(result, rateMarket);
    LoadCoorespondingRates(result);
    return result;
    }

    private static void LoadGroupedRateLists(ChartsModel model, RateMarket rateMarket)
    {
    var rateHistSvc = new RateHistoryService(RatesPrincipal.Current.Session.Token);
    var serviceResult = (rateMarket == RateMarket.Spot)
    ? rateHistSvc.GetSpotNationalRateHistory()
    : rateHistSvc.GetContractNationalRateHistory();

    // Break lists apart by category, and re-sort and trim.
    model.Cat1Rates = CategorizeTrimAndSort("cat1", false, serviceResult);
    model.Cat2Rates = CategorizeTrimAndSort("cat2", true, serviceResult);
    model.Cat3Rates = CategorizeTrimAndSort("cat3", false, serviceResult);
    model.Cat4Rates = CategorizeTrimAndSort("cat4", true, serviceResult);
    model.Cat5Rates = CategorizeTrimAndSort("cat5", false, serviceResult);
    model.Cat6Rates = CategorizeTrimAndSort("cat6", true, serviceResult);


    // Get Date range from results.
    var sortedRateMonths = serviceResultNational
    .Select(rate => rate.YearMonth)
    .OrderBy(ym => ym.Year)
    .ThenBy(ym => ym.Month);

    model.DateRange.Start = sortedRateMonths.First();
    model.DateRange.End = sortedRateMonths.Last();
    }

    ...
    }

    最佳答案

    我会说不要在你的 Controller 中这样做。 Controller 应该尽可能“瘦”。我会这样做。

    您的“数据层”将为域对象分配其属性和值。
    然后您的后续层将其称为“业务层”,会将您的域对象转移到您的 ViewModel 中。而且您只需将 View 模型传递给您的 Controller ,而无需 Controller 处理任何逻辑。

    分离非常重要。域对象应该远离 Controller , Controller 应该只关心 View 模型。

    关于asp.net-mvc - 你喜欢把 MVC View 模型数据转换逻辑放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21597180/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com