"A piece of code is used to specify models and views of models. So there would be "text" and "page" models and views of those models. Next there would be a "page-set" and then a "book" is a "page-set" with a cover, binding, author, title, etc. Next, there can be models of pdf, and all the other page/e-book formats that MAP to a page or a page-set. We could have the "book" model look in a variety of places to try to find a cover picture (e.g., Amazon.com). Next, a "view" maps the book to a set of cairo and OpenGL commands that would draw the book in various states (closed, open to page n, page turning, etc.) and provide any animations (book opening, etc.) Last, we would make a "book-set", just a list of books, which would have a view that displays it as a bookshelf. a "Library" model would be a list of book-sets."