Somehow I manage to get in touch with the club secretary again to talk through some features of the system. This is what I got out of the conversation.
(This is going to make BDD
people cry, please let me know what I can do to make this better)
When I try to access data in the system, I should not be allowed to, unless I have logged in.
Given that a user is not logged in,
When sensitive data is accessed,
Should be shown the login screen.
When I want to contact a member, I need to be able to see a list of all members, so that I can see the ones I want.
Given that there are members in the system,
When the member list page loads,
A list is populated with all the members of the club.
When a member joins the club, they need to be added to the system, so that I can make sure they are organised.
Given the member does not already have details in the system,
When I enter their details,
They appear in the list of members for my club.
Given the member is already in the system,
When I enter their details,
I should be made aware that they already exist
And I should have the choice to duplicate the entry
When a member leaves that club, I need to be able to remove them from the system, so that I don’t end up with lots of out of date information.
Given that a member exists in the system,
When I delete their information,
They are removed from all lists of members,
And they are removed from all Teams
As I am leaving the club owner wants to find out how things are going, so we go through the list of requirements that I have gathered so far and he is quite happy with them. In fact he thinks that it sounds so good that we should make this available to other clubs to use, at a price of course. This introduces another concept, multiple clubs active in the system at the same time. We might consider setting each club up with their own system, but lets not go there until we know that it is a problem.
I think that this will do for now. There is actually quite a lot of work involved in getting to this point. Some infrastructure needs to be in place to handle some of the non-functional requirements that we have.
- The system needs to be stable.
- If there is a problem we need to be able to find out what happened.
- The system need to be responsive.
Lets jump in and start coding. I will be trying to do as much as I can in a TDD style, no sure how the database interaction part is going to go yet, I always hate writing tests that hit the database.
As the title of the first post suggested, I will be using NHIbernate for data access and other goodies that object relational mappers offer. Ninject will be used for any dependency injection needs, I am sure that there will be some somewhere. jQuery will be used for the web UI and any ajax capabilities. What about the iPhone? Well I am not sure about that yet, all I know is that I have an iPod Touch, a usb cable, a Mac Book Pro and an iPhone developer account. I am sure that I can come up with something for remote administration, even if it is just an iPhone Web Application.
I’ll be back when I have something interesting to show.