Checking whether my piece of shit scanner still works ;-) I drawed on paper a little class diagram. Have fun trying to read what my scanner made of it. On Thu, 2006-11-09 at 00:20 +0100, Philip Van Hoof wrote: > There was a desire to have a type that defines the role of a send queue. > > A few design questions for the group > > E-mail applications often have to support multiple send accounts. The > user typically selects per message which send account is going to be > used. > > o. My opinion is that mobile users don't care about it, and want the > software to auto detect which send account should be used > > o. Nevertheless, should the send queue register per message being send > which send account to use? > > o. Or should such a send queue play send queue for one specific send > account (so that you have more than one send queue if you have more than > one send account) (I favor this one) > > o. If option three, should there be a TnySendQueueGroup type too? One > that can classify between the available TnySendQueues which one to use > in case the user (or developer) selected "auto detect it for me". In > this case would the detecting code be implemented in the > TnySendQueueGroup type (or a TnySendQueueClassifyer if you prefer that > name). > > The API in case of option three and four is like this: > > interface TnySendQueue > { > Event on_msg_sent > void add (TnyMsg msg); > } > > > > In design pattern - correct OO code it looks like this: > > interface ObservableSubject > { > void subscribe (Observer o); > void unsubscribe (Observer o); > void notify (); > } > > interface Observer > { > void update (); > } > > interface TnySendQueue : ObservableSubject > { > void add (TnyMsg msg); > } > > > public class TnyMySendQueue : TnySendQueue > { > private List observers; > private List messages; > > public void subscribe (Observer o) > { > observers.add (o) > } > > public void unsubscribe (Observer o) > { > observers.remove (o) > } > > private void thread_start () > { > while (messages.Count > 0) > { > lock messages > msg = messages.Current > unlock messages > > send (msg) > this.notify() > > lock messages > messages.RemoveCurrent > unlock messages > } > } > > public void add (TnyMsg msg) > { > if a thread isn't runnig > start a thread > > lock messages > messages.add (msg) > unlock messages > } > > public void notify () > { > foreach observer o in observers > do > o.update () > done > } > } > > > > Opinions? Thoughts? > > -- Philip Van Hoof, software developer at x-tend home: me at pvanhoof dot be gnome: pvanhoof at gnome dot org work: vanhoof at x-tend dot be http://www.pvanhoof.be - http://www.x-tend.be
Attachment:
file.tiff
Description: TIFF image