[offtop]С трудом подбираю нужные слова, чтобы не сорваться на мат.[/offtop]
Суть проблемы: излишние проверки в коде.
Пример:
SomeClass::someMethod();
ArrayType array;
ArrayElement element;
int i, j;
if( (array.width() > i) && (array.height() > j)
{
	element = array.element(i, j);
}
//...
Element ArrayType::element( int i, int j)
{
	Element element;
	if(( width() > i) && (height() > j))
	{
		element = m_data[i*height() + j];
	}
	return element;
}
Привер значительно упрощен.
В реальном коде данные путешествуют по методам и в каждом втором проверяется их валидность.
Итак, вопрос, как избавится от различных проверок данных на валидность, если они следуют через длинные цепочки методов.
Есть ли какая-то методология, паттерны, общепринятые практики?
P.S. По многочисленным просьбам радиослушателей:
class Element
{
public:
    Element():pointer(NULL){}
    void* pointer;
}














