.NET, Java, Patterns, Abstraction, YAGNI
Some interesting tidbits
At the patterns&practices Summit in Redmond, I was on a webcasted panel, "Open Source in the Enterprise", moderated by Scott Hanselman and included myself, Rocky Lhotka, and Chris Sells as panelists. Part of the discussion came around to building abstraction layers, though, and one thing that deeply worried and disappointed me was the reaction of the other panelists when I tried to warn them of the dangers of over-abstracting APIs.
You see, we got onto this subject because Scott had mentioned that Corillian (his company) had built an abstraction layer on top of the open-source logging package, log4net. This reminded me so strongly of Commons Logging that I made a comment to that effect, warning that the Java community got itself into trouble (and continues to do so to this day, IMHO) by building abstraction layers on top of abstraction layers on top of abstraction layers, all in the name of "we might want or need to change something... someday". It was this very tendency that drove many developers to embrace YAGNI (You Ain't Gonna Need It) from the agile/XP space, and remains a fiercely-debated subject. But what concerned me was the reactions of the other panelists, whose reaction, paraphrased, came off to me as, "We won't make that mistake--we're smarter than those Java guys."
And from Sam Gentile (who quotes most of the rest of the above blog entry from Ted Neward):
I really loved Ted's post on the above with the quote, "But Java still has much more it can teach the .NET community: mocking, unit-testing, lightweight containers, dependency-injection, and the perils of O/R-M are just part of the list of things that the Java community has close to a half-decade's experience in, compared to .NET's none." Amen. I have been making this same point for years. Some people in the .NET/Microsoft community think all this stuff is whacked because its not part of a MSDN article but these things are part of parcel of great software architecture and development and the .NET community is way behind here. When I do my SOA talk around the country and talk about Software Architecture, I ask the audience if they have one of the bibles, Evan's Domain-Driven Design and almost no hands go up! Repositories, DI, OR/M, gosh I must do the database-driven stored proc thing all the time because Microsoft tells me to. I am really hoping that key books like Jimmy Nilsson's Applying Domain-Driven Design and Patterns: With Examples in C# and .NET, starts to solve this issue that Martin Fowler calls "Many people in the Microsoft community have not been as good as others in propagating good design for enterprise applications...this book is a valuable step." Her's hoping (again).
I am finishing Jimmy Nilssohn's book Real Soon Now and going onto Software Factories next. But I think I would also like to read the Evan's book on DDD and Martin Fowler's Patterns of Enterprise Application Architecture. Yeesh. That's a lot of stuff on the shelf.