Когда вы вызываете метод из библиотеки, вы ожидаете, что он делает именно то, что подразумевает его имя, он будет делать.
Connection c = driver.getConnection();
- для возврата соединения
- для сообщения об ошибке в случае сбоя
- не для выполнения больше, чем ожидалось
Когда пишет «библиотечный код», очень легко придерживаться принципов развязки, сплоченности, абстракции.Несоблюдение этих правил в большинстве случаев означает ошибку в дизайне.
Но когда вы занимаетесь бизнес-логикой, возникают некоторые трудности и, возможно, необходимо изменить перспективу.На уровне бизнес-логики я говорю:
session.connect(); //session is of Session type, my "business logic class"
и ожидаю, что он читает файл конфигурации, принимает значения по умолчанию, если не находит его, подключается, делает некоторую проверку, решает, какое предупреждение необходимо уведомитьдля пользователя, например, тот факт, что версия базы данных старше, чем программное обеспечение клиента.
Если вы скажете, что метод не должен делать всего этого, потому что он должен быть связным, и строго применять его, вы получите метод connect с одной строкой:
public class Session {
...
Connection c;
public void connect() {
c = driver.getConnection();
}
}
то есть метод connect
бизнес-класса Session свернется с базовыми классами.
А остальные задачи?Прочитать файл, проверить версию БД и т. Д.
Вы откладываете код дела на «большой метод», который будет выполнять всю логику.
И это именно моя точка зрения.
Если вы примените принципы сплоченности и развязки в контексте бизнес-логики, вам не удастся разделить задачи на более мелкие подзадачи, и у вас будут несколько больших «монолитных» методов, выполняющих всю работу.и быть плохо читаемым.
Я считаю, что хорошие принципы (связность, абстракция) для библиотек низкого уровня (Driver.getConnection ()) не подходят для логики работы.
Мои идеи таковы:
- Сплоченность должна быть заменена совершенно новой концепцией
- Сплоченность должна быть "растянута""до определенного момента
И поскольку я предпочитаю второе, мой вопрос в том, что это за точка.