在做了一些研究之后,我发现几乎每个人都将从服务中检索到的实体映射到控制器中的(视图)模型。在我看来,这会带来一个实施问题。控制器负责隐藏/显示特定数据而不是服务/业务逻辑。例如,对于用户对象,密码字段将从服务层传输到控制器,因为它在实体中,然后控制器必须强制它是隐藏的。
经过一番思考,我想出了另一种方法。存储库层返回实体。在服务层中,实体被映射到模型上,对于 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;
}
}
其次,当一个实体需要一个关系实体时,例如一个城市需要在存储到数据库之前引用一个国家,在没有附加国家的情况下将城市发送回服务是很奇怪的。这使得检索国家将在控制器中。不过,在我看来,这应该是服务执行的操作(可能与另一个服务或存储库结合使用。)
因为上面不是一般做法,我担心忽略了什么?当我像上面那样实现它时,我会遇到(不可预见的)问题吗?