- [ ] **Starting point** - [ ] all UT are green - [ ] the program behaves as expected (intermediate approval test) - [ ] **Data Layer** - [ ] responsibility of this layer is - [ ] to represent boundaries of the movement rectangle if necessary - [ ] implement balls behavior as self-contained independent entities - [ ] save diagnostic data to a file - [ ] protect balls velocity against any influence from other balls and the environment behavior - [ ] balls implementation uses parallel programming if applicable (depends on the run time platform) - [ ] prove that the diagnostic logging doesn't have impact on the balls behavior - [ ] **Logic Layer** - [ ] responsibility of this layer is to manage movement rectangle boundaries and balls interaction (collisions) - [ ] prove that the protection of data (balls position on abstract table during collisions detection) integration is implemented - [ ] `Logic` uses only the abstract `Data` layer API - [ ] **Presentation Layer (mvvm)** - [ ] responsibility of this layer is to manage the graphical user interface (GUI) - [ ] user => GUI interoperability must be implemented using interactive programming only - [ ] GUI => the user interoperability must be implemented using reactive programming only (timer is not allowed) - [ ] interoperability of the GUI and underlying layers must be synchronized - [ ] prove that the protection of data (balls position on the screen) integration is implemented - [ ] **Testing** - [ ] Unit Test - layers are tested independently using dependency injection (additional framework is not required) - [ ] Mock may be used for testing purpose (expected but not required)
Logicuses only the abstractDatalayer API