Hey Alice!
I was looking at your Manage Members code yesterday and I had a nagging thought
that something was wrong. Worse, I had the same thing that was wrong with
manage members was an issue with my invitations code.
This afternoon I realised what was wrong! Both of us have danced around the
*command* *pattern*: an object oriented design pattern for creating commands
that can be done and undone. I feel like a right idiot: *undo* requires the use
of the command pattern, and I have had a bit of experience with undo.
So, in short, every module on GroupServer needs to be restructured ☺ I have
created a rather sweeping ticket for implementing the command pattern
<https://projects.iopen.net/groupserver/ticket/450>. However, we can implement
the command pattern bit by bit, much the same way that we rolled out audit
trails across GroupServer. I have added a comment to some existing tickets
reminding me to use the command pattern when I rewrite each module.
Ohhh. Yes. That would indeed account for the lingering ickiness I've
been feeling around that code.