案例:我有一个插入数据并执行大量操作的void方法但是最近我被要求服务中的这个公开方法需要返回一个值
我有哪些选择? 我很确定我需要重构这个但是如何或哪种方法?
[OperationContract]
[WebInvoke]
[TransactionFlow(TransactionFlowOption.Allowed)]
void InsertPerson(string Name, string LastName, string Income, string Address)
方法如下:
public void InsertPerson(string Name, string LastName, string Income, string Address)
{
try
{
Name = (Name == null) ? "" : Name ;
LastName = (LastName == null) ? "" : LastName ;
Income = (Income== null) ? "" : Income;
Address = (Address== null) ? "" : Address;
//bunch of Procedures, DataSets and Functions
}
catch(Exception ex)
{
StoredProcedures.InsertLog(ex.ToString());
}
}
需要解决方案:让我们说程序计算收入并确定该人不适合贷款,我需要通过同样的方法告诉来电者该人不适合贷款比如说一些名为HighRisk
的额外参数返回1或0
修改
找到一个解决方案非常简单我只是将void
更改为List<T>
并创建了一个返回整个结构的类
List<Person> PersonInfo = new List<Person>();
DataSet ds = StoredProcedures.PersonSelect(Name, LastName);
if (ds.Tables[0].Rows.Count > 0)
{
Person PersonData = new Person();
PersonData.SuitableForLoan = ds.Tables[0].Rows[0]["SuitableForLoan"].ToString();
PersonInfo.Add(PersonData);
}
return PersonInfo;
编辑2:我不明白为什么我的问题被低估了,我非常讨厌这个地方,现在我记得为什么我不想再建一个帐户
答案 0 :(得分:4)
嗯,这里简单的答案是:更改API - 可能返回枚举而不是void
,以指示成功或失败的原因。请注意,这是一个重大变化,因此您不能这样做,除非您乐意同时部署客户端和服务器 以匹配此API。如果您无法破坏API,则必须添加具有返回值的新方法,并迁移客户端以使用新方法 - 将旧方法留给旧方法使用,直到更新为止。
你也可以用某种标题来破解它,但在大多数情况下这是一个糟糕的想法,只会让事情变得比现在更加困惑。