Объекты, которые отправляют сами себя - хорошая идея?

Где вы проводите линию при перемещении функций, которые работают с данными, в класс, содержащий эти данные? Например, представьте, что у вас есть простой класс, в котором хранится описание погоды с переменными для температуры, влажности, скорости и направления ветра, а также времени, в которое было произведено измерение. Теперь представьте, что у вас есть объект этого класса, и вы хотите передать его кому-то другому - другому процессу, другой машине, чему угодно. Вы помещаете код для передачи объекта в сам объект - например, добавляя метод Send (тип назначения) к простому классу данных? Или вы храните такую ​​функцию в отдельных классах, которые могут отправлять и получать что угодно по среде - будь то сеть, ввод-вывод файлов, межпроцессное взаимодействие, или что-нибудь подобное?

Мой инстинкт состоит в том, чтобы мои классы данных оставались простыми и обертывали их, когда я хочу их передать - в классы, которые сериализуют их и представляют классы отправителя и получателя с простым интерфейсом, который они понимают. Альтернативой, похоже, было бы поместить все, включая кухонную раковину, в простые классы данных - каждую функцию, которая могла бы когда-либо работать с этими данными, хотя бы косвенно. Короче говоря, мне кажется, что код обработки сетевых ошибок не относится к простому классу данных.

Мне это кажется очевидным, но я продолжаю видеть, как разработчики помещают методы Send () в свои классы. Они даже передают классы сообщений самим Send (), что мне кажется крайне нелогичным; если я пишу письмо на листе бумаги, я не говорю газете, чтобы она отправляла сама себя. Заворачиваю письмо в конверт и передаю почтальону, потому что у него есть фургон и карта. Что думают люди?

9
задан bythescruff 10 September 2010 в 15:22
поделиться