SlideShare a Scribd company logo
1 of 77
@_sara_p_
Sara Pellegrini
The aggregate
The aggregate
An aggregate is a cluster of associated objects
that we treat as a unit for the purpose of data changes.
From blue book - Domain-Driven Design: Tackling Complexity in the Heart of Software - Eric Evans
The aggregate is ... confusing
From theory to practice
Cluster the ENTITIES and VALUE OBJECTS into AGGREGATES and define
boundaries around each.
Choose one ENTITY to be the root of each AGGREGATE, and control all access to
the objects inside the boundary through the root. Allow external objects to hold
reference to the root only.
From blue book - Domain-Driven Design: Tackling Complexity in the Heart of Software - Eric Evans
Event Storming
Education domain
1) A course cannot accept more than N students
2) N, the Course Capacity, can change any time
to any positive integer different from the current one
(even if the number of currently subscribed students is larger than the new value)
Course
Created
Event
Student
Subscribed
to Course
Event
Student
Unsubscribed
from Course
Event
Course
Capacity
Changed
Event
Create
Course
Command
Subscribe
Student to
Course
Command
Unsubscribe
Student to
Course
Command
Update
Course
Capacity
Command
time
Story Telling
Storytelling is at the heart of human communication.
Storytelling does not require any special competence/skill.
It helps break down the barriers between technicians and business experts.
The aggregate is the boundary of consistency
When a change to any object with the aggregate boundary is committed, all
invariants of the whole aggregate must be satisfied.
From blue book
Course
Created
Event
Student
Subscribed
to Course
Event
Student
Unsubscribed
from Course
Event
Course
Capacity
Changed
Event
Create
Course
Command
Subscribe
Student to
Course
Command
Unsubscribe
Student to
Course
Command
Update
Course
Capacity
Command
Course
Course
Course Course
1) A course cannot accept more than N students
2) N, the Course Capacity, can change any time to any
positive integer different from the current one
Aggregate does not fit
with Story Telling
Aggregate does not fit with Story Telling
It is not naturally part of the story: the story teller is forced to add this element
Should business experts understand what a consistency boundary is?
Leads back to the old modelling-first/data centric approach.
Moves the focus from the behavior to the model.
Aggregate Mixes technical and
business aspects
The nouns become our aggregates
Course
Created
Event
Student
Subscribed
to Course
Event
Student
Unsubscribed
from Course
Event
Course
Capacity
Changed
Event
Create
Course
Command
Subscribe
Student to
Course
Command
Unsubscribe
Student to
Course
Command
Update
Course
Capacity
Command
Course
Course
Course Course
The course
Course
Create Course Command
Subscribe Student to Course
Command
Unsubscribe Student to Course
Command
Update Course Capacity
Command
Course Created
Event
Student Subscribed to Course
Event
Student Unsubscribed from
Course Event
Course Capacity Changed
Event
The COURSE
aggregate
<<Aggregate Root>>
Course Subscription
*
The COURSE
aggregate
<<Aggregate Root>>
Course Subscription
*
Subscribe Student to Course
Command
Unsubscribe Student to Course
Command
The COURSE
aggregate
<<Aggregate Root>>
Course Subscription
*
Subscribe Student to Course
Command
Unsubscribe Student to Course
Command
Update Course Capacity
Command
Event sourced COURSE aggregate
Course Created Event
Student Subscribed to Course
Event
Student Unsubscribed from
Course Event
Course Capacity Changed
Event
Subscribe Student to Course
Command
Unsubscribe Student to Course
Command
Update Course
Capacity Command
Event Storming of this problem:
Education domain
1) A course cannot accept more than N students
2) N, the Course Capacity, can change any time
to any positive integer different from the current one
(even if the number of currently subscribed students is larger than the new value)
3) The course title can change any time
to any title different from the current one
Course
Renamed
Event
Rename
Course
Command
Course
The larger the Aggregate
the greater the contention
The boundary of consistency
is also the boundary of concurrency
Concurrent command execution
Update Course
Capacity Command
Rename Course
Command
<<Aggregate Root>>
Course Subscription
*
<<Aggregate Root>>
Course Subscription
*
Alternative solution
<<Aggregate Root>>
Course Subscription
*
<<Aggregate Root>>
Course
Subscriptions
Subscription
*
Alternative solution: CourseInfo & CourseSubscription
<<Aggregate Root>>
Course
Info
Course
More contention
Simpler
CourseInfo & CourseSubscriptions
Less contention
Additional complexity
➔ Creation of multiple aggregates
➔ Synchronization
We did a modelling mistake…
Now what???
State Persisted Aggregates
- Script
Event Sourced Aggregates
- ???
Refactoring with Event Sourcing
Course
Created
….
Course
Renamed
Course
Capacity
Changed
….
Course
Capacity
Changed
…. ….
Course
Subscriptions
Created
….
Course
Renamed
Course
Capacity
Changed
….
Course
Capacity
Changed
…. ….
Course
Info
Created
Event Sourced Aggregates
Are Hard to Refactor
Event Storming of this problem:
Education domain
1) A course cannot accept more than N students
2) N, the Course Capacity, can change any time
to any positive integer different from the current one
(even if the number of currently subscribed students is larger than the new value)
3) The course title can change any time
to any title different from the current one
4) The student cannot join more than 10 courses
Create
Student
Command
Subscribe
Student to
Course
Command
Student
Created
Event
Student
Subscribed
to Course
Event
Unsubscribe
Student from
Course
Command
Student
Unsubscribed
from Course
Event
time
Course
Created
Event
Student
Subscribed
to Course
Event
Student
Unsubscribed
from Course
Event
Course
Capacity
Changed
Event
Create
Course
Command
Subscribe
Student to
Course
Command
Unsubscribe
Student to
Course
Command
Update
Course
Capacity
Command
Course
Course
Course Course
Create
Student
Command
Subscribe
Student to
Course
Command
Student
Created
Event
Student
Subscribed
to Course
Event
Unsubscribe
Student from
Course
Command
Student
Unsubscribed
from Course
Event
Student Student Student
4) The student cannot join more than 10 courses
Create Student
Command
Subscribe Student to
Course Command
Student Created
Event
Student Subscribed
Course Event
Student
Unsubscribe Student from
Course Command
Student Unsubscribed
from Course Event
The STUDENT aggregate
<<Aggregate Root>>
Student Subscription
*
Saga
We need some form of synchronization...
Subscribe Student to
Course Command
Subscribe Student to
Course Command
Subscribe Student to
Course Command
Student Subscribed
Course Event
Student Subscribed
Course Event
Student
Course
revert
Unsubscribe Student
to Course Command
Student Unsubscribed
Course Event
Student
1
1
2
3
Transactions that span
Multiple Aggregates
Could Cause
Unnecessary Complexity
It's just a long transaction...
Long transaction are very common when the business rule spans bounded contexts.
But when the rule spans multiple aggregates in the same bounded context?
Is this a necessary complexity or it can be avoided?
● Does not fit the story telling
● Puts focus on model instead of behaviour
● Mixed technical and business aspects
● Can cause unnecessary contention
● Can cause unnecessary complexity
● Hard to refactor
Is there a better way to implement the command model?
Lets restart from… story telling
Decision Decision Decision
Decision Decision
Focus on the decision
Decision block = Message handler
The message handler knows what it needs to make a decision
Event sourcing
Event sourcing provides a huge advantage because it decouples
the persistence from the model needed for taking the decision
The message handler can build on the fly any model needed for
taking the decision starting from the correct event stream
Event sourcing
Course
Created
Student
Created
….
Course
Renamed
….
Course
Capacity
Changed
….
Update
Course
Capacity
Command
Decision based on the following
business rules:
● The course exists
● The new capacity is different from prev
Command Handler
Event store
Course
Capacity
Changed
Event Store
events = stream(AggregateIdentifier id)
events = stream(StreamQuery query)
Stream Query
{"StreamQuery": {
"DomainIdentifiers": [
{ "course": "7d9b35b6-b46a-43bf-8e4c-eb7e6c3a487d" }
], "Types": [
"CourseCreated",
"CourseCapacityChanged"]
}
}
The focus is on the Message Handler
Less waste of resources
No modelling phase
More flexibility
Concurrency
Update
Course
Capacity
Command
Rename
Course
Command
Course
Created
Student
Created
….
Course
Renamed
….
Course
Capacity
Changed
….
Course
Capacity
Changed
Course
Renamed
Decision based on the following
business rules:
● The course exists
● The new capacity is different from prev
Decision based on the following
business rules:
● The course exists
● The new name is different from prev one
Concurrency
Update
Course
Capacity
Command
Subscribe
Student to
Course
Command
Course
Created
Student
Created
….
Course
Renamed
….
Course
Capacity
Changed
….
Course
Capacity
Changed
Student
Subscribed
to Course
Decision based on the following
business rules:
● The course exists
● The new capacity is different from prev
Decision based on the following
business rules:
● The course exists
● The number of current subscription is
LOWER than the capacity (N)
Event Store
append(Event[] events)
append(Event[] events, StreamQuery query, EventIdentifier lastEvent)
Conditional append
if (lastEventIdentifier(query) != lastEvent) {
rejectAppend();
}
Warranty of consistency
The event(s) are appended only if the there is no other event matching the query
that has appended after the lastEvent
Concurrency
Update
Course
Capacity
Command
Subscribe
Student to
Course
Command
Course
Created
Student
Created
….
Course
Renamed
….
Course
Capacity
Changed
….
Course
Capacity
Changed
Student
Subscribed
to Course
Decision based on the following
business rules:
● The course exists
● The new capacity is different from prev
Decision based on the following
business rules:
● The course exists
● The number of current subscription is
LOWER than the capacity (N)
...592 ...593
append(event, query, ...592)
append(event, query, ...592)
...593 != ...592
Limited contention
Before the contention boundaries were those of the aggregate...
Now, the contention boundaries are those of the stream query
Does not seem very artificial?
Student
Subscribed
to Course
Event
Student
Unsubscribed
from Course
Event
Subscribe
Student to
Course
Command
Unsubscribe
Student to
Course
Command
Course Course
Student
Subscribed
to Course
Event
Student
Unsubscribed
from Course
Event
Subscribe
Student to
Course
Command
Unsubscribe
Student to
Course
Command
Student Student
Course
Created
Student
Created
….
Course
Renamed
Course
Capacity
Changed
….
Student
Subscribed
to Course
Student
Subscribed
to Course
From the story-telling perspective
Student
Subscribed
to Course
Event
Student
Unsubscribed
from Course
Event
Subscribe
Student to
Course
Command
Unsubscribe
Student to
Course
Command
Decision Decision
Course
Created
Student
Created
….
Course
Renamed
Course
Capacity
Changed
….
Student
Subscribed
to Course
Student
Subscribed
to Course
Course
Created
Student
Created
….
Course
Renamed
Course
Capacity
Changed
….
Student
Subscribed
to Course
Student
Subscribed
to Course
Pure Events
Course: jdsj4 Student:gfh3j ---
Course: jdsj4 Course: jdsj4
--- Course: jdsj4 Student: gfh3j
Tags (Domain Identifiers)
Course
Created
Student
Created
….
Course
Renamed
Course
Capacity
Changed
….
Student
Subscribed
to Course
Course: jdsj4 Student:gfh3j ---
Course: jdsj4 Course: jdsj4
---
Course: jdsj4
Student: gfh3j
Pure Events
Tags (Domain Identifiers)
Subscribe command
Student
Subscribed
to Course
Event
Subscribe
Student to
Course
Command
Decision based on the following business rules:
- A course cannot accept more than N students
- The student cannot join more than 10 courses
{"StreamQuery": {
"DomainIdentifiers": [
{ "course": "jdsj4..." },
{ "student": "gfh3..." }
], "Types": [
"Course Created",
"Student Created",
"Course Capacity Changed",
"Student Subscribed to Course",
"Student Unsubscribed from Course"]
}}
Student
Subscribed
to Course
Event
Subscribe
Student to
Course
Command
Decision based on the following business rules:
- A course cannot accept more than N students
- The student cannot join more than 10 courses
Course
Created
Student
Created
….
Course
Renamed
Course
Capacity
Changed
….
Course: jdsj4 Student:gfhl3 ---
Course: jdsj4 Course: jdsj4
---
Pure Events
Tags
(Domain
Identifiers)
Student
Subscribed
to Course
Course: jdsj4
Student: gfh3
Append Events with Domain Identifiers
append(DomainEvent[] events)
append(DomainEvent[] events, StreamQuery query, EventIdentifier lastEvent)
Domain Event
DomainEvent {
Event event,
DomainIdentifiers[] identifiers
}
Domain Identifier
KEY: VALUE
The concept in the domain The unique instance identifier
This is just an example,
They can be anything, as far as they are unique inside the bounded context
Student
Subscribed
to Course
Event
Subscribe
Student to
Course
Command
Decision based on the following business rules:
- A course cannot accept more than N students
- The student cannot join more than 10 courses
Course
Created
Student
Created
….
Course
Renamed
Course
Capacity
Changed
….
Course: jdsj4 Student:gfh3j ---
Course: jdsj4 Course: jdsj4
---
Pure Events
Tags
(Domain
Identifiers)
Student
Subscribed
to Course
Course: jdsj4
Student: gfh3j
Course
Fully
Booked
Event
Course
Fully
Booked
Course: jdsj4
append(DomainEvent[] events, StreamQuery query, EventIdentifier lastEvent)
[ Event event = Student subscribed to Course,
DomainIdentifiers[] identifiers = [{course: "jdsj4..."},
{student:"gfh3..."}],
Event event = Course Fully Booked,
DomainIdentifiers[] identifiers = [{course: "jdsj4..."}]
]
DomainIdentifiers: [ {course: "jdsj4..."},
{student:"gfh3..."}],
Types: [ "Course Created", "Student Created", "Course Capacity Changed",
"Student Subscribed to Course", "Student Unsubscribed from Course"]}
...593
Pure events
An event does NOT belong to an aggregate
An event is just a description of a fact that is important for the business
An event can be related to one or multiple domain concepts, addressed by their
Domain Identifiers
Less complexity
No owner of the event
The business decision can easily involve several domain concepts
The decision is taken in one place
Saga
Less synchronization needed
Subscribe Student to
Course Command
Student Subscribed
Course Event
Subscribe Student to
Course Command
Student Subscribed
Course Event
Course
revert
Unsubscribe Student
to Course Command
Student Unsubscribed
Course Event
Student
Subscribe Student to
Course Command
Student
More flexibility
Event sourcing provides a huge advantage because it decouples the persistence
from the model needed for taking the decision
Refactoring
● Change the StreamQuery
● Add/Remove Domain Identifiers
● Perfect match with story telling
● Focus on behaviour instead of model
● Less contention
● Less complexity
● Simpler to refactor
@_sara_p_
Sara Pellegrini

