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