This one has been puzzling my for some time now.
Let’s imagine a class which represents a resource, and in order to be able to use this resource one needs to first call the ‘Open’ method on it, or an InvalidOperationException will be thrown.
Should my code also check whether someone tries to open an already open resource, or close an already closed one?
Should code prevent a logically invalid invocation even when no harm would be done?
I think that programming this way would help writing better code at the other side, but I feel that I might be taking too much responsibility and affect reusability.
What do you guys think?
Edit:
I don’t think this could be called defensive programming because it won’t let a possible bad use to slip either, and another InvalidOperationException will be thrown.
This is called defensive programming. That’s a good programming practice because you ensure that your application doesn’t crash on misbehaviour.
That some method should be called first before another method is called, is not a good programming practice. It add’s a lot of complexity, which is better handled by the class itself.
This is called sequential coupling. This wikipedia article says that it depends on the context if it’s a bad practice, but it shouldn’t crash when handled improperly. Sometimes it’s necessary to throw an exception to make things clear.