PedroGeoGISdev wiki
  • Home
  • Linux OS
    • Linux: concepts
    • Linux: basic concepts
    • Linux: Bash
    • Linux: su and sudo
    • Linux: pipes
    • Linux: File System
    • Linux: Virtual Machines

    • Linux: distros
    • Linux Distros: Ubuntu
    • Linux Distros: Mint
    • Linux Distros: Debian
    • Linux Distros: openSuse
    • Linux Distros: Manjaro
    • Linux Distros: Red Hat Enterprise

    • Linux: laboratories
    • Linux Lab#LI01-1: Choose Linux
    • Linux Lab#LI01-2: Install at least three distributions
    • Linux Lab#LI01-3: Adjust user permissions
    • Linux Lab#LI02-1: Export env user with grep and pipe
    • Linux Lab#LI03-1: Manage users and groups
    • Linux Lab#LI03-2: Manage files
    • Linux Lab#LI03-3: Manage software
    • Linux Lab#LI03-4: Manage hardware
    • Linux Lab#LI04-1: Bash scripting, qtool
    • Linux Lab#LI04-2: Bash scripts as terminal tool
    • Linux Lab#LI04-3: Distribute the terminal app

    • Linux readings
    • Linux Resources
  • DevOps
    • What is DevOps
    • DevOps: Introduction
    • DevOps: Agile and Microservices
    • Infrastructure as code (IaC)
    • Immutable Infrastructure
    • Software Lifecycle

    • Documentation
    • How to document: Quarto and Obsidian

    • Network protocols
    • Network: Basics
    • Network: Client-server
    • Network Protocols
    • Network: DNS
    • Network: API Rest
    • Network: gRPC
    • Network: Websocket
    • Network: SMTP
    • Network: Ping
    • Network: UDP
    • Network: webhook
    • Network: SOAP
    • Network: graphQL

    • Version Control
    • Git
    • GitHub
    • Idea and GitHub 2023
    • Git and GitHub 2023 CLI

    • IDEs
    • IDE: Visual Code
    • IDE: IntellJIdea

    • DevOps tools
    • Amazon Web Services AWS
    • Docker
    • Jenkins pipelines
    • Kubernetes k8s
    • Digital Ocean
    • Nagios
    • Ansible

    • DevOps Laboratories
    • Lab 1: chat App
    • Lab 2: Spring Boot AWS AEB manually
    • Lab 3: Spring Boot and AWS S3 publisher
    • Lab 4: Spring Boot Docker/Jenkins
    • Lab 5: k8s on Digital Ocean
    • Lab 6: Spring Boot AWS codecommit

    • DevOps readings
    • DevOps Resources
  • MarkUp
    • MarkUp Languages
    • Introduction Markup
    • HTML Markup
    • Markdown Markup
    • Markdown and HTML working together, good idea?

    • Quarto Markdown
    • Quarto Markdown: basics
    • Quarto Markdown: creating
    • Quarto Markdown: publishing
    • Quarto Markdown: code & data
    • Quarto Markdown: api rest call
    • Quarto Markdown: OJS Cells
    • Quarto Markdown: cheat-sheet

    • Styling: CSS
    • Cascade Style Sheet
    • Cascade Style Sheet: Box Model and Containers
    • CSS: W3.css

    • MarkUp Languages Laboratories
    • Lab#MD01-1: Create and publish by Quarto

    • MarkUp Languages readings
    • MarkUp Languages Resources
  • Java SE
    • What is Java SE
    • Java Standard Edition: Basics
    • Java Standard Edition: Principles
    • Java MOOC Helsinki
    • Java MOOC Helsinki Syllabus

    • Java Create Project
    • Java SE: Maven
    • Java SE: Create Maven Project
    • Java SE: Project push GitHub
    • Java SE: JUnit and TDD

    • Java Concepts
    • Java SE: Class and Objects
    • Java SE: Scope
    • Java SE: static modifier
    • Java SE: Coupling and DDD
    • Java SE: Packages
    • Java SE: Abstract/Interface
    • Java SE: Java 8

    • Java Principles
    • Java SE: Encapsulation
    • Java SE: Abstraction
    • Java SE: Inherence
    • Java SE: Polymorphism

    • Java Design Patterns
    • Java Patterns: UML
    • Java Patterns: Types
    • Singleton
    • Factory
    • Abstract Factory
    • Builder
    • Facade
    • Bridge
    • Decorator
    • Composite
    • Observer
    • Strategy
    • State
    • Commander

    • Java SE Laboratories
    • Lab#SE00-1: Maven Person
    • Lab#SE00-2: Maven Clinic
    • Lab#SE00-3: Library Model
    • Lab#SE00-4: Abstract/Interface Human
    • Lab#SE01-1: Maven/Gradle Person and Account
    • Lab#SE01-2: Maven/Gradle Person and Account stored in JSON
    • Lab#SE02-1: Movie/Review, Model
    • Lab#SE02-2: Movie/Review, CRUD Operations
    • Lab#SE02-3: Movie/Review, factory
    • Lab#SE02-4: Movie/Review, interactivity and coupling
    • Lab#SE02-5: Movie/Review, simulate interactivity by console
    • Lab#SE03-1: Library/Book, Core-Model
    • Lab#SE03-2: Library/Book, Sprint Zero
    • Lab#SE03-3: Library/Book, Expand Model
    • Lab#SE04-1: healthyFood Restaurant, Core Model

    • Java SE readings
    • Java SE Resources
  • Python
    • Python Basics
    • Python: Basic Concepts
    • Python: Tips
  • JavaScript
    • JavaScript Basics
    • JavaScript: Basic Concepts
    • JavaScript: Tips
  • Spring
    • Spring Legacy
    • Spring Framework
    • Spring MVC
    • Springs Servlets

    • Spring Boot Basics
    • Spring Boot: fundamentals
    • Spring Boot: create a Project
    • Spring Boot: H2 DB and Thymeleaf
    • Spring Boot: cycle

    • Spring Boot Concepts
    • Spring Boot: Dependency Injection
    • Spring Boot: Annotations
    • Spring Boot: Controller
    • Spring Boot: View
    • Spring Boot: Thymeleaf
    • Spring Boot: Vaadin Flow
    • Spring Boot: Vaadin Hilla
    • Spring Boot: Model
    • Spring Boot: Rest
    • Spring Boot: Data & DB
    • Spring Boot: JPA & DI
    • Spring Boot: JPA Mappings
    • Spring Boot: JPA Relationships
    • Spring Boot: JPA Queries
    • Spring Boot: JPA Inherence
    • Spring Boot: Scaling

    • Spring Boot Laboratories
    • Lab#SB00-1: Library UML
    • Lab#SB00-2: CRUD User
    • Lab#SB00-3: LibraryManagement
    • Lab#SB00-4: API Rest
    • Lab#SB00-5: Rest & JPA-H2
    • Lab#SB00-6: Rest & MongoDB
    • Lab#SB00-7: Styling
    • Lab#SB01-1: DataBase
    • Lab#SB02-1: JPA Relationships
    • Lab#SB03-1: APIs & cloud
    • Lab#SB04-1: JPA Inherence
    • Lab#SB05-1: API Rest
    • Lab#SB06-1: employeeCourse
    • Lab#SB07-1: monitor Book
    • Lab#SB08-1: Restaurant UML
    • Lab#SB08-2: Vaadin
    • Lab#SB08-3: H2 and API Rest
    • Lab#SB08-4: JPA
    • Lab#SB08-5: Test API Rest
    • Lab#SB09-1: SpringIO Conference

    • Spring Boot readings
    • Spring Boot Resources
  • ReactJS
    • ReactJS: Principles
    • React JS: Introduction
    • React JS: render virtual DOM
    • React JS: Create a React project
    • React JS: Components
    • React JS: JSX
    • React JS: props and state

    • JavaScript: web scripting
    • JavaScript: basics
    • JavaScript: functions
    • JavaScript: objects
    • JavaScript: variables
    • JavaScript: flux control

    • ES6: ECMAScript 6
    • React JS ES6: arrow functions
    • React JS ES6: import modules
    • React JS ES6: array, data and key
    • React JS ES6: destructuring
    • React JS ES6: spread operator

    • ReacJS 18: Hooks
    • React JS: Rules of Hooks
    • ReactJS: useState
    • React JS: useReducer
    • React JS: useRef
    • React JS: useEffect
    • React JS: useContext
    • ReactJS: useMemo
    • ReactJS: custom hooks

    • ReactJS: Designing an App
    • React JS App: async
    • React JS App: events
    • React JS App: router
    • React JS App: conditional render
    • React JS App: styling

    • React JS: Laboratories
    • Lab#RE01-1: API Rest Axios
    • Lab#RE02-1: Router & Hooks
    • Lab#RE03-1: to-do app
    • Lab#RE03-2: HighCharts
    • Lab#RE03-3: API Rest Mono
    • Lab#RE03-4: API Rest Domains
    • Lab#RE03-5: data management
    • Lab#RE04-1: todo & server
    • Lab#RE04-2: Spring Boot & ReactJS
    • Lab#RE05-1: chat & websockets
    • Lab#RE05-2: chat: backend
    • Lab#RE05-3: chat & AWS
    • Lab#RE05-4: chat: test ws AWS
    • Lab#RE05-5: chat & front
    • Lab#RE05-6: chat & ws: front
    • Lab#RE06-1: healthyFood Restaurant
    • Lab#RE06-1-PR: create a pull request
    • Lab#RE07-1: traffic lights simulation

    • React JS readings
    • ReactJS Resources
  • Learning
    • Vocabulary
    • General Vocabulary
    • SCRUM Vocabulary
    • DevOps Vocabulary
    • Java SE Vocabulay
    • Spring Boot Vocabulary
    • DataBase Vocabulary
    • ReactJS Vocabulary
    • Web Vocabulary

    • Learning
    • Useful Questions
    • Learning: tips
    • Writing
    • Taking Notes
    • Comments
    • Document
    • Auto-Evaluate

    • Books & Articles
    • Books
    • Articles

    • What is SCRUM
    • SCRUM Agile Methodology
    • Agile Manifesto & Values
    • SCRUM Guide

    • Scrum Steps
    • Meetings, Impediments and Iterations
    • User stories, Tasks and Habits
    • Delivering Value & Communication
    • ScrumMaster, how it works
    • Mindset, the key to everything
    • Product Owner, how it works
    • Managing Time & Mind
    • Team & the Specialist
    • Albertus’ Dilemma
    • Before SCRUM
    • Team Dynamics
    • Emotions and Thoughts
    • Decision Making and Intuition
    • Beyond SCRUM
    • Balances, atmosphere and tools

    • Resources
    • SCRUM Resources
  • QGIS
    • QGIS basics
    • QGIS: basic concepts

    • QGIS laboratories
    • QGIS Laboratory 1: Introduction to Open Source GIS
  • ArcGIS Pro
    • ArcGIS Pro basics
    • ArcGIS Pro: basic concepts

    • ArcGIS Pro laboratories
    • ArcGIS Pro Laboratory 1: Getting Started
  • Bookmarks
    • Online Resources
    • Online Resources
  • About
    • About me and this site
    • About me
    • About this site
    • About images credit
  • Email
  • GitHub
  • LinkedIn
  1. Java SE Laboratories
  2. Lab#SE03-2: Library/Book, Sprint Zero
  • Java Standard Edition

  • What is Java SE
    • Java Standard Edition: Basics
    • Java Standard Edition: Principles
    • Java MOOC Helsinki
    • Java MOOC Helsinki Syllabus

  • Java Create Project
    • Java SE: Maven
    • Java SE: Create Maven Project
    • Java SE: Project push GitHub
    • Java SE: JUnit and TDD

  • Java Concepts
    • Java SE: Class and Objects
    • Java SE: Scope
    • Java SE: static modifier
    • Java SE: Coupling and DDD
    • Java SE: Packages
    • Java SE: Abstract/Interface
    • Java SE: Java 8

  • Java Principles
    • Java SE: Encapsulation
    • Java SE: Abstraction
    • Java SE: Inherence
    • Java SE: Polymorphism

  • Java Design Patterns
    • Java Patterns: UML
    • Java Patterns: Types
    • Creational
    • Singleton
    • Factory
    • Abstract Factory
    • Builder
    • Structural
    • Facade
    • Bridge
    • Decorator
    • Composite
    • Behavioral
    • Observer
    • Strategy
    • State
    • Commander

  • Java SE Laboratories
    • Lab#SE00-1: Maven Person
    • Lab#SE00-2: Maven Clinic
    • Lab#SE00-3: Library Model
    • Lab#SE00-4: Abstract/Interface Human

    • Lab#SE01-1: Maven/Gradle Person and Account
    • Lab#SE01-2: Maven/Gradle Person and Account stored in JSON

    • Lab#SE02-1: Movie/Review, Model
    • Lab#SE02-2: Movie/Review, CRUD Operations
    • Lab#SE02-3: Movie/Review, factory
    • Lab#SE02-4: Movie/Review, interactivity and coupling
    • Lab#SE02-5: Movie/Review, simulate interactivity by console

    • Lab#SE03-1: Library/Book, Core-Model
    • Lab#SE03-2: Library/Book, Sprint Zero
    • Lab#SE03-3: Library/Book, Expand Model

    • Lab#SE04-1: healthyFood Restaurant, Core Model

  • Java SE readings
    • Java SE Resources

