На работе возник спор о том как правильно проектировать классы и связывать их между собой.
Есть у нас текст и мы хотим его отправить в одну из N соцсетей (facebook, twitter, evernote, poket ...). Эта задача состоит из подзадачи: подсоединение к соцсети (получение access токена или логина/пароля).
Для каждой соцсети заводим по классу, который определяет ее статус, позволяет подключиться к ней, разлогинится и др. Далее я написал класс (ServiceConnector) решающий подзадачу подсоединения к любой соцсети (какой именно передается в методе).
Когда я пишу класс для решения задачи я считаю что этот класс должен полностью решать поставленную задачу включая все подзадачи. Т.е. Мой класс решающий проблему шаринга (TextSharer) содержит объект класса ServiceConnector. В итоге когда мы отправляем текст то объект класса TextSharer обработает ситуацию когда пользователь не подключен к сети и делегирует эту проблему внутреннему объекту класса ServiceConnector. Если пользователь уже подключен то шарим сразу.
Мои коллеги сказали что так делать неправильно и надо хранить объекты классов TextSharer и ServiceConnector на одном уровне т/е/ в контроллере (MVC) вида на котором мы хотим шарить текст. Контроллер должен в начале подключиться к сети через объект класса ServiceConnector а затем по результату обратиться к TextSharer и отправить текст. Если запрос на отправку текста у объекта класса TextSharer был вызван без предварительной авторизации то метод объекта TextSharer должен вернуть ошибку.
Я вот не очень понимаю такой подход, да он гибче, TextSharer ничего не будет знать о ServiceConnector, но тогда если придется использовать TextSharer в других контроллерах, возникнет дублирование кода, т/к/ для выполнения шаринга необходимо быть подключенным к соцсети.
Я понимаю что тема абстрактная и в каждом конкретном случае надо поступать по обстоятельствам но все же. Скажите какой подход вам ближе и почему.