Herkese açık SDK'mızla, bir istisnanın neden oluştuğu hakkında çok bilgilendirici mesajlar verme eğilimindeyiz. Örneğin:
if (interfaceInstance == null)
{
string errMsg = string.Format(
"Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.",
ParameterInfo.Name,
ParameterInfo.ParameterType,
typeof(IParameter)
);
throw new InvalidOperationException(errMsg);
}
Bununla birlikte, kodun ne yaptığından ziyade hata mesajlarına çok fazla odaklanma eğiliminde olduğundan, bu kod akışını karmaşık hale getirir.
Bir meslektaşım, böyle bir şeye fırlatma istisnasının bir kısmını yeniden düzenlemeye başladı:
if (interfaceInstance == null)
throw EmptyConstructor();
...
private Exception EmptyConstructor()
{
string errMsg = string.Format(
"Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.",
ParameterInfo.Name,
ParameterInfo.ParameterType,
typeof(IParameter)
);
return new InvalidOperationException(errMsg);
}
Bu, kod mantığını daha kolay anlaşılır hale getirir, ancak hata işlemeyi yapmak için birçok ek yöntem ekler.
"Uzun istisna iletileri dağınıklık mantığı" sorununu önlemek için başka yollar nelerdir? Öncelikle idiyomatik C # /. NET hakkında soruyorum, ancak diğer dillerin bunu nasıl yönettiğini de yararlı.
[Düzenle]
Her yaklaşımın avantaj ve dezavantajlarına sahip olmak güzel olurdu.
Exception.Data
System.Reflection.MethodBase
Exception.Data
. Vurgu, telemetriyi yakalamak olmalıdır. Burada yeniden düzenleme yapmak iyidir, ancak sorunu özlüyor.