Основная цель конструктора - проверить контекст создания объекта (параметры, окружение ...) и инициализировать экземпляр перед вызовом любого метода.
Например, один из конструкторов FileStream принимает путь к файлу и режим файла в параметре и выдает исключение, если файл не существует.
IMO, если ваш код является логикой валидации / инициализации, он полностью допустим в конструкторе, даже если он представляет большой объем кода. Что может быть подозрительно, так это код в конструкторе, который не связан с проверкой контекста или инициализацией экземпляра.