Я читаю книгу Роберта Мартина «Чистый код», и большинство из того, что я прочитал, имеет смысл, и я стараюсь применять столько, сколько возможно. Одна из самых простых вещей, о которых он говорит, заключается в том, что методы должны быть небольшими, он идет полностью, чтобы сказать, что они не должны содержать более трех строк.Меньшие методы против метода четкой рекурсии
Учитывая, что я разбил рекурсивный метод на два меньших, но в обзоре кода один из моих сверстников предположил, что это выглядело странно и что рекурсия была скрытой.
Итак, что вы думаете по этому поводу? Я включаю оба подхода ниже.
Это метод одного метода.
private object GetObject(string propertyName, object dataObject)
{
object returnObject;
if (dataObject == null) return null;
if (propertyName.Contains("."))
{
Type dataObjectType = dataObject.GetType();
PropertyInfo dataObjectProperty = dataObjectType.GetProperty(propertyName.Substring(0, propertyName.IndexOf(".")));
ThrowExceptionIfObjectOrPropertyInexistant(dataObjectProperty, dataObjectType.FullName, propertyName);
object nestedObject = dataObjectProperty.GetValue(dataObject, null);
string nestedObjectPropertyName = propertyName.Substring(propertyName.IndexOf(".") + 1);
returnObject = GetObject(nestedObjectPropertyName, nestedObject);
}
else
{
returnObject = dataObject;
}
return returnObject;
}
Это два метода один.
private object GetObject(string propertyName, object dataObject)
{
object returnObject;
if (dataObject == null) return null;
if (propertyName.Contains("."))
{
returnObject = GetNestedObject(propertyName, dataObject);
}
else
{
returnObject = dataObject;
}
return returnObject;
}
private object GetNestedObject(string propertyName, object dataObject)
{
object returnObject;
Type dataObjectType = dataObject.GetType();
PropertyInfo dataObjectProperty = dataObjectType.GetProperty(propertyName.Substring(0, propertyName.IndexOf(".")));
ThrowExceptionIfObjectOrPropertyInexistant(dataObjectProperty, dataObjectType.FullName, propertyName);
object nestedObject = dataObjectProperty.GetValue(dataObject, null);
string nestedObjectPropertyName = propertyName.Substring(propertyName.IndexOf(".") + 1);
returnObject = GetObject(nestedObjectPropertyName, nestedObject);
return returnObject;
}
Другие предлагаемые решения также работали, но это то, что мне больше всего понравилось в этой проблеме. Спасибо. –
Вы все еще вызываете 'propertyName.IndexOf (". ")' Здесь дважды (в строке 'return'). Это может быть ненужным. – strager
Кроме того, почему бы вы не превратили рекурсию в итерацию? ; P – strager