这是我的情况。我的解决方案结构如下。
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
内,还是被认为是糟糕的设计?
我该怎么办?
答案 0 :(得分:2)
为每个视图模型类型创建一个接口,该接口位于Project.Core
中,让实际视图模型实现接口并驻留在Project
中。这样,您就可以在Project.Core
中使用所需的内容进行验证,而无需关心实施。
答案 1 :(得分:2)
如果此验证程序类用于验证视图模型,则应将其放在与包含视图模型的项目相同的项目中。另一种可能性是将您的视图模型外部化为您在Project.Core
中引用的单独程序集(虽然第一种方法似乎更好)。在任何情况下,您都不应在Project
中引用Project.Core
。
答案 2 :(得分:1)
我想在控制器中执行此操作,创建一个管理验证过程的组件(框架现在无论如何都在控制器中验证),因此控制器不需要做很多工作,除了委托给另一个过程。此外,接口可以工作,或者您可以使用另一种设计模式进行验证。也许验证工厂可以包含验证器接口,但验证器逻辑与模型一起驻留在Project中。
HTH。