私はすべてのスイッチの母親をリファクタリングしようとしています。ここに既存のコードがあります:すべてのC#Switchステートメントの母親をどのようにリファクタリングすることができますか
bool FieldSave(Claim claim, string field, string value)
{
//out vars for tryparses
decimal outDec;
int outInt;
bool outBool;
DateTime outDT;
//our return value
bool FieldWasSaved = true;
//World Greatest Switch - God help us all.
switch (field)
{
case "Loan.FhaCaseNumber":
GetLoan(claim).FhaCaseNumber = value;
break;
case "Loan.FhaInsurance":
if (bool.TryParse(value, out outBool))
{
GetLoan(claim).FhaInsurance = outBool;
FieldWasSaved = true;
}
break;
case "Loan.UnpaidPrincipalBalance":
if (decimal.TryParse(value, out outDec))
{
GetLoan(claim).UnpaidPrincipalBalance = outDec;
FieldWasSaved = true;
}
break;
case "Loan.Mortgagor_MortgagorID":
if(Int32.TryParse(value, out outInt)){
GetLoan(claim).Mortgagor_MortgagorID = outInt;
FieldWasSaved = true;
}
break;
case "Loan.SystemDefaultDate":
if (DateTime.TryParse(value, out outDT))
{
GetLoan(claim).SystemDefaultDate = outDT;
FieldWasSaved = true;
}
break;
//And so on for 5 billion more cases
}
db.SaveChanges();
return FieldWasSaved;
}
実際にこのスーパースイッチが必要ですか?
もう少しCONTEXT 私は他のDEVが最大であるすべての魔法を理解することは主張しませんが、基本的には文字列「Loan.FieldNameは、」HTMLの入力タグにタグ付けされた上で、いくつかのメタデータから来ています。これは、特定のフィールドをエンティティフレームワークのデータテーブル/プロパティコンボにリンクするためにこのスイッチで使用されます。これは強く型付けされたビューから来ていますが、人間のケンを超える理由から、このマッピングはすべてのものを一緒に保持する接着剤になっています。
...しかし、あなたは正しい、それは私がそれに何かを参照してください「いけない、特に巧妙な – Murph
を見ていません。 n個のケースがあり、n個の異なるハンドリングが必要な場合、これは妥当と思われます。理解しにくい、重複したコードがあるなどの理由ではありません。 –
@Murphあなたは "//そして50億件以上の事件のためにそうしていますか?" ;) – DaveShaw