Estoy escribiendo una implementación Java de un juego de cartas, así que creé un tipo especial de Colección que llamo Zona. Todos los métodos de modificación de la Colección de Java no son compatibles, pero hay un método en la API de Zona move(Zone, Card)
, que mueve una Tarjeta de la Zona dada a sí misma (lograda por técnicas de paquete privado). De esta manera, puedo asegurarme de que no se saquen cartas de una zona y simplemente desaparezcan; solo se pueden mover a otra zona.
Mi pregunta es, ¿qué tan necesario es este tipo de codificación defensiva? Es "correcto", y se siente como la práctica correcta, pero no es como si la API de Zone fuera a formar parte de alguna biblioteca pública. Es solo para mí, por lo que es como si estuviera protegiendo mi código de mí mismo cuando probablemente podría ser más eficiente simplemente usando Colecciones estándar.
¿Hasta dónde debo llevar esta idea de Zona? ¿Alguien puede darme algún consejo sobre cuánto debería pensar en preservar los contratos en las clases que escribo, especialmente para aquellos que realmente no estarán disponibles públicamente?