Estou tendo uma discussão com meu colega de trabalho sobre quanto trabalho um construtor pode fazer. Eu tenho uma classe B que internamente requer outro objeto A. O objeto A é um dos poucos membros que a classe B precisa fazer seu trabalho. Todos os seus métodos públicos dependem do objeto interno A. As informações sobre o objeto A são armazenadas no banco de dados, então eu tento validar e obtê-lo procurando-o no banco de dados no construtor. Meu colega de trabalho apontou que o construtor não deve fazer muito trabalho além de capturar os parâmetros do construtor. Como todos os métodos públicos falhariam de qualquer maneira, se o objeto A não fosse encontrado usando as entradas do construtor, argumentei que, em vez de permitir que uma instância seja criada e depois falhe, é melhor lançar o construtor mais cedo.
O que os outros pensam? Eu estou usando c # se isso faz alguma diferença.
Leitura Existe alguma razão para fazer todo o trabalho de um objeto em um construtor? Gostaria de saber que a busca do objeto A, indo ao DB, faz parte de "qualquer outra inicialização necessária para tornar o objeto pronto para uso" porque, se o usuário passasse valores incorretos para o construtor, eu não seria capaz de usar nenhum de seus métodos públicos.
Os construtores devem instanciar os campos de um objeto e fazer qualquer outra inicialização necessária para tornar o objeto pronto para uso. Isso geralmente significa que os construtores são pequenos, mas há cenários em que isso seria uma quantidade substancial de trabalho.