On this page

  • 1 Sprint Zero hats&jobs
    • 1.1 Architecture and first draft
      • 1.1.1 Tasks/Requirements list
      • 1.1.2 Onion Architecture
    • 1.2 Features: core use-case: user-borrows-a-book
      • 1.2.1 Use-Story
      • 1.2.2 Mock-up
      • 1.2.3 Menus
    • 1.3 Pieces of code
      • 1.3.1 UUID
      • 1.3.2 BorrowManager class
      • 1.3.3 faker Users and Books
    • 1.4 Tests
      • 1.4.1 borrow object test
      • 1.4.2 make-a-borrow test
    • 1.5 UML
    • 1.6 Domains & Tree
  • Edit this page
  • Report an issue
  1. Java SE Laboratories
  2. Lab#SE03-2: Library/Book, Sprint Zero

Lab#SE03-2: Library/Book, Sprint Zero

Java SE Lab 03 part 2

javase
lab
composition
plan
Java SE Lab 03, part 2 Sprint Zero, plan
Authors

albertprofe

Marc P.

Published

Tuesday, June 1, 2021

Modified

Sunday, August 10, 2025

📘 Linux Lab#SE03-2: Library/Book Sprint Zero

Before define what a Sprint Zero really is, let’s see what it isn’t.

  • A Sprint Zero is not the phase in which:

    • the team is put together: a team must already be in place.
    • for setting up infrastructure which should already be implemented or easily implemented on demand.
    • should not involve adding products to a backlog or consider planning as classical project management.

