Риск этого не только в том, что он неприглядный, но и в том, что он очень подвержен ошибкам. Через некоторое время вы можете столкнуться с риском дублирования в ваших условиях.
Если вы действительно можете различить условие по типу пользователя, вы можете как минимум разбить тело каждого условия на отдельную функцию. Так что вы проверяете на основе типа и вызываете соответствующую функцию, специфичную для этого типа. Более OO решение состоит в том, чтобы представить каждого пользователя как класс, а затем переопределить некоторый метод вычисления, чтобы вернуть значение, основанное на возрасте. Если вы не можете использовать классы, но, по крайней мере, можете использовать перечисления, тогда вы сможете сделать более приятный оператор switch для перечислений. Переключение на строки поступит только в Java 7.
Что меня беспокоит, так это ситуации наложения (например, два типа пользователей с некоторыми общими правилами и т. Д.). Если это так, то вам лучше представить данные в виде некоторого внешнего файла (например, таблицы), который вы будете читать и поддерживать, и ваш код будет по существу работать как драйвер, который выполняет соответствующий поиск в этих данных. задавать. Это общий подход для сложных бизнес-правил, поскольку никто не хочет использовать и поддерживать тонны кода.