More Related Content

What's hot

No Onions, No Tiers - An Introduction to Vertical Slice Architecture by Bill ...
No Onions, No Tiers - An Introduction to Vertical Slice Architecture by Bill ...No Onions, No Tiers - An Introduction to Vertical Slice Architecture by Bill ...
No Onions, No Tiers - An Introduction to Vertical Slice Architecture by Bill ...Alex Cachia
 
User story and splitting workshop
User story and splitting workshopUser story and splitting workshop
User story and splitting workshopBrian Sjoberg
 
Microservices Architecture & Testing Strategies
Microservices Architecture & Testing StrategiesMicroservices Architecture & Testing Strategies
Microservices Architecture & Testing StrategiesAraf Karsh Hamid
 
Agile code quality metrics
Agile code quality metricsAgile code quality metrics
Agile code quality metricsGil Nahmias
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidOutware Mobile
 
Beyond Hexagonal architecture
Beyond Hexagonal architectureBeyond Hexagonal architecture
Beyond Hexagonal architectureThomas Pierrain
 
DevSecOps: Key Controls to Modern Security Success
DevSecOps: Key Controls to Modern Security SuccessDevSecOps: Key Controls to Modern Security Success
DevSecOps: Key Controls to Modern Security SuccessPuma Security, LLC
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanAraf Karsh Hamid
 
