Se o núcleo da sua pergunta for este ...
If some client code passes an argument whose value is invalid for the thing that my data structure is modeling, should I reject the value or convert it to something sensible?
... então minha resposta geral seria "rejeitar", porque isso ajudará a chamar a atenção para possíveis erros no código do cliente que estão realmente fazendo com que o valor inválido apareça no programa e alcance seu construtor. Chamar a atenção para os bugs é geralmente uma propriedade desejada na maioria dos sistemas, pelo menos durante o desenvolvimento (a menos que seja uma propriedade desejada do seu sistema para atrapalhar em caso de erros).
A questão é se você está realmente enfrentando esse caso .
-
Se a estrutura de dados se destina a modelar coordenadas polares em geral, aceite o valor porque os ângulos fora do intervalo de -180 e +180 não são realmente inválidos. Eles são perfeitamente válidos e, por acaso, eles sempre têm um equivalente dentro do intervalo de -180 e +180 (e se você quiser convertê-los para segmentar esse intervalo, sinta-se à vontade - o código do cliente geralmente não precisa se importar) .
-
Se a sua estrutura de dados está modelando explicitamente as coordenadas do Web Mercator (de acordo com a pergunta em sua forma inicial), é melhor seguir as provisões mencionadas na especificação (que eu não sei, então eu ganhei) Não diga nada sobre isso). Se a especificação da coisa que você está modelando diz que alguns valores são inválidos, rejeite-os. Se ele diz que eles podem ser interpretados como algo sensato (e, portanto, são realmente válidos), aceite-os.
O mecanismo que você usa para sinalizar se os valores foram aceitos ou não depende dos recursos do seu idioma, sua filosofia geral e seus requisitos de desempenho. Então, você poderia estar lançando uma exceção (no construtor) ou retornando uma versão anulável da sua estrutura (através de um método estático que chama um construtor privado) ou retornando um booleano e passando sua estrutura para o chamador como um parâmetro out
( novamente por meio de um método estático que chama um construtor privado) e assim por diante.