I spent few weeks thinking about the best design/development strategy for this project. Considering the scope of the project and the high number of functionality, I decided to go for an iterative and incremental approach.
As James Shore writes in this article, "start by creating the simplest design that could possibly work, incrementally add to it as the needs of the software evolve, and continuously improve the design by reflecting on its strengths and weaknesses". The idea behind this approach is very simple: I find hard to define precisely all the different cases, scenarios and rules of my application. Better to split the job in different iterations, each of them targeting a specific case or scenario. Basically, I would rather have a simple system perfectly working, than a complex system not working at all.
A few acronyms. This approach will blend with behaviour driven development (BDD), leveraging object-oriented (OOP) and, to some extent, aspect-oriented (AOP) programming. I use BDD because I find quite effective the idea of define units of software in terms of desired behavior of the unit through unit tests. BDD is naturally implemented by OOP, such as Java, a programming language I'm very familiar with. AOP will be limited to certain features, such as logging or reporting, in order to increase class modularity.
In order to facilitate the development of this project, I will adopt some basic principles:
As James Shore writes in this article, "start by creating the simplest design that could possibly work, incrementally add to it as the needs of the software evolve, and continuously improve the design by reflecting on its strengths and weaknesses". The idea behind this approach is very simple: I find hard to define precisely all the different cases, scenarios and rules of my application. Better to split the job in different iterations, each of them targeting a specific case or scenario. Basically, I would rather have a simple system perfectly working, than a complex system not working at all.
A few acronyms. This approach will blend with behaviour driven development (BDD), leveraging object-oriented (OOP) and, to some extent, aspect-oriented (AOP) programming. I use BDD because I find quite effective the idea of define units of software in terms of desired behavior of the unit through unit tests. BDD is naturally implemented by OOP, such as Java, a programming language I'm very familiar with. AOP will be limited to certain features, such as logging or reporting, in order to increase class modularity.
In order to facilitate the development of this project, I will adopt some basic principles:
- Classes must implement interfaces, and interaction between classes will only occur through their respective interfaces.
- Unit tests will use mock strategies to mock the implementation of any other interface used by the tested method. Test classes will be created along with the interface creation.
- Aspect-oriented programming will increase modularity of my classes. The idea here is to have different classes for different jobs, avoiding cross-wires as much as possible.
No comments:
Post a Comment