Performance Engineering
Performance EngineeringPerformance Engineering
Performance EngineeringKumar Gupta
 
Introducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashIntroducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashSteven Smith
 
Lean & Agile Performance Measurement: Metrics, Models, & Measures
Lean & Agile Performance Measurement: Metrics, Models, & MeasuresLean & Agile Performance Measurement: Metrics, Models, & Measures
Lean & Agile Performance Measurement: Metrics, Models, & MeasuresDavid Rico
 
Financial Event Sourcing at Enterprise Scale
Financial Event Sourcing at Enterprise ScaleFinancial Event Sourcing at Enterprise Scale
Financial Event Sourcing at Enterprise Scaleconfluent
 
Agile vs Waterfall | Difference between Agile and Waterfall | Edureka
Agile vs Waterfall | Difference between Agile and Waterfall | EdurekaAgile vs Waterfall | Difference between Agile and Waterfall | Edureka
Agile vs Waterfall | Difference between Agile and Waterfall | EdurekaEdureka!
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean ArchitectureMattia Battiston
 
Relational Database CI/CD
Relational Database CI/CDRelational Database CI/CD
Relational Database CI/CDJasmin Fluri
 

What's hot (20)

No Onions, No Tiers - An Introduction to Vertical Slice Architecture by Bill ...
No Onions, No Tiers - An Introduction to Vertical Slice Architecture by Bill ...No Onions, No Tiers - An Introduction to Vertical Slice Architecture by Bill ...
No Onions, No Tiers - An Introduction to Vertical Slice Architecture by Bill ...
 
