This is a very good observation.

We do need layer.opacity and layer.visible to be able to control the opacity and visibility of layers through ng-model.

But we don't strictly need layer.background and layer.preview. For these two we could use the ol set/get as we do it for "id". Or, as you said, we could use layer.id for "id". I have no strong opinion.

Also, I think we should use layer.bodId instead of layer.id.