Hi all Quick question (and maybe a Monday brainteaser) for you all, but first I'll explain the context.
I've just written a User (in the sense of user account / login) class (pure Ruby, no ActiveRecord). I'm doing validation in a separate object, to separate the concerns, so effectively I have a User, and a UserValidator. Originally, to sign up a user, a SignUpUser object creates a User and validates it with a UserValidator. I realised that I was passing in username and email fields, only to fetch them back out to validate. This made me wonder why I wasn't just making the SignUpUser validate the details, and not create the User if this failed (basic Lean stuff really). So I refactored it and now use the UserValidator to validate the command itself - if username or email are invalid, the server rejects it and never even instantiates a User object. Now lacking validation as a reason to store the username in the User, I started to wonder what *is* a reason. So here's the question: has anyone ever implemented any behaviour (decision, or action on another object) on a User object that requires the username? For example, the user needs to know its encrypted password in order to decide whether to accept a given password to log in. But you don't need the username for this by the time you have the User. You also don't need the User to know the username for display purposes, as you captured that when the user logged in. I'm using a technique called event sourcing[1] to persist objects, so I have the option later to put the username in the User's internal state when I retrieve an object, but currently I don't do that, and that surprised me. Ash [1] http://codebetter.com/gregyoung/2010/02/20/why-use-event-sourcing/ -- http://www.patchspace.co.uk/ http://www.linkedin.com/in/ashmoran -- You received this message because you are subscribed to the Google Groups "NWRUG" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/nwrug-members. For more options, visit https://groups.google.com/groups/opt_out.
