【发布时间】:2016-10-22 07:21:34
【问题描述】:
我的模型类很少,我注意到 Name 属性(例如:CountryName、BranchName、StateName、 等)在整个应用程序中具有相同的规则,例如它必须是强制性的并且不能超过一定数量的字符。下面以BranchAddClass.cs为例。
问题:
- 如何在
Model Class代码中定义自定义对象并重用,而不是声明为字符串(参见BranchAddModel.cs中的BranchName属性)。 - 如何在 NameField.cs 中实施
FluentValidation规则。目前,正在重复验证(请参阅BranchAddModel.cs类)。
NameField.cs
我正在考虑创建一个对象类并在这个类中执行验证,这样我就不会违反DRY 原则。但我无法实现它。如果您有更好的方法来实现我想要实现的目标,我们将受到欢迎!
public class NameField
{
private readonly string _value;
private NameField(string value)
{
_value = value;
}
}
如果 NameField 类有效,那么我希望我可以在应用程序的其余部分使用它,请参阅示例
BranchAddModel.cs
namespace Application
{
[Validator(typeof(BranchAddModelValidator))]
public class BranchAddModel
{
public byte ServiceTypeId { get; set; }
public string BranchName { get; set; } //this could be replaced when NameField issue is solved.
public NameField PreferredBranchName { get; set; } //Reference to NameField class
public short BaseCurrencyId { get; set; }
public short TimezoneId { get; set; }
}
public class BranchAddModelValidator : AbstractValidator<BranchAddModel>
{
public BranchAddModelValidator()
{
//trying to avoid writing this validation.
RuleFor(x => x.BranchName)
.NotEmpty()
.Length(0, 128);
RuleFor(x => x.ServiceTypeId)
.NotEmpty();
RuleFor(x => x.BaseCurrencyId)
.NotEmpty();
RuleFor(x => x.TimezoneId)
.NotEmpty();
}
}
}
注意:如果您认为问题不清楚,请告诉我。
【问题讨论】:
-
使用反射构建表达式树以传递给
RuleFor -
@Rob 你能举个例子吗?
标签: c# .net refactoring dry fluentvalidation