The main goal of a Sprint Zero is to deliver some usable value that can be built upon by the next team. Sprint Zeros are required to:

  • Create the project’s skeleton, including research spikes.
  • Keep design minimal.
  • Develop a small number of stories to completion.
  • Be low velocity and lightweight.

More specifically, the deliverables of a Sprint Zero should be as follows:

  • A usable piece of code, however small.
  • A minimal environment for writing code.
  • A prioritization of features or a list of stories.
  • A release plan assigning each story to a Sprint.
  • A plan for the most likely implementation of features.

1 Sprint Zero hats&jobs

1.1 Architecture and first draft

1.1.1 Tasks/Requirements list

Let’s take the example of the Library Lab#SE03-1 to define a graph with the requirements/tasks for the Sprint Zero deriverables:

sprintZero Sprint Zero Sprint Zero Sprint Zero 1 - Project 1 - Project Sprint Zero--1 - Project 2 - DDD 2 - DDD Sprint Zero--2 - DDD 3 - UML 3 - UML Sprint Zero--3 - UML 4 - Code 4 - Code Sprint Zero--4 - Code Use Case Use Case 1 - Project--Use Case Documentation Documentation 1 - Project--Documentation Mock-up Mock-up 1 - Project--Mock-up Open\nProject? Open Project? 1 - Project--Open\nProject? Vocabulary Vocabulary 2 - DDD--Vocabulary Packages Packages 2 - DDD--Packages Model Model 2 - DDD--Model Controller Controller 2 - DDD--Controller Refactor\nDomain Refactor Domain 2 - DDD--Refactor\nDomain Relationships Relationships 3 - UML--Relationships Utilities Utilities 4 - Code--Utilities Core model Core model 4 - Code--Core model Managers Managers 4 - Code--Managers Dependencies Dependencies 4 - Code--Dependencies Maven Maven 4 - Code--Maven Refactor\nCode Refactor Code 4 - Code--Refactor\nCode Test Test 4 - Code--Test Git Git 4 - Code--Git User Stories User Stories Use Case--User Stories Quarto Quarto Documentation--Quarto Obsidian Obsidian Documentation--Obsidian New Feature New Feature Mock-up--New Feature Common\nLanguage Common Language Vocabulary--Common\nLanguage Controller--Managers If there is\nLegacy Code If there is Legacy Code Refactor\nDomain--If there is\nLegacy Code Refactor\nDomain--Refactor\nCode Composition Composition Relationships--Composition Inheritance Inheritance Relationships--Inheritance Multiplicity Multiplicity Relationships--Multiplicity Book Book Core model--Book Borrow Borrow Core model--Borrow User User Core model--User lombok lombok Dependencies--lombok JUnit JUnit Dependencies--JUnit Jupiter Jupiter Dependencies--Jupiter faker faker Dependencies--faker Make Borrow Make Borrow Test--Make Borrow GitHub GitHub Git--GitHub Create Create faker--Create 100 books 100 books Create--100 books 100 users 100 users Create--100 users

