When we build a system that needs to have a draft mode (for example an order we would like to complete later), It might be tempting to save the draft in the same model and save it in the same table/collection/whatever as a real order, with a bit/enum that shows that it's a draft.
The problem with this attitude is that it makes as create the model/table with less mandatory fields, less constraints, etc...
The solution is to refer to a draft as a totaly different kind of object, and act accordingly regarding where to save it and how to handle it.
I think I'll call it: DFRS
Draft/Final Responsibilty Segregation
(What's now? Can I make millions lecturing about it?)
What do you think?
Am I just reinventing the wheel here?
As someone who just created a mass messaging app, I wish I had separated them in the architecture. It was my first attempt at this kind of app. Definitely lessons learned.