How to control construction and limit mutability