User story and splitting workshop
User story and splitting workshopUser story and splitting workshop
User story and splitting workshop
 
DevSecOps - The big picture
DevSecOps - The big pictureDevSecOps - The big picture
DevSecOps - The big picture
 
Microservices Architecture & Testing Strategies
Microservices Architecture & Testing StrategiesMicroservices Architecture & Testing Strategies
Microservices Architecture & Testing Strategies
 
Agile code quality metrics
Agile code quality metricsAgile code quality metrics
Agile code quality metrics
 
CQRS and Event Sourcing
CQRS and Event SourcingCQRS and Event Sourcing
CQRS and Event Sourcing
 
TDD and BDD and ATDD
TDD and BDD and ATDDTDD and BDD and ATDD
TDD and BDD and ATDD
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on Android
 
Beyond Hexagonal architecture
Beyond Hexagonal architectureBeyond Hexagonal architecture
Beyond Hexagonal architecture
 
DevSecOps: Key Controls to Modern Security Success
DevSecOps: Key Controls to Modern Security SuccessDevSecOps: Key Controls to Modern Security Success
DevSecOps: Key Controls to Modern Security Success
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, Kanban
 
Performance Engineering
Performance EngineeringPerformance Engineering
Performance Engineering
 
Introducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashIntroducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemash
 
