我有以下一组接口和类。
public interface IValidatableObject
{
List<string> ValidationErrors { get; }
bool Validate();
}
public class ValidatableObject : IValidatableObject
{
public List<string>ValidationErrors { get; }
public bool Validate()
{
//dostuff
}
}
public interface IDeviceDataObject
{
int Id { get; set; }
string Name { get; set; }
}
public class DeviceDataObject : ValidatableObject, IDeviceDataObject
{
public int Id { get; set; }
public string Name { get; set; }
}
public class DeviceService
{
public bool ValidateDevice(IDeviceDataObject device)
{
return device.Validate(); // This throws a compiler error
}
}
在上述服务操作ValidateDevice中的问题在于编译器无法解析device.Validate(),因为IDeviceDataObject未实现IValidatableObject接口。
我的问题是,将IValidatableObject更改为实现IValidatableObject是否正确。我有点不确定这是否是良好的实践,因为我认为DeviceDataObject通过ValidatableObject和IDeviceDataObject两次实现了IValidatableObject。请问是否有人能帮我澄清这一点?
public interface IDeviceDataObject : IValidatableObject
{
int Id { get; set; }
string Name { get; set; }
}
public bool ValidateDevice(IValidatableObject someobj)
?这不是表达验证方法功能的方式吗:它接受可验证的东西。其他所有东西都可以保持原样。 - Philip DaubmeierIDeviceDataObject
继承IValidatableObject
。如果不是,那么这不是解决方案。有时候真的就是这么简单:只是语义上有意义的问题。将其转化为代码,反过来也是一个相当简单的步骤。 - Philip Daubmeier