Skip to main content

Impressions: "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries"

I've recently read Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries by two lead architects on the .NET Framework. A mixed experience, I have to say. The book does offer good advice, but somehow, hardly anything seemed truly new. Maybe that is because I've already read Josh Bloch's Effective Java, but, I suspect, mostly because I have accumulated a fair bit of framework design experience myself (and, like them, learned from many mistakes). It was quite eerie at times, as it felt like they'd written down my own thoughts. So, it has still been a rewarding read, seeing as this eminent source confirmed a lot of my design creeds.

A lot in the book is quite .NET specific, though I can hardly blame the book for that. And while it is tedious reading to someone looking for higher-level insights, I still wholeheartedly agree with the authors that consistency down to detailed naming conventions matters a lot in framework design.

The most gratifying part was Krzysztof Cwalina's assertion that the most important advice in the book, if he had to make the choice, would be to focus on the key usage scenarios, and to design the API starting with example code for those tasks. Exactly.

Comments

Popular posts from this blog

Threaded chat article and demo

While nothing major, managing threaded conversations in chat has bothered me for quite a while. Yesterday I had an idea on how to improve matters: Works using existing chat infrastructure. Needs only augmented clients. Plays well even if other party uses a non-thread aware chat tool. Separates threads automatically based on interaction patterns. I've written an article and have created an online demo about it. Discussion welcome.

Beyond TDD: Documentation Driven Development

There are quite a few articles extolling the virtues of test-driven development these days ( here's one ). And for good reason, too. Having done TDD for quite a while, I recently started combining it with documentation-driven design. This is what my open-source tool, JCite , is all about. With this approach, I sketch out the most important use cases, combine them into the index of a tutorial (links plus teasers summarizing the use-case), flesh out the tutorial topics (and thus use-cases) one by one, develop the use-case tests in parallel to each topic, cite the important parts of the tests as actual code samples into the topic, and only then start doing the implementation (this last step is accompanied by more tests, which are now more like unit-tests). In all, this is like literate programming, but of the use-case tests rather than the implementation code. TDD already helps to make you focus on the user during API design. DDD takes the effect further by making you tell consistent ...

RSpec and BDD - something crucial missing?

RSpec Site : "RSpec provides a framework for writing what we call executable specifications of program behaviour. Since that’s rather wordy, we usually just call them specs. Some other people call these things examples." If I take a look at the examples on the RSpec site, I cannot help but wonder if just doing this (which they term "behaviour-driven development"), misses out on an important aspect of API documentation and the thought processes that should go into an API design. The missing element is explanation . In my experience, unless I force myself to explain my decisions to an audience (even a hypothetical one), I come up with too complex designs, inconsistent naming, and just generally too much hassle for the users of the API. Sometimes, complexity is warranted. But then, I believe it is important to justify it to your users. Show them why it's there. The RSpec approach is, as I see it, simply a very concise way to write your tests twice: once in natural...