Lean & Agile Performance Measurement: Metrics, Models, & Measures
Lean & Agile Performance Measurement: Metrics, Models, & MeasuresLean & Agile Performance Measurement: Metrics, Models, & Measures
Lean & Agile Performance Measurement: Metrics, Models, & Measures
 
DevSecOps 101
DevSecOps 101DevSecOps 101
DevSecOps 101
 
Financial Event Sourcing at Enterprise Scale
Financial Event Sourcing at Enterprise ScaleFinancial Event Sourcing at Enterprise Scale
Financial Event Sourcing at Enterprise Scale
 
Introduction to CI/CD
Introduction to CI/CDIntroduction to CI/CD
Introduction to CI/CD
 
Agile vs Waterfall | Difference between Agile and Waterfall | Edureka
Agile vs Waterfall | Difference between Agile and Waterfall | EdurekaAgile vs Waterfall | Difference between Agile and Waterfall | Edureka
Agile vs Waterfall | Difference between Agile and Waterfall | Edureka
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
 
Relational Database CI/CD
Relational Database CI/CDRelational Database CI/CD
Relational Database CI/CD
 

Similar to Kill Aggregate

The aggregate is dead! Long live the aggregate! - SpringIO.pdf
The aggregate is dead! Long live the aggregate! - SpringIO.pdfThe aggregate is dead! Long live the aggregate! - SpringIO.pdf
The aggregate is dead! Long live the aggregate! - SpringIO.pdfSara Pellegrini
 
