add comment b725410a5c0ff4bd65fc242f760cc0d4 on issue 08f0d7ee7842c439382816d21ec1dea2
This commit is contained in:
parent
502e843b2f
commit
612afacbbb
1 changed files with 44 additions and 0 deletions
|
|
@ -0,0 +1,44 @@
|
||||||
|
I like the idea of a layered architecture, with a db layer that manages
|
||||||
|
filesystem i/o.
|
||||||
|
|
||||||
|
|
||||||
|
# API
|
||||||
|
|
||||||
|
* Read a filesystem object into a struct Issue (e.g. `ent show`)
|
||||||
|
|
||||||
|
* Write a whole struct Issue into a filesystem object (e.g. `ent new`
|
||||||
|
or `ent comment`).
|
||||||
|
|
||||||
|
* Write a single field from a struct Issue into an existing filesystem
|
||||||
|
object (e.g. `ent state ISSUE Done`).
|
||||||
|
|
||||||
|
On write operations, the git commit message should be meaningful to
|
||||||
|
the application. Maybe that can be done generically by the db library,
|
||||||
|
or maybe the application needs to supply the commit message.
|
||||||
|
|
||||||
|
|
||||||
|
# Design
|
||||||
|
|
||||||
|
A filesystem stores two kinds of things: directories and files.
|
||||||
|
A directory contains files, and other directories.
|
||||||
|
|
||||||
|
Git stores two kinds of things: trees and blobs. Trees contain blobs,
|
||||||
|
and other trees.
|
||||||
|
|
||||||
|
Maybe this DB tracks two kinds of things: databases and key/value objects.
|
||||||
|
Databases store key/value objects, and other databases.
|
||||||
|
|
||||||
|
Some things we'd want from this DB layer:
|
||||||
|
|
||||||
|
* Filesystem objects correspond to structs, like how we have each struct
|
||||||
|
Issue in its own issue directory.
|
||||||
|
|
||||||
|
* Structs are nested, like how struct Issue contains struct Comment
|
||||||
|
|
||||||
|
* Some fields are simple types (`author` is String), some are
|
||||||
|
less simple (`timestamp` is chrono::DateTime), some are custom
|
||||||
|
(`state` is enum State), and some are complicated (`dependencies`
|
||||||
|
is Option<Vec<IssueHandle>>, `comments` is Vec<Comment>)
|
||||||
|
|
||||||
|
* Filesystem objects are optimized for getting tracked by git - minimize
|
||||||
|
merge conflicts.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue