В объектно-ориентированном языке размещение логики в самом классе, а не в классе обслуживания, является типичным подходом (и лучше ИМО).Он следует принципу «скажи, не спрашивай», например, сообщая файлу об удалении, а не прося какую-либо службу удалить его.Одной из основных причин этого является возможность наследования.Например, если у вас есть подкласс File и вы хотите, чтобы он записал сообщение журнала до того, как он будет удален, это будет трудно сделать с классом обслуживания, поскольку вам потребуется отдельный класс обслуживания для каждого подкласса.
В терминах сервис-ориентированного подхода это обычно рассматривается на более высоком уровне (т. Е. Сервис-ориентированная архитектура).Рассмотрим систему финансовых акций, у вас может быть услуга «купить акции» и услуга «продать акции».Иметь класс обслуживания, соответствующий отдельным классам (т. Е. Сервис Stock, который знает, как покупать и продавать акции), не будет очень объектно-ориентированным.
В вашей системе также может быть уровень обслуживания, которыйпредоставляет точки интеграции с другими внешними службами (например, с базой данных), но, опять же, я не думаю, что это то, о чем вы здесь говорите.Итак, я мог бы придерживаться подхода инкапсуляции логики в самом классе File.