Another way this could be implemented is to only store the files in $value and generate dataobjects when getItems is called.

However, whenever this happens it would require additional database hits, so I've limited it to be as query-light as possible. Each file record must be checked anyway whenever the value is changed, so I've just attempted to reduce doubling up of processing effort.