在这个特定的应用程序中,没有单独的数据层,数据访问代码位于实体本身中。例如,考虑一个客户实体,然后在Customer.cs文件,其中的成员和属性的定义,则必须方法来加载客户对象,如下当数据库的数据不好时,应该抛出异常吗?
public bool TryLoad(int customerID, out Customer customer)
{
bool success = false
try
{
//code which calls the db and fills a SqlDataReader
ReadDataFromSqlDataReader(reader);
success = true;
}
catch(Exception ex)
{
LogError();
success = false;
}
return success;
}
现在,在ReadDataFromSqlDataReader(读取器),的TryParse用于将数据从阅读器加载到对象中。例如
public void ReadDataFromSqlDataReader(reader)
{
int.TryParse(reader["CustomerID"].ToString(), out this.CustomerID);
PhoneNumber.TryParse(reader["PhoneNumber"].ToString(), out this.PhoneNumber);
... similar TryParse code for all the other fields..
}
正在使用TryParse来读取读者的所有属性一个很好的做法?一位开发者告诉我,它以TryParse的方式完成比int.Parse更好的性能。但是当你从数据库中读取的值不符合你的代码所期望的值时,你是否想要抛出异常?我的意思是在这种情况下,如果数据库中有错误的电话号码,那么可能对象不应该被初始化,而是用一个空的电话号码加载一个对象?
听起来特殊 – Jodrell 2012-04-17 14:39:42
如果您想要处理不良数据,'TryParse'只有更好的'Parse'性能。 – user7116 2012-04-17 14:41:03
我无法想象表演有什么不同。它吞下异常,因此实际上包含了您将在外部使用.Parse写入的相同代码。 – 2012-04-17 14:41:51