【发布时间】:2011-05-07 07:26:19
【问题描述】:
我在我的项目中使用通用属性,但我不知道,使用它们有什么缺点,请告诉我一个场景,它们有缺点吗?下面是我的部分代码。
public class GenericResult<T>
{
public T Data { get; set; }
public bool IsSuccess { get; set; }
public string Message { get; set; }
}
public GenericResult<int> AddCategory(TCategory tCategory)
{
GenericResult<int> result = new GenericResult<int>();
//business logic validation,dont make sense,only example :)
if (tCategory.Name.Lenght > 100)
{
result.IsSuccess = false;
result.Message = "Category Name length is too long";
result.Data = 0;
}
//handle .net runtime error//may be database is not aviable.
try
{
result.Data = this.catalogRepository.AddCategory(tCategory);
result.IsSuccess = true;
}
catch (Exception ex)
{
result.Data = 0;
result.IsSuccess = false;
result.Message = ex.Message;
}
return result;
}
public GenericResult<IEnumerable<TCategory>> GetCategoryHierarchy(TCategory parentCategory)
{
GenericResult<IEnumerable<TCategory>> result = new GenericResult<IEnumerable<TCategory>>();
try
{
IEnumerable<TCategory> allCategories = catalogRepository.GetAllCategories();
result.Data = GetCategoryHierarchy(allCategories, parentCategory);
result.IsSuccess = true;
}
catch (Exception ex)
{
result.IsSuccess = false;
result.Data = null;
result.Message = ex.Message;
}
return result;
}
【问题讨论】:
-
如果 AddCategory 失败,为什么要返回一个实例?这通常被认为是不好的做法。返回 null 以使外部可以清楚地看到失败。
-
同意马里奥的观点,但抛出异常可能更具表现力,以便向所有人展示出了问题!!!
-
null不会给您任何消息。他返回的是MayBe<T>的自制版本,这在其他语言中是一个很好的模式。