I needed to write a small app to manage some data for a client. Naturally, I began in front of my whiteboard mapping out the app, the flow, the classes. Then it hit me - I was totally over-architecting this thing. I decided that since I would be the only user of the app, I was going to take advantage of the opportunity to see what it was like to drag and drop my way to an application. Having spent as much time as I did on the whiteboard still was helpful because I had to tackle some difficult relationships between the data, so I was very organized when I headed into drag & drop land.
The interesting thing about going this route is that it made me head back to a totally data driven design. If I was going to drag DataGridViews onto a Windows Form and then bind it to the database, I had to start with designing tables in the database and the relationships between them. This was painful for me, because I was not allowing myself to create classes and a data access layer and all of the goods I'm used to working with.
Once I got the hang of creating the datasources and untangling things if I changed my mind and deleted the DataGridView (but all of the datasources, schemas, etc that I created stuck around), I went to town. Admittedly, I'm not done yet because I got waylayed by a boatload of other projects. But what I have done so far is dealt with all of the base data that I need to track - the lists. In the long run, I will need to combine data from these lists (things like clients, products, categories, locations, etc) into contracts. I was amazed at how much I could accomplish without having to dig in and actually write some code. And it was a lot of fun. Like playing a game. Not that I can truly achieve my goal with no coding (nor would I want to try!)
The real advantage to this exercise, I think is that now I have a better concept of this territory of Visual Studio. I spend most of my time in the class libraries and have been very unfamiliar with a lot of the new controls and much of this type of directy databinding functionality. I also see the kind of trouble someone who is a newbie can still get into using these wizard tools. For example, I forgot to create a primary key on one of my tables and couldn't, for the life of me, figure out how to get the datasource wizard to automatically build the Update/Add/Delete commands. With the primary key in place - it just works. Without it, it just doesn't.
And you certainly hit limitions quickly enough. For example, a number of these grids have drop down lists. I wanted to be able to dynamically add items to the lists and make sure there were not duplicates. I definitely had to get into some entertaining coding for this. So I wonder what happens when someone who is a newbie with creative ideas gets totally stuck. Back to Access?
And don't think I managed to stop myself from writing *some* data access code. Of course, I had to let myself do some coding while I was working on this.
Anyway, I'm looking forward to wrapping up the app - I know that there will still be a bunch of real coding involved, but it's been fun using the draggy droppy tools where I can - and, considering what I can achieve with them, I'm pretty impressed however I don't foresee having another excuse to play with this level of Visual Studio any time soon.