I've always been pretty vocal about my anti-dataset views. I also don't think databases should be treated as dumb repositories - they should be leveraged. This in-between attitude, which I think is actually fairly common, means I end up writing a lot more code than either dataset users or OO purists.
Extra code isn't really a problem - I can always codegen it or write it in my sleep. I think the biggest problem with being an in-the-middle-kinda-coder is that the impedance mismatch is very present for even the most trivial task. Take for example the very typical problem I'm currently having: returning values from a stored procedure and mapping them to an enum.
I have a Friends list, and calling the sproc AddFriend might return a InvalidUserName, AlreadyAFriend or BeingIgnored status. Sure, I could raise exceptions (assuming the DB supports something like that), but I don't consider those to be exception worthy. I have an enum defined in my C# code which I'd like to map these values to, but how?
I can pass each status into my sproc as a variable, something like:
command.Parameters.Add("@InvalidFriendNameStatus", SqlDbType.Int).Value = AddFriendStatus.InvalidFriendName;
I could hard-code the values in my sproc, or use a table to replicate my enum. I could even make the entire thing DB driven, and on app startup, load fake enum values from status tables into specialized classes...I never know what's the right way to do it. I'd actually consider using SQL Server's CLR if it was an option..
I don't think impedance mismatch is actually less of a problem if you are more data-centric or more object centric. In my experience you'll run into less small problems, but more serious ones.
help...