For the update on beers, I’m back the land of the IPAs! Cider was just not a thing for me anymore. I tried to like it, but without any success I’ve now fallen back to IPAs :)
Code for this post is in branch: learning-unbeered-13.
- Brought in RavenDB as a data store! I’m using RavenDB(v3.5) in production at work and I’ve to say I’m extremely happy! Take a look at the feature list and you’d definitely want to give it a try. The community edition is now free for commercial usage.
- The only place that I am still using LiteDB is to store data about “Consecutive Beering”, every other data is now in RavenDB. This is the beauty of de-coupling logic. We can use separate storage for separate concerns. Use relational, nosql, graph storage where it makes sense!
- I’ve separated out handlers according to what it does. i.e CalculatedDataHandler.cs deals with anything to do with CalculatedData. Similarly, ConsecutiveBeering and TooManyBeers handles logic related to their concerns!
- Installing RavenDB is extremely easy! Follow the getting started instruction here. Once installed, use the Management Studio(web) to create a database “unbeering-db”. When initializing the DocumentStore later in the Program.cs, we provide the db name and connection to the server which is localhost:8080 or any other port you used during setup!
- Program.cs now also initializes RavenDB DocumentStore which basically acts as a connection manager to RavenDB server. by providing api to perform various operations. An instance of the DocumentStore is registered as a singleton to ServiceCollection since it is costly to initialize and dispose it.
- In order to perform various operations like querying, loading, saving data to RavenDB, we need to use DocumentSession which can be obtained from DocumentStore.
- A new instance of DocumentSession should be obtained for a life cycle of a single session.
- When we are ready to commit the changes to a document in a session we call SaveChanges() method on a session. The API implements Unit Of Work pattern and therefore changes in the data in a particular session is sent to the server as an unit!
I hope this was pretty straight forward! I think the next step would be to make a few minor changes to the console UI!
Cheers until then!