В целом, оба подходы имеют место быть, даже Мартин Фаулер в книге "Рефакторинг" говорит, что есть ярые фанаты обоих подходов, но единения нет. По поводу сеттеров/геттеров удобно в небольших классах, а вот вдруг вы рефакторите какой-нибудь класс, большой, с большим количеством полей и все дела, то вы чекнетесь от этих геттеров/сеттеров.
Обновление
Есть такая практика, называть приватные поля начиная с подчеркивания "private String _msg;"
, так что сразу понятно в коде, где приватное поле/метод, а где нет.
Если вам надо обратиться к приватному полю извне - то надо делать геттер, если вы будете общаться с полем внутри класса - геттеры/сеттеры не нужны. Вот так =) Но если получается так, что у вас надо ко ВСЕМ приватным полям обращаться извне, то у вас ошибка в архитектуре, и скорее всего класс занимается не тем чем надо и надо делать рефакторинг и делегировать обязанности в другие классы/методы.