Batch Updates and Deletes with LINQ to SQL
If you haven’t seen this already, you need to check it out. Terry Aney did an amazing job.
If you haven’t seen this already, you need to check it out. Terry Aney did an amazing job.
This makes me really happy. Thank you, Microsoft, for listening and reaching out to your community.
Another Oxite, indeed. My Google Reader reported a flood of activity in the AppArch CodePlex wiki, the majority of which was updated patterns pages with “BETA – Published for Community Feedback. This page is a wiki. Please provide your feedback in the comments below,” at the top. The Application Architecture Guide, v2 is now back in beta status after the flood of community feedback following its December 2008 “final” release.
I’m glad to see Microsoft respond to the community. I find great hope in Microsoft’s future in their willingness to listen and respond. If only they would do so sooner rather than later, they would have a much better reputation with the community. Nevertheless, I’m pleased with their desire to dialogue with the community to improve their guidance.
Now, if you are an architect or developer with experience in the areas for which Microsoft is offering guidance, speak up. Help provide the response for which Microsoft is asking. This is a great opportunity for us to bridge the relationship we have with the team at Microsoft providing the tools we use daily.
I followed Microsoft P&P’s Application Architecture Guide’s progress closely, right up until the point it was released. I still haven’t read it all the way through, and at this point, I might not. J.D. Meier posted several of the pattern diagrams today, and I was quite surprised by what I saw. I posted a comment on the Web Application with Domain Entity Application Pattern post, but I think a few others say it much better:
To their credit, I noticed the App Arch guys added a how-to for DDD, and after a brief scan, I don’t think it looks half bad.
What are some of your thoughts? Have any of you read the guidance? Should it be called guidance? Are those of us who are dissatisfied wrong, and if so, what are we missing?
I’ve recently been assigned a complicated use case and have been heads down working on finishing it up.
Mostly its been a great exercise in BDD requirements / story construction. I’ve stumbled, made mistakes, corrected mistakes, etc
I am still excited about BDD stories. I think with DDD and BDD and insert jargon here… there is a drive to pass the infamous smell test.
There are the developers that just code. They apply a technology and just swing code around to solve a problem. Comments and best practices and solid design be damned. It works! So what’s the problem?
Then there are the developers that have that passion and instinct to know something is wrong. The idea is similar to Gladwell’s Blink principle. These developers first just code and refactor in solo. I relate it to a ronin samurai. Maybe a Luke Skywalker before his time with Yoda.
They then discover patterns and OMG.. the lights go on and you have an epiphany. There is a great book on font design by Robin Williams called The Non-Designer’s Design & Type Books. Chapter one is called The Joshua Tree Epiphany. Here is the quick summary. She picked up a tree book and the first tree was the Joshua Tree. She said to herself, “Oh, we don’t have that kind of tree in Northern California. That is a weird-looking tree. I would know if I saw that tree, and I’ve never seen one before.” She then went outside and immediately saw that her neighbors had Joshua trees. Yet she never ‘saw’ one before because she didn’t know what they were. This principle she describes simply saying :
*Once you can name something, you’re conscious of it. You have power over it. You own it. You’re in control.*
Once developers are exposed to patterns and understand patterns, a new world is opened up to them. And beyond patterns, there are principles. I recently listened to the Hansel Minutes with ‘Uncle Bob’ on the SOLID principles. I found myself saying.. exactly! a lot. The principles just resonate ‘rightness’.
Anyway, what I am trying to say is that on the road to becoming the best developer I can be, I am at the mastering DDD / BDD / TDD stage. I know they are right because when I execute them correctly, it feels right. When I mess things up, it feels wrong. In lots of ways it feels like I am on an intellectual adventure. Maybe like Lord of the Rings. Instead of the ring weighing down Frodo the closer he got to Mount Doom… the closer I get to mastery of these concepts the better I feel about development.
So anyway.. those are some random thoughts I’ve been having lately. Hence the low number of blog posts. I’ve been using the time to read (because I need to catch up!) and to practice the esoteric art of BDD stories. My current reference is Dan North’s site.
I will update Greek Fire soon with documents mostly. I want to have a readme file about setting up the database. I also want to have BDD stories to document the requirements for the domain, etc.
For those interested in Composite Application Guidance for WPF and Silverlight, a.k.a. Prism, the Patterns and Practices crew has released their ninth drop, and this one is a doozie. Most of the reference implementation has been implemented for Silverlight, along with a re-skin for the Silverlight implementation and Quick Start for pull-based view resolution. You can find the drop here.
In my current project we ran across a problem where we wanted to hide certain columns in a grid view based on domain criteria.
We looked into custom grid headers, attached properties, custom controls, etc. Every path lead to a very complex and more importantly custom solution.
I spent an afternoon playing around and came up with this solution which we are using today.
It’s simple, easy to follow, and doesn’t require any custom code. All it uses is the power of style and triggers. The biggest knock is OH NOES! you have a bit of duplication in your xaml.
What is it?
Well, you set the ‘View’ property in your style. Then you utilize style triggers to swap out the View.
Yup.. easy.. simple… no mess.
Example :
<style x:Key="listViewStyle" TargetType="ListView">
<setter Property="View">
</setter><setter .Value>
<gridview>
<gridviewcolumn Header="Name"
DisplayMemberBinding="{Binding Name}" />
<gridviewcolumn Header="Salary"
DisplayMemberBinding="{Binding Salary}" />
</gridview>
</setter>
</style><style .Triggers>
<datatrigger Binding="{Binding HideCols}" Value="True">
<setter Property="View">
</setter><setter .Value>
<gridview>
<gridviewcolumn Header="Name"
DisplayMemberBinding="{Binding Name}" />
</gridview>
</setter>
</datatrigger>
</style>