[英]Populating MVC view model from validation class in separate project
这是我的情况。 我的解决方案结构如下。
Project
用于处理路线,显示数据,...
Project.Core
用于处理业务逻辑,验证,查询,...
在Project.Core
我有一个验证类来验证我的DTO(数据传输对象)。
我的验证类(在Project.Core
):
public class IncidentValidator<T> : IValidator<T>
where T : AuditReport
{
public IncidentValidator(IList<T> ar)
{
AR = ar;
}
public IList<T> AR { get; set; }
public IList<Model> Validate()
{
var list = new List<Model>();
foreach (T ar in AR)
{
list.Add(new Model
{
IncidentId = new KeyValuePair<int, RuleType>(
ar.IncidentId,
new OccurrenceCountRule(ar).RulesValidate()
),
Circuit = new KeyValuePair<string, RuleType>(
ar.Circuit,
new CircuitRule(ar).RulesValidate()
)
});
}
return list;
}
}
我的视图模型(在Project
):
public class Model
{
public KeyValuePair<int, RuleType> IncidentId { get; set; }
public KeyValuePair<string, RuleType> Circuit { get; set; }
}
所以我的问题是, Project.Core
是否应该引用Project
来访问我的视图模型,以便我的验证类可以填充它? 但是,我不太喜欢这种方法。 我曾考虑过在控制器内部进行验证,但也不喜欢这个想法。 也许我的视图模型可以存在于Project.Core
还是被认为是不好的设计?
我能做什么?
为每个视图模型类型创建一个位于Project.Core
的接口,并让实际的视图模型实现这些接口并位于Project
。 这样,您就可以在Project.Core
使用验证所需的内容,而无需关心实现。
如果此验证器类旨在验证视图模型,则应将其与包含视图模型的项目放在同一项目中。 另一种可能性是将视图模型外部化为一个单独的程序集,供您在Project.Core
引用(尽管第一种方法似乎更好)。 无论如何,您都不应在Project.Core
中引用Project
。
我想说的是在控制器中执行此操作,创建一个用于管理验证过程的组件(框架现在仍在控制器中进行验证),因此控制器无需执行大量工作,除了委托给另一个过程。 此外,接口可以工作,或者您可以使用其他设计模式进行验证。 验证工厂也许可以包含一个验证器接口,但是验证器逻辑与模型一起驻留在Project中。
HTH。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.