加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何处理具有多个聚合根的视图模型?

发布时间:2020-12-16 00:17:41 所属栏目:asp.Net 来源:网络整理
导读:目前,我的视角模型非常糟糕. 类看起来像这样= public class AccountActionsForm { public Reader Reader { get; set; } //something... } 问题是Reader类型来自域模型(违反SRP). 基本上,我正在寻找设计技巧(即将视图模型拆分为输入/输出是一个好主意吗?)如
目前,我的视角模型非常糟糕.

类看起来像这样=>

public class AccountActionsForm
    {
        public Reader Reader { get; set; }
        //something...
    }

问题是Reader类型来自域模型(违反SRP).

基本上,我正在寻找设计技巧(即将视图模型拆分为输入/输出是一个好主意吗?)如何使我的视图模型无摩擦和开发人员友好(即 – 映射应该使用控制器基类自动工作) ?

我知道AutoMapper框架,我可能会使用它.

那么,再一次 – 尝试创建正确的视图模型时常见的问题是什么?如何构建它?当需要多域对象输入时,如何进行映射?

当视图需要来自多个聚合根的数据时,我感到困惑.我正在创建app,其中包含Library,Reader,BibliographicRecord等实体.

在我的情况下 – 在域级别,将所有这3种类型分组到LibraryReaderThatHasOrderedSomeBooks或诸如此类的东西是没有意义的,但是应该显示特定库中特定读者的有序书籍列表的视图需要它们.

所以 – 使用下面的OrderedBooksListModel视图模型创建视图OrderedBooksList似乎很好,它包含LibraryOutput,ReaderOutput和BibliographicRecordOutput视图模型.甚至更好 – OrderedBooksListModel视图模型,它利用flattening technique并具有ReaderFirstName,LibraryName等道具.

但这会导致映射问题,因为有多个输入.
它不再是1:1关系,我只在一个聚合根中踢.
这是否意味着我的域模型是错的?

那些纯粹存在于UI层的视图模型字段(即表示已检查选项卡的枚举)呢?

this在这种情况下每个人都做了什么?

FooBarViewData fbvd = new FooBarViewData();
   fbvd.Foo = new Foo(){ A = "aaa"};
   fbvd.Bar = new Bar(){ B = "bbb"};
   return View(fbvd);

我不愿意这样做=>

var fbvd = new FooBarViewData();
   fbvd.FooOutput =  _mapper.Map<Foo,FooOutput>(new Foo(){ A = "aaa"});
   fbvd.BarOutput = _mapper.Map<Bar,BarOutput>(new Bar(){ B = "bbb"});
   return View(fbvd);

好像很多写作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读