1.1.2 Onion Architecture

Onion Architecture

Onion Architecture

The layers are of Onion Architecture and sublayers are:

  • Infrastructure, where our database, file system, or any external web service we depend on live.
  • Tests: unit, integration, end-to-end. How we validate our business cases.
  • User Interface, how our users interact with the code we have built. - Application Services layer (sometimes known as the Transport/Access Layer).
  • Domain Services layer. In this layer is where the majority of our business logic lives, it carries out the operations to turn A into B, input into output, egg into chicken.
  • The core layer, the Domain Model layer which is the representation of the high level data objects we use.

Library Project key-words sprint zero

Library Project key-words sprint zero

1.2 Features: core use-case: user-borrows-a-book

1.2.1 Use-Story

  • User story template and examples

As a user, I want to borrow a book with my documentId, so that I may read and return it at due date that the system says.

1.2.2 Mock-up

Options:
1- Make a Borrow
2- User Management
3- Book Management
4- Quit
Option?
'Borrow'
User?
'159742OPI'
Book?
'Anna Karenina'
Proceed, are your sure?
'Yes'
Borrow made, borrowId: RER7567, dueDate: 15/02/2023 
Options:
1- Make a Borrow
2- User Management
3- Book Management
4- Quit
Option?
'Quit'

1.2.3 Menus


