In general I think the use of property setters on classes is a sign of bad class design and a lack of OO principles - in most cases when you modify the 'state' of a class some 'behaviour' is invoked whether it be implicit or explicit; e.g. when I change the address on a user account I want to make sure the address object has been populated (at least). So these days I've started to design classes that have public getters & private setters, and if you want to modify state you are required to call a method, e.g. 'ChangeAddress'. This is nothing new, there are plenty of examples out there. So in the example below 'Token' is property that's defined when the object is constructed and 'Path' is a property which is modified by calling the method 'ChangePath'. public class File : ObservableEntity<int> { private string _path; private Guid _token; private readonly IExtractFileProperties _propertiesEx...