What will we do?
For this meetup, we are going to look at a small game, developed from scratch. The game itself will have some very basic rules. However, there will also be some arbitrary rules for the developer(s) to follow when writing the code. We will watch the code come together, to model the game, following the software development rules were discussed at the beginning. Along the way, we will discuss many of the development decisions that are being made, including the pros and cons of each decision. In the end, we will review the Visual Studio solution, and see how the rules led us to our final destination.
Why are we doing this?
We've already discussed, in previous Craftsmanship meetups, topics such as test-first development, core-first development (aka plug-in architecture), dependency injection, mocking, and so on. Each of these was discussed in isolation, to study the concept in detail, without any other noise to get in the way. This time, we will see how a real (albeit small) project comes together, keeping all of these previous concepts in mind.
Why should I attend?
Free food! Good company! If that is not enough, here are some other things to consider:
Sometimes it is difficult to choose what classes should have dependencies, what classes should not.
Sometimes it is difficult to choose if a class itself is a dependency, and whether or not it should be abstracted (i.e. interfaced).
Sometimes it feels like there are too many dependencies being passed around/down through a class instantiation hierarchy.
Sometimes it's tough to buckle down and write a unit test, because it seems like there are just too many dependencies to inject/mock to deal with.
Sometimes it's difficult to identify what is a Data Transfer Object and what is an Entity object; sometimes they feel identical. Are multiple objects overkill?
Sometimes it's difficult to decide where to put an interface file. Should that be in a folder called interfaces? Or are classes put in an implementations folder? And what assembly should they go in?
And by the way, where do custom exceptions go? In their own folder too?
As we watch the game come together, there will be plenty of opportunities to ask questions and discuss these, and other issues, that arise when trying to follow best practices while writing code.