保存方法和结果

时间:2014-02-07 21:17:34

标签: c# oop

我目前有一种保存用户的方法。

public PersonDto Save(PersonDto personDto)

但是,如果在保存时,我发现存在重复的用户名或数据的其他问题 - 我唯一的回应方式是抛出异常。

throw new Exception("Username exists");

我已经读过,“业务需求违规行为”不应使用例外情况。

有没有更好的方法将结果返回给我的调用方法?我需要返回PersonDto,还有一些关于任何问题的信息。这样做有共同的做法或模式吗?也许返回一个'SaveResult'对象,其中包含Object SavedObject(在本例中为PersonDto),以及其他一些属性,如string SaveResultbool Success

2 个答案:

答案 0 :(得分:2)

也许实现一个通用包装器用于所有这些请求。

enum Disposition
{
    OK,
    Warning,
    Error
}

class Response<T>
{
    public T Result { get; set; }
    public Disposition Disposition { get; set; } 
    public string Message { get; set; }
}

即:

public Response<PersonDto> Save(PersonDto personDto)

这样,您可以为每个返回值指定一些元数据。

答案 1 :(得分:1)

我建议使用SaveResult方法解决您的问题,例如

public class SaveResult
{
    public PersonDto { get; set; }
    public bool Success { get; set; }
    public string ErrorMessage { get; set; }
}

var result = Save(person);

if (!result.Success)
{
    Console.WriteLine(result.ErrorMessage);
}

或类似的东西。这将允许您传回PersonDto,但也向API调用者发出信号,表示尝试保存时发生错误。

抛出异常并没有什么问题,但是当你还想要返回DTO的人时,你也可以为此目的使用特定的方法返回类型。