¿Dónde dibuja la línea cuando mueve funciones que operan en datos en la clase que contiene esos datos? Por ejemplo, imagine que tiene una clase simple que almacena una descripción del clima, con variables de temperatura, humedad, velocidad y dirección del viento, y la hora en que se tomó la medición. Ahora imagine que tiene un objeto de esta clase y desea transmitirlo a otra persona: otro proceso, otra máquina, lo que sea. ¿Pones el código para transmitir el objeto en el objeto mismo, por ejemplo, al agregar un método de Enviar (tipo de destino) a la clase de datos simple? ¿O mantiene este tipo de características en clases separadas que pueden enviar y recibir cualquier cosa por el medio, ya sea de redes, archivos de E/S, comunicaciones entre procesos, o algo similar?Objetos que se envían a sí mismos, ¿una buena idea?
Mi intuición es mantener mis clases de datos simples y envolverlas cuando quiero transmitirlas - en clases que las serializan y presentan las clases de emisor y receptor con una interfaz simple que entienden. La alternativa parece ser incluir todo, incluido el fregadero de la cocina, en las clases de datos simples: todas las funciones que puedan funcionar con esos datos, aunque indirectamente. En resumen, el código de manejo de errores de red no me parece pertenecer a una clase de datos simple.
Esto me parece obvio, pero sigo viendo que los desarrolladores ponen métodos Send() en sus clases. Incluso dicen mensaje clases a Send() ellos mismos, lo que parece altamente contrario a la intuición para mí; si escribo una carta en una hoja de papel, no le digo al periódico que se envíe solo. Envuelvo la carta en un sobre y se la entrego al cartero, porque tiene una camioneta y un mapa. ¿Qué piensa la gente?
Puede que le interese una pregunta relacionada: [¿Es una buena convención que una clase realice funciones en sí misma?] (Http://stackoverflow.com/q/3105692/240733) – stakx
Gracias a todos los que respondieron: esto fue mi primera pregunta sobre SO, y ha sido una experiencia muy positiva. – bythescruff