Где вы рисуете линию при перемещении функций, которые работают с данными в классе, который содержит эти данные? Например, представьте, что у вас есть простой класс, в котором хранится описание погоды с переменными температуры, влажности, скорости и направления ветра и временем, в которое было произведено измерение. Теперь представьте, что у вас есть объект этого класса, и вы хотите передать его кому-то другому - другому процессу, другой машине, что угодно. Вы помещаете код для передачи объекта в сам объект - например, путем добавления метода Send (тип назначения) к простому классу данных? Или вы сохраняете эту функцию в отдельных классах, которые могут отправлять и получать что-либо по всему средству - будь то сетевое взаимодействие, файловый ввод/вывод, межпроцессный обмен или что-то подобное?Объекты, которые отправляют себя - хорошая идея?
Мой инстинкт кистей должен содержать простые классы данных и завершать их, когда я хочу их передать - в классах, которые сериализуют их и представляют классы отправителя и получателя с помощью простого интерфейса, который они понимают. Альтернативой, по-видимому, является помещение всего, в том числе кухонного раковины, в простые классы данных - каждая функция, которая может когда-либо работать с этими данными, но косвенно. Короче говоря, код обработки ошибок в сети, похоже, не относится к классу простых данных.
Это кажется мне очевидным, но я вижу, что разработчики применяют методы Send() на своих классах. Они даже сообщают сообщениям классам Отправить() сами, что кажется мне очень противоречивым; если я напишу письмо на листе бумаги, я не скажу, чтобы газета отправила себя. Я переношу письмо в конверт и передаю его почтальону, потому что у него есть фургон и карта. Что думают люди?
Возможно, вас заинтересует вопрос: [Является ли хорошим соглашением для класса выполнять функции на себя?] (Http://stackoverflow.com/q/3105692/240733) – stakx
Спасибо всем, кто ответил - это был моим первым вопросом о SO, и это был очень положительный опыт. – bythescruff