greater modularization, better dependency organization and update attributes on save