AddBookItemController class 19
AtomicReference generic class 168
state management with 172 – 174
thread-safe cache with 170 – 172
thread-safe counter with 165 – 170
Author class 5, 337 – 338
AuthorDataWithFullName class 347
Author.myName(author, format) function 290
authorNameDispatch function 291
Author.prolificityLevel helper function 291
authorsById index 46 – 47, 55, 268
automatic generation of data model diagrams 260 – 262
automatic generation of schema-based unit tests 262 – 269
Book class 5, 7, 11, 51 – 52
BookItem class 5, 11 – 12, 51
Book records 49 – 51, 60, 77
booksByIsbn index 46 – 47, 55, 77
Catalog.authorNames function 115, 121
Catalog.bookInfo function 114, 121
Catalog class 5, 7, 10 – 11
Catalog module 35, 39, 62 – 63
Catalog.searchBooksByTitle function 318
class members, generic access to 373 – 380
automatic JSON serialization of objects 378 – 380
nested class members 376 – 378
non-nested class members 373 – 376
complexity 13, 27, 164, 198, 341
concurrency control 91 – 92, 163
implementation of reconciliation algorithm 106 – 108
optimistic concurrency control 92 – 93
reconciliation between concurrent mutations 94 – 97
state management with atoms 172 – 174
structural difference 99 – 106
thread-safe cache with atoms 170 – 172
thread-safe counter with atoms 165 – 170
convertJDBCResultSetToListOfMaps function 204
countByBoolField utility function 304
createAuthorObject function 340
fetching data from database 198 – 204
storing data in the database 204 – 206
data-driven programming 385 – 386
data entities 29 – 31, 38
manipulating data with generic functions 54 – 57
manipulating nested data 299 – 301
representing records as maps 48 – 54
data model diagrams, automatic generation of 260 – 262
data models, designing 44 – 48
data-oriented design 385 – 386
data-oriented programming. See DOP
data validation failures 158 – 161
function argument validation 248 – 255
return value validation 255 – 257
data validation failures 158 – 161
external data sources 329 – 330
reproducibility with any data 318 – 321
reproducibility with numbers and strings 314 – 318
displayAuthorInfo function 357
displayFullName function 358 – 359
displayProlificity function 358 – 359
DOP (data-oriented programming) 26 – 27, 386
data-driven programming vs. 386
2009: Immutability for all 383
DOP (data-oriented programming) principles
represent data with generic data structures 345 – 350
separate code from data 335 – 344
separate data schema from data representation 355 – 363
DSLs (domain specific languages) 386
dysGreet multimethod 286 – 288
external data sources, debugging 329 – 330
fetchResponseBody function 230
FP (functional programming) 13, 28, 59, 75, 336 – 337, 381
fullName function 338 – 339, 343, 348
function arguments, validation of 248 – 255
generic functions, manipulating data with 54 – 57
greetDispatch dispatch function 278
greetLang multimethod 282, 284
HAMT (Hash Array Mapped Trie) 383
Immutable.fromJS() function 186
Immutable.stringify() function 192
Java, persistent data structures and 184 – 186
JavaScript, persistent data structures and 186 – 188
java.util.concurrent.atomic package 168
JDBC (Java database connectivity) 202
automatic serialization of objects 378 – 380
schema flexibility and strictness 149 – 153
JSON.stringify() function 53, 192
Librarian::blockMember method 8
Librarian class 5, 10 – 11, 22
Library.addMember function 79, 127
Library class 5, 9 – 10, 33, 126
libraryData.catalog data object 40
libraryData.userManagement data object 40
Library module 33 – 36, 39, 62 – 63
filter 188, 201, 389
get 55 – 57, 61, 166, 173, 185, 188, 352, 366, 376, 388
many-to-many association relation 8
dynamic getters for string maps 364 – 367
accessing nested map fields 366 – 367
accessing non-nested map fields 365 – 366
representing client requests as 225 – 227
representing records as 48 – 54
representing server responses as 227 – 231
accessing nested map fields 371 – 372
accessing non-nested map fields 370 – 371
accessing nested map fields 368 – 370
accessing non-nested map fields 367 – 368
Member class 5, 10 – 11, 15
multimethod library 278 – 280, 289
integrating in production systems 289 – 293
with dynamic dispatch 286 – 289
with multiple dispatch 281 – 286
with single dispatch 277 – 281
reconciliation between concurrent 94 – 97
writing with persistent data structures 191 – 192
with dynamic getters 366 – 367
nested class members 376 – 378
OOP (object-oriented programming) 3 – 4, 334, 381
separating code from data 335 – 336
complex class hierarchies 20 – 24
many relations between classes 14 – 16
not trivial data serialization 18 – 20
unpredictable code behavior 16 – 18
optimistic concurrency control strategy 92
serialization and deserialization 192
writing mutations with 191 – 192
writing queries with 188 – 189
previous states, restoring 86 – 89
previousSystemData references 87
writing with persistent data structures 188 – 189
reconciliation algorithm 106 – 108
REPL (Read Eval Print Loop) 313
with numbers and strings 314 – 318
return values, validation of 255 – 257
schema-based unit tests, automatic generation of 262 – 269
schema flexibility and strictness 149 – 153
searchBooksByTitle function 60, 62 – 63
search results, calculating 58 – 64
commit phase of mutations 83 – 85
ensuring system state integrity 85 – 86
multiple versions of system data 72 – 74
restoring previous states 86 – 89
statically-typed languages, data access in
dynamic getters for string maps 364 – 367
accessing nested map fields 366 – 367
accessing non-nested map fields 365 – 366
generic access to class members 373 – 380
automatic JSON serialization of objects 378 – 380
nested class members 376 – 378
non-nested class members 373 – 376
typed getters for maps 370 – 372
accessing nested map fields 371 – 372
accessing non-nested map fields 370 – 371
value getters for maps 367 – 370
accessing nested map fields 368 – 370
accessing non-nested map fields 367 – 368
structural difference 99 – 106, 193 – 195
structural sharing 72, 74 – 81
System class 84 – 85, 126
SystemConsistency class 106 – 108
SystemData class 108, 172 – 173
SystemState class 84 – 86, 88, 127
SystemState.commit function 127
system state integrity, ensuring 85 – 86
tree of function calls 113 – 115
automatic generation of 262 – 269
for data manipulation code 112 – 121
tree of function calls 113 – 115
simplicity of data-oriented test cases 110 – 112
unit tests for data manipulation 112 – 121
UnSupportedOperationException exception 179, 185
updating values in maps eloquently 296 – 299
User class 5, 10 – 11, 20, 24, 338
UserManagement.addMember function 127
UserManagement.isLibrarian function 66
UserManagement module 35, 39 – 40, 67
UUID (universal unique identifier) 322
validate function 147, 158, 356
passing information forward 231 – 234
representing client requests as maps 225 – 227
representing server responses as maps 227 – 231
search result enrichment 234 – 243
word boundaries regular expression 327
18.117.183.150