V Jornadas eMadrid sobre "Educación Digital". Cristina Conati, University of ...
V Jornadas eMadrid sobre "Educación Digital". Cristina Conati, University of ...V Jornadas eMadrid sobre "Educación Digital". Cristina Conati, University of ...
V Jornadas eMadrid sobre "Educación Digital". Cristina Conati, University of ...eMadrid network
 
You can take the course out of the computer classroom but you can't take the ...
You can take the course out of the computer classroom but you can't take the ...You can take the course out of the computer classroom but you can't take the ...
You can take the course out of the computer classroom but you can't take the ...tomgerace
 
Architecture for Flow w/ Wardley Mapping, Domain-Driven Design, and Team Topo...
Architecture for Flow w/ Wardley Mapping, Domain-Driven Design, and Team Topo...Architecture for Flow w/ Wardley Mapping, Domain-Driven Design, and Team Topo...
Architecture for Flow w/ Wardley Mapping, Domain-Driven Design, and Team Topo...Susanne Kaiser
 
PyCon Ukraine 2016: Maintaining a high load Python project for newcomers
PyCon Ukraine 2016: Maintaining a high load Python project for newcomersPyCon Ukraine 2016: Maintaining a high load Python project for newcomers
PyCon Ukraine 2016: Maintaining a high load Python project for newcomersViach Kakovskyi
 
Scenario Based Learning using Rapid eLearning Tools
Scenario Based Learning using Rapid eLearning ToolsScenario Based Learning using Rapid eLearning Tools
Scenario Based Learning using Rapid eLearning ToolsTraci Weiss
 
Scenario based learning using rapid tools with screen shots
Scenario based learning using rapid tools with screen shotsScenario based learning using rapid tools with screen shots
Scenario based learning using rapid tools with screen shotsTraci Weiss
 
Cbt Development Overview
Cbt Development OverviewCbt Development Overview
Cbt Development Overviewmascomgroup
 
Supporting Flexible Competency Frameworks
Supporting Flexible Competency FrameworksSupporting Flexible Competency Frameworks
Supporting Flexible Competency FrameworksCarsten Ullrich
 
Object Oriented System Design
Object Oriented System DesignObject Oriented System Design
Object Oriented System DesignMurugeswari Ravi
 
Hello Class- This is a very rough draft of the assignment. I have
Hello Class- This is a very rough draft of the assignment. I have Hello Class- This is a very rough draft of the assignment. I have
Hello Class- This is a very rough draft of the assignment. I have SusanaFurman449
 
Project Management Fundamentals
Project Management FundamentalsProject Management Fundamentals
Project Management FundamentalsOxfordCambridge
 
Grad Cert Tertiary Learning and Teaching, my APL presentation
Grad Cert Tertiary Learning and Teaching, my APL presentationGrad Cert Tertiary Learning and Teaching, my APL presentation
Grad Cert Tertiary Learning and Teaching, my APL presentationSamuel Mann
 
Advanced Authoring Engaging Learners
Advanced Authoring Engaging LearnersAdvanced Authoring Engaging Learners
Advanced Authoring Engaging LearnersBritt Carr
 

Similar to Kill Aggregate (20)

