У меня есть класс, который является сущностью из базы данных, которая имеет кучу дат, представленных в виде строк. Например, это может быть что-то вроде этого:Есть ли способ сделать это валидацию общим?
public class Stuff
{
public string Date1 {get;set;}
public string Date2 {get;set;}
public string Date3 {get;set;}
public string Date4 {get;set;}
}
Я тогда метод проверки, который проверяет другие свойства, а также проверяет свойства даты. В настоящее время я проверяю каждую дату отдельно для каждого объекта. Это работает, но мне было интересно, если бы я мог сделать его общим, поэтому мне не пришлось дублировать код между классами и внутри самого класса. В настоящее время я делаю что-то вроде:
public bool ValidateDate(string date)
{
string[] overrides = {"","__/__/____"};
bool success = true;
DateTime dateTime;
if(!overrides.Contains(date) && !DateTime.TryParse(date,out dateTime))
{
success = false;
}
return success;
}
//Notice in this method I am repeating the if statements.
public bool Validate(Stuff stuff, out string message)
{
message = string.Empty;
bool success = true;
if(!ValidateDate(stuff.Date1))
{
success = false;
message = "Date 1 is invalid";
}
if(!ValidateDate(stuff.Date2))
{
success = false;
message = "Date 2 is invalid";
}
if(!ValidateDate(stuff.Date3))
{
success = false;
message = "Date 3 is invalid";
}
if(!ValidateDate(stuff.Date4))
{
success = false;
message = "Date 4 is invalid";
}
return success;
}
void Main()
{
string message;
Stuff stuff = new Stuff();
stuff.Date1 = "01/01/2020";
stuff.Date2 = "__/__/____";
stuff.Date3 = "";
stuff.Date4 = "44/__/____";
bool valid = Validate(stuff, out message);
}
Я думал о делать что-то вроде:
public bool Validate<T>(T value, out string message)
{
//Validation here
}
Но, поправьте меня, если я ошибаюсь, но это потребовало бы, что я получаю свойства и использование отражения в проверьте значение даты и мою другую проблему, так как свойства - это строки, поэтому нет возможности проверить, является ли это DateTime?
Не изобретать колесо, вы должны думать, чтобы использовать 3-ю партию для проверки, как: Свободный валидация или аннотация данных вместо того, чтобы делать вручную –
@CuongLe - Можете ли вы указать на стороннюю библиотеку проверки, которая будет делать это не только для дат, но и для других типов? Вы ссылались на это: http: //fluentvalidation.codeplex.com/ – Xaisoft
Да, это правильно ---- –