B имеет гораздо большие накладные расходы на внедрение новых атрибутов. Введение нового атрибута в стабильную ветвь программного обеспечения сопряжено со многими рисками, поскольку необходимо существенно изменить интерфейс.
Основываясь на своем личном опыте, в общем, я бы ручался за А.
Многое также зависит от того, насколько тесно интегрировано программное обеспечение. Заимствуя терминологию Буча, опция A способствует слабой связи , в то время как B способствует сильной связи между компонентами программного обеспечения.
Если вы хотите иметь возможность заморозить интерфейс, сделать его стабильным в течение длительного периода времени, запретить любые изменения, тогда B позволит вам сделать это: добавление нового атрибута хорошо видно. Если вы хотите иметь возможность добавлять новые атрибуты в любое время, когда вы ожидаете, что их будет множество, тогда вариант А является очевидным излюбленным.
Вы могли бы также рассмотреть здоровую комбинацию двух. Для важных атрибутов иметь выделенную функцию get / set. Для остальных менее важных опций используется общая функция get / set. Если атрибут становится важным, для него можно ввести выделенный get / set.
N.B. Очевидно, что не следует забывать о производительности: опция B выиграет A в любом микробенчмарке.