Totem is a set of development techniques lovingly prepared in C# and spiced with the experience of coding for those who code. Software is exploding with cross-pollination of ideas, lending new eyes to old problems. This is an attempt to catch some of that lightning in a bottle.
Totem has been brewing for a long time, in various projects, utility libraries, gists, and other places you might find attempts to smooth the development experience. The concepts are battle-hardened and ready to move beyond the proving grounds.
Head over to the wiki to learn more about Totem and its nifty tricks.
Some highlights:
- Text: A unified medium for working with strings
- Expectations: State exactly what is expected of runtime values
- Tagging: Attach structured metadata to objects
I (Bryan) build things with the excellent team at DealerOn. I welcome contributions and am always looking for like-minded individuals who share my enthusiasm for collaboration.
I can usually be found in the DDD/CQRS/ES Slack room and am always up for a discussion. You can self-register here.
I am also @deftcode on Twitter.
Totem is under the MIT License - like knowledge, it wants to be free.
Totem draws influence from a wide range of knowledge work concepts. The dynamics of collaboration, decisions, time, and intent form the core of its worldview.
Knowledge work is a rich landscape of problems, ideas, and perspectives. These implementation paradigms (and more) express solutions and play important roles in Totem:
Style | Primary focus |
---|---|
Object-oriented | Pair data with the code using it |
Functional | Separate data from the code using it |
Static | Resolve symbols at compile time |
Dynamic | Resolve symbols at run time |
Reactive | Resolve program flow at run time |
Asynchronous | Separate work from workers across time |
Deciding what work to do is an art all its own; much effort lies at the feet of this foe. These modeling paradigms (and more) help understand where and how to apply tactical design:
Approach | Meaning | Primary focus |
---|---|---|
DDD | Domain-Driven Design | Model knowledge work as a series of decisions: the data informing them and the data they yield |
CQRS | Command/Query Responsibility Segregation | Model writes and reads independently |
ES | Event Sourcing | Model the domain as a timeline |