Progressive enhancement usually refers to web content, and the idea of having a page that is readable before it's fully functional.
I'm suddenly preoccupied with the idea that I can't progressively enhance my code. I want to be able to add methods to my values. I might have a string property. If I want to enhance it with an IsValid() method, I've no way of doing that without changing the caller.
On one hand, this seems inevitable. I used to have a string. Now I've got an object with a string "value" and some methods. It's a totally different type, and I have to call it differently.
But, the reality I'm modelling hasn't changed. I've just gotten around to adding IsValid(). Why should existing callers who just want the value (and don't care about validity) have to adapt? C# has the notion of default properties, where, you can address a collection property just by providing the containing class and the index. So you could change a List into SomeClassWithAListInside without the caller caring. Why can there be no equivalent for other types of properties? Do other languages deal with this differently?
isValid
implementation, but realistically it couldn't do anything butreturn true
always. And callers would quickly learn that the method is useless because it doesn't add information. How are you going to notify (and convince) all your callers when the method suddenly does have value?