Main Menu
1- Make a Borrow
2- User Management
3- Book Management
4- Borrow Management
4- Quit

User Menu
1- Create
2- Update
3- Delete
4- List
5- Get one
6- Quit

Book Menu
1- Create
2- Update
3- Delete
4- List
5- Get one
6- Quit

Borrow Menu
1- Create (make a borrow)
2- Update
3- Delete
4- List
5- List Active Borrows 
6- Get one
7- Quit

1.3 Pieces of code

1.3.1 UUID

The full form of UUID is Universally Unique Identifier. A UUID represents a 128-bit value that is unique. The standard representation of UUID uses hex digits.

For example:

3c0969ac-c6e3-40f2-9fc8-2a59b8987918
cb7125cc-d78a-4442-b21b-96ce9227ef51
  • Class UUID
import java.util.UUID;

    public static String createId() {Limit Your Availability

        UUID uuid = UUID.randomUUID();
        System.out.println("UUID generated - " + uuid);
        System.out.println("UUID Version - " + uuid.version());
        String id = uuid.toString();

        return id;

    }

1.3.2 BorrowManager class

public class BorrowManager {

   public static HashMap< String , Borrow> borrows = new HashMap<>();
}

1.3.3 faker Users and Books

public static void createBooks(int number) {
// create faker object to use as
// builder for book
Faker faker = new Faker();
Book newbook;

for (int i = 0; i < number; i++) {
    // create newbook without args
    newbook = new Book();
    // some people get nervous with this
    // be careful ...
    String bookId = InterfaceUtils.createUUID();
    newbook.setISBN(bookId);
    // title's book
    String bookTitle = faker.book().title();
    newbook.setTitle(bookTitle);
    // year's book
    int bookYear = faker.number().numberBetween(1000, 2023);
    newbook.setYear(bookYear);
    // borrows' book
    List<Borrow> borrows = new ArrayList();
    newbook.setBorrows(borrows);
    // author's book
    Author newauthor = new Author();
    newbook.setAuthor(newauthor);
    // add to hashmap
    books.put( bookId, newbook);
    // kill object
    newbook = null;
    }
}

1.4 Tests

1.4.1 borrow object test

Test to create Borrow object

1.4.2 make-a-borrow test

Test to make-a-borrow operation by simulate-console

Important

We decide to discuss this test in the near future, not now. It is more diffucult and complex than we thought.

1.5 UML

LAB#03-1 UML

1.6 Domains & Tree

Folder tree LibraryProject

Folder tree LibraryProject
Back to top
Lab#SE03-1: Library/Book, Core-Model
Lab#SE03-3: Library/Book, Expand Model

This website is built with Quarto.

Difficulties are just things to overcome, after all. Ernest Shackleton

  • Edit this page
  • Report an issue