- Syllabus, teaching methodology and bibliography.
- Considerations on the subjective nature of software design
- Dependency Injection (DI): Motivation and consequences
- Through construction parameters
- Done explicitely by a wiring up procedure that constructs the solution's object graph
- Materialization on the HVAC controller application, developed during the classes
- Complementary references, for the inquisitive minds
- Software quality
- Software design principles, some advocates
- Mark Seeman (Ploeh Blog)
- Robert Martin (a.k.a Uncle Bob) (The Clean Code Blog)
- And an interesting debate between them on Twitter
- Live coding session (in Kotlin) to design, discuss and implement the HVAC Controller application
- DI containers: Spring
- Motivation
- Using Spring through Spring Boot
- Spring Initializr
- Refactoring the HVAC controller application to use Spring Boot
- The Spring Web MVC framework
- Motivation and architecture overview
- Goal: Creating a Web API for the HVAC controller application
- Web APIs (or HTTP APIs): Concept and Motivation
- The Architecture of the World Wide Web
- The HTTP protocol
- Request-response message exchange semantics and pattern
- Request methods semantics and properties
- Response status code semantics
- "HTTP Method selection"
- Documentation:
- Goal: Maturing the HVAC Web API up to RMM (Richardson Maturity Model) Level 2
- Live coding session
- The Spring MVC framework, revisited:
- Error representation with Problem-Json
- Considerations regarding the structure of Spring MVC based applications
- Small demo to ilustrate the recommended structure
- Documentation:
- Goal: Project Phase 1
- Goal: Maturing the HVAC Web API up to RMM Level 3
- REST constraints
- Introduction to representation formats, evolvability, and hypermedia
- Documentation:
- For reference:
- Goal: Project Phase 1
- Goal: Maturing the HVAC Web API up to RMM Level 3
- Representation formats, evolvability, and hypermedia (continued)
- Navigability in a web API
- Concept and motivation, revisited
- Json Home
- Navigability in a web API
- Leveraging HTTP as an application level protocol, continued
- HTTP Caching
- Headers
Cache-Control
,ETag
,Vary
- Conditional Requests
- Headers
- HTTP Authentication
- HTTP Caching
- Spring MVC architecture, revisited
- MVC Config API
- Interceptors: Concept and motivation
- Message Converters: Concept and motivation
- Documentation:
- Examples of Hypermedia Web APIs:
- Goal: Project Phase 1
Easter break
- Goal: Project Phase 1
- Web based User Interfaces
- Server Side and Client Side rendering
- Motivations and tradeoffs
- The React framework: Introduction
- Motivation and programming model
- Bootstrapping a React based frontend
- Core React concepts:
- For reference:
- Goal: Project Phase 1
- The React framework, revisited
- Motivation and programming model
- Core React concepts, revisited:
- Components and state:
- For reference:
- Goal: Implementing the HVAC Web UI
- The React framework, continued
- Components and state, revisited:
- Considerations on the design of React based UIs
- Goal: Implementing the HVAC Web UI, continued
- The React framework, continued
- React's execution model
- For stateless components
- For class based statefull components
- Rendering, revisited
- React's execution model
- Further considerations on the design of React based UIs
- Error handling
- For reference:
- Goal: Project Phase 2
- Goal: Implementing the HVAC Web UI, continued
- Considerations on the design of React based UIs
- Error Handling
- UI State in React:
- Component: props and state (revisited)
- Context API
- Goal: Project Phase 2
- Goal: Implementing the HVAC Web UI, continued
- Declarative routing in React
- Considerations on the creation of hypermedia driven clients
- Motivation and trade-offs
- Hypermedia used to express (and obtain):
- Navigation information
- Application capabilities
- Goal: Project Phase 2
- Goal: Implementing the HVAC Web UI, continued
- Considerations on the design of React based UIs
- Favoring composition
- Be mindfull of where your state is
- React's execution model, revisited
- For class based components (statefull)
- For function based components (formerly, named stateless)
- Considerations on the shortcomings of APIs based on inheritance and overriding of lifecycle callbacks
- React's execution model, revisited
- React Hooks
- Concept and motivation
- Execution model for function based components (both stateless and statefull)
- For reference:
- Goal: Project Phase 2
- Goal: Considerations on the deployment of the solution
- CORS support on the Web API: when to enable it?
- Disabling CORS support
- Consequences in the development environment
- Adding proxy behaviour to webpack's dev server
- Configuration of a React App created with create-react-app using craco
- For reference:
- Goal: Finishing up Project Phase 2 and preparing for Project Phase 3
No classes during this week
- Goal: Considerations on the deployment of the solution, continued
- Adding access control to the Web API:
- Defining the access control policy
- Authentication
- OAuth 2.0 and OpenID Connect (overview)
- Documentation:
- Lectures by Pedro Félix:
- For reference:
- Goal: Project Phase 3