I tried using a minimum number of C#-specific features and in several places even made remarks targeted at Java users to make it easier for them. That said, I wanted the book to be as technology-agnostic as possible, to allow especially Java programmers to benefit from it.
The language of choice for the code examples is C#. I decided to stick to the convention of putting an underscore ( _) before a class field name. My goal is to allow users of other languages (especially Java) to benefit from the book. I tried to avoid properties, events, and most modern features. Most of the code in this book is not idiomatic C#. I am not a big fan of using ISomething as an interface name, so I decided to drop the I even though most C# developers expect to see it. The language of choice for code examples is C#, however, I made some exception from the typical C# code conventions. Thus, I would also like to thank my mentors and authorities on test-driven development and object-oriented design that I gained most of my knowledge from (listed alphabetically by name): It presents various topics that others invented and I just picked up. I would like to thank the following people (listed alphabetically by name) for valuable feedback, suggestions, typo fixes and other contributions: To my beloved wife Monika and our lovely son Daniel.
Most of the getters should be removed, return values should be avoided.Message recipients should be told what to do, instead of being asked for information.Model interactions after the problem domain.Craft messages to reflect the sender’s intention.Events/callbacks vs interfaces – few words on roles.Receive in response to a message (i.e.How does a sender obtain a reference to a recipient (i.e.So, again, what does it mean to compose objects?.Object-oriented programming to the rescue!.Driving the implementation from Specification.Sometimes, an anonymous value is not enough.Specifying functional boundaries and conditions.Fourth technique: Constant Specification.Third technique: Distinct Generated Values.Developing a TDD style and Constrained Non-Determinism.What should be the functional scope of a single Statement?.On what level do we specify our software?.What is the scope of a unit-level Statement in TDD?.Is there a commonality between analysis and TDD?.How is TDD about analysis and what does “GIVEN-WHEN-THEN” mean?.Start by invoking a method if you have one.Start by filling the GIVEN-WHEN-THEN structure with the obvious.
Taking it to the software development land.Motivation – the first step to learning TDD.