The aggregate is dead! Long live the aggregate! - SpringIO.pdf
The aggregate is dead! Long live the aggregate! - SpringIO.pdfThe aggregate is dead! Long live the aggregate! - SpringIO.pdf
The aggregate is dead! Long live the aggregate! - SpringIO.pdf
 
Lecce Presentation2008
Lecce Presentation2008Lecce Presentation2008
Lecce Presentation2008
 
V Jornadas eMadrid sobre "Educación Digital". Cristina Conati, University of ...
V Jornadas eMadrid sobre "Educación Digital". Cristina Conati, University of ...V Jornadas eMadrid sobre "Educación Digital". Cristina Conati, University of ...
V Jornadas eMadrid sobre "Educación Digital". Cristina Conati, University of ...
 
8th sem (1)
8th sem (1)8th sem (1)
8th sem (1)
 
You can take the course out of the computer classroom but you can't take the ...
You can take the course out of the computer classroom but you can't take the ...You can take the course out of the computer classroom but you can't take the ...
You can take the course out of the computer classroom but you can't take the ...
 
Architecture for Flow w/ Wardley Mapping, Domain-Driven Design, and Team Topo...
Architecture for Flow w/ Wardley Mapping, Domain-Driven Design, and Team Topo...Architecture for Flow w/ Wardley Mapping, Domain-Driven Design, and Team Topo...
Architecture for Flow w/ Wardley Mapping, Domain-Driven Design, and Team Topo...
 
PyCon Ukraine 2016: Maintaining a high load Python project for newcomers
PyCon Ukraine 2016: Maintaining a high load Python project for newcomersPyCon Ukraine 2016: Maintaining a high load Python project for newcomers
PyCon Ukraine 2016: Maintaining a high load Python project for newcomers
 
Scenario Based Learning using Rapid eLearning Tools
Scenario Based Learning using Rapid eLearning ToolsScenario Based Learning using Rapid eLearning Tools
Scenario Based Learning using Rapid eLearning Tools
 
Scenario based learning using rapid tools with screen shots
Scenario based learning using rapid tools with screen shotsScenario based learning using rapid tools with screen shots
Scenario based learning using rapid tools with screen shots
 
Cbt Development Overview
Cbt Development OverviewCbt Development Overview
Cbt Development Overview
 
Supporting Flexible Competency Frameworks
Supporting Flexible Competency FrameworksSupporting Flexible Competency Frameworks
Supporting Flexible Competency Frameworks
 
Object Oriented System Design
Object Oriented System DesignObject Oriented System Design
Object Oriented System Design
 
Cets 2016 fisher munoz agile project management methods for e learning
Cets 2016 fisher munoz agile project management methods for e learningCets 2016 fisher munoz agile project management methods for e learning
Cets 2016 fisher munoz agile project management methods for e learning
 
Sanjay resume
Sanjay resumeSanjay resume
Sanjay resume
 
Hello Class- This is a very rough draft of the assignment. I have
Hello Class- This is a very rough draft of the assignment. I have Hello Class- This is a very rough draft of the assignment. I have
Hello Class- This is a very rough draft of the assignment. I have
 
Project Management Fundamentals
Project Management FundamentalsProject Management Fundamentals
Project Management Fundamentals
 
Project Management Fundamentals
Project Management FundamentalsProject Management Fundamentals
Project Management Fundamentals
 
Grad Cert Tertiary Learning and Teaching, my APL presentation
Grad Cert Tertiary Learning and Teaching, my APL presentationGrad Cert Tertiary Learning and Teaching, my APL presentation
Grad Cert Tertiary Learning and Teaching, my APL presentation
 
Software Design principales
Software Design principalesSoftware Design principales
Software Design principales
 
Advanced Authoring Engaging Learners
Advanced Authoring Engaging LearnersAdvanced Authoring Engaging Learners
Advanced Authoring Engaging Learners
 

Recently uploaded

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....ShaimaaMohamedGalal
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 

Recently uploaded (20)

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 

Kill Aggregate