Определение правильной связности между классами
От: CatWarrior Россия www.gaolife.hut1.ru
Дата: 10.11.12 13:34
Оценка:
На работе возник спор о том как правильно проектировать классы и связывать их между собой.

Есть у нас текст и мы хотим его отправить в одну из N соцсетей (facebook, twitter, evernote, poket ...). Эта задача состоит из подзадачи: подсоединение к соцсети (получение access токена или логина/пароля).

Для каждой соцсети заводим по классу, который определяет ее статус, позволяет подключиться к ней, разлогинится и др. Далее я написал класс (ServiceConnector) решающий подзадачу подсоединения к любой соцсети (какой именно передается в методе).

Когда я пишу класс для решения задачи я считаю что этот класс должен полностью решать поставленную задачу включая все подзадачи. Т.е. Мой класс решающий проблему шаринга (TextSharer) содержит объект класса ServiceConnector. В итоге когда мы отправляем текст то объект класса TextSharer обработает ситуацию когда пользователь не подключен к сети и делегирует эту проблему внутреннему объекту класса ServiceConnector. Если пользователь уже подключен то шарим сразу.

Мои коллеги сказали что так делать неправильно и надо хранить объекты классов TextSharer и ServiceConnector на одном уровне т/е/ в контроллере (MVC) вида на котором мы хотим шарить текст. Контроллер должен в начале подключиться к сети через объект класса ServiceConnector а затем по результату обратиться к TextSharer и отправить текст. Если запрос на отправку текста у объекта класса TextSharer был вызван без предварительной авторизации то метод объекта TextSharer должен вернуть ошибку.

Я вот не очень понимаю такой подход, да он гибче, TextSharer ничего не будет знать о ServiceConnector, но тогда если придется использовать TextSharer в других контроллерах, возникнет дублирование кода, т/к/ для выполнения шаринга необходимо быть подключенным к соцсети.

Я понимаю что тема абстрактная и в каждом конкретном случае надо поступать по обстоятельствам но все же. Скажите какой подход вам ближе и почему.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.