0

在做了一些研究之后,我发现几乎每个人都将从服务中检索到的实体映射到控制器中的(视图)模型。在我看来,这会带来一个实施问题。控制器负责隐藏/显示特定数据而不是服务/业务逻辑。例如,对于用户对象,密码字段将从服务层传输到控制器,因为它在实体中,然后控制器必须强制它是隐藏的。

经过一番思考,我想出了另一种方法。存储库层返回实体。在服务层中,实体被映射到模型上,对于 ViewModel,我创建了一个单独的部分类,该类扩展了模型以添加 MVC 的元数据(用于验证):

using System.ComponentModel.DataAnnotations;

[MetadataType(typeof(MyClassMetadata))]
public partial class MyClass
{
  private class MyClassMetadata
  {
     [Required]
     public int Id;

     [Required]
     [StringLength(100)]
     public string Name;
  }
}

其次,当一个实体需要一个关系实体时,例如一个城市需要在存储到数据库之前引用一个国家,在没有附加国家的情况下将城市发送回服务是很奇怪的。这使得检索国家将在控制器中。不过,在我看来,这应该是服务执行的操作(可能与另一个服务或存储库结合使用。)

因为上面不是一般做法,我担心忽略了什么?当我像上面那样实现它时,我会遇到(不可预见的)问题吗?

4

1 回答 1

0

我可以回答您的第一个问题,但不能回答第二个问题(关于使用 ORM 的关系实体),因为我缺乏 N 层和 ORM 的经验。

对于您的第一个问题,它旨在在表示层中有一些(视图)模型。当您需要设置特定于 UI 的逻辑(例如屏幕位置、css 样式等)时,视图模型将有助于保存这些信息。

假设您需要检索 1000 个请求。在这些请求中,有 300 个错误请求和 200 个警告请求未排序。您需要在网格中显示这些请求,并使用自定义样式(例如错误请求的红色字体颜色等)。

一种最简单的方法是将 css 类分配给每个请求,并使用该类来确定每个请求的样式。

对于第二个问题,我相信提供不同的方法,例如GetCityGetCityWithCountry将满足关系实体的要求。但这只是我的 2 美分。

于 2013-06-27T09:47:29.780 回答