I'm working on an app where the following requirements exist:
- A user submits some data in a form and this gets persisted as a "Draft Copy."
- On the other end, an approver reads it and takes some action (Approve, Reject, etc)
- If the approver approves the Draft Copy, it becomes a Contract and the two parties are legally bound. The original submitter can go back and make changes to the Draft Copy, and resubmit. When the approver approves the most recent version, the existing Contract is replaced with this new one.
What I'm struggling with is we are trying to employ DDD on our project and no solution really "feels right." We are all pretty inexperienced with modern DDD, so finding the right model is quite confusing.
This is not a Document Management problem. There is always exactly one Draft Copy which the submitter works with, and sometimes there is a Contract which neither party can edit (edits are performed by resubmitting the Draft Copy with changes). For these purposes, the fields in these two domain concepts are identical.
Is there some design pattern or DDD friendly solution that can be applied here?