这是确保字段具有数据库有效值的好方法吗?
internal class Customer
{
private string _CustomerId;
internal string CustomerId
{
get
{
return (_CustomerId==null?string.Empty:(_CustomerId.Length>20?_CustomerId.Substring(0,20):_CustomerId));
}
set
{
_CustomerId = value;
}
}}
关心Sven
答案 0 :(得分:3)
更清洁的技术是使用验证属性注释您的属性,并使用库来验证实体。
示例包括:
然后,根据所选的库,您的代码将类似于:
public class Customer
{
[StringLengthValidator(20)]
public virtual string CustomerId { get; set;}
}
答案 1 :(得分:2)
验证输入的方式非常脆弱。您正在排除任何可能的输入(在本例中为CustomerId)并在请求时对其进行清理。这可能适用于此基本方案,但在很多情况下,您无法清理输入。您基本上是在纠正用户的错误并假设他的意图。你会如何用邮件地址做到这一点?例如,邮件地址'stevenhotmail.com'必须转换为'steven@hotmail.com'或'stevenhot@mail.com'。除此之外,还存在编程错误的可能性。您是否希望您的程序尝试修复您自己的编程错误。这会让你头疼。或者,当必须比较同一实体的两个属性时,您会做什么?
更好的解决方案是允许实体处于无效状态,并在将其保存到数据库之前检查其有效性。当状态无效时,不要尝试自动更正更改,而只是抛出异常或将错误传达给用户。
有多种方法可以做到这一点。例如,您可以在每个实体上实现IsValid()
方法或使用验证框架。