Here are some notes that might be useful. I've not had the time to write all the details, but there is enough info to get you going.
Git-based version control adapts well to various development situations. Use Git if possible. There is a nice, free, on-line book, Pro Git, by Scott Chacon.
I like the explanation (and pictures!) in Section 1.3 about how Git differs from Subversion-style version control.
Git supports well branch-merge, feature-based, "agile"-style of software development. This Wikipedia page has a simple example of a branch-merge diagram.
There is even a software development methodology based on Git, called "git flow", where you manage an evolving project with Git as your main tool. See this article. (I've created a local copy here.)
Here is a "reverse" table, that lists the problems you might face when you are designing a system and which patterns might help your situation. I've added a few patterns that weren't introduced in my lecture notes, but you can look them up and learn them easily.
But first,
You've designed a complicated implementation of a data structure/data base, and you don't trust your users to use the structure correctly. |
|
Your system holds a model assembly that is queried a lot, and you are worried that the entry to the model is a "bottleneck". |
|
Your subassembly builds compound objects that are assembled from a mix-and-match kit of "features". (Think of how a car is assembled with features and how a laptop is assembled with features.) |
|
You've written a driver or controller that is meant to work with different families of model objects that "plug into" the driver (e.g., a typesetter into which a font family is plugged or a graphics driver into which a widget family is plugged). | Use the abstract factory pattern. It is one of the most important and well known patterns. |
Two assemblies need to be connected, and they use different protocols (data args, method names, order of method calls). | Use an adaptor. |
You've connected multiple assemblies, and the result is a mess. |
|