I found out a few days ago that I've been selected to speak at TechEd EMEA in Barcelona. I'm really excited as this is not only my first time speaking outside of North America, it's my first trip to continental Europe. My session is on using ASP.NET AJAX with SharePoint 2007.
Integrating ASP.NET AJAX with SharePoint.
If you're attending the conference and find the session interesting the please feel free to go to the session list and rate it. I don't know for sure but I think that your rating and the number of people who give a rating have an effect on the scheduling of the session. I'm positive that the number of ratings you receive helps determine if your session will repeat.
I'm not going to be able to attend the PDC this year (this event and the PDC were too close together) so I'm glad there's a PDC track at TechEd. From all reports PDC is going to rock so at least I'll be able to get a taste of the content.
I'll be Twittering (http://twitter.com/rob_windsor) and hopefully blogging from the conference. If you're there feel free to look me up or better yet drop by my session.
The spring conference season keeps on chugging along. The MVP Summit and DevTeach just finished and TechEd is just around the corner.
It will be interesting to see what effect splitting the conference into a developer week and an IT Pro week will have. I've been spending a lot of time with SharePoint lately and that's a topic that has firm roots on both sides. I'm sure there are many other disciplines (SQL Server and VSTS come to mind) that are in the same boat.
This year I'll be taking it easier on the "networking" than I have in the past. I'm moderating a Birds-of-a-Feather (BoF) session and co-presenting an early-morning TLC talk and want to do so with a clear head. I'll also still be in the process of upgrading our ASP.NET course from 2.0 to 3.5 which will be delivered for the first time the week following the conference.
I went through the session builder earlier and there are a ton of things I want to see. I had two or three (sometimes even more) sessions per time slot that I wanted to see. This morning I deleted all those and later this weekend I'm going to go through and pick the sessions that I absolutely don't want to miss (my sessions for example) and put those in Outlook. Everything else will be done spur of the moment at the conference.
For those of you who are attending the conference for the first time, you might want to check out my Guide to Attending TechEd or PDC.
I'll be Twittering (http://twitter.com/rob_windsor) and hopefully blogging from the conference. If you're there feel free to look me up or better yet drop by one of my sessions.
WIN07-TLC Strategies for Moving Microsoft Visual Basic 6 Applications to Microsoft .NET
Wednesday, June 4 8:30 AM - 9:45 AM
Blue Theatre 1
BOF806 Strategies for Moving Your Microsoft Visual Basic 6 Investments to .NET
Thursday, June 5 1:00 PM - 2:15 PM
Technorati Tags: [TechEd, Visual Basic, VB]
So the million dollar question is: Does the Entity Framework replace the need for a Data Access Layer? If not, what should my Data Access Layer look like if I want to take advantage of the Entity Framework? In this multi-part series, I hope to explore my thoughts on this question. I don't think there is a single correct answer. Architecture is about trade offs and the choices you make will be based on your needs and context.
In this first post, I first provide some background on the notion of a Data Access Layer as a frame of reference, and specifically, identify the key goals and objectives of a Data Access Layer.
While Martin Fowler didn't invent the pattern of layering in enterprise applications, his Patterns of Enterprise Application Architecture is a must read on the topic. Our goals for a layered design (which may often need to be traded off against each other) should include:
- Changes to one part or layer of the system should have minimal impact on other layers of the system. This reduces the maintenance involved in unit testing, debugging, and fixing bugs and in general makes the architecture more flexible.
- Separation of concerns between user interface, business logic, and persistence (typically in a database) also increases flexibility, maintainability and reusability.
- Individual components should be cohesive and unrelated components should be loosely coupled. This should allow layers to be developed and maintained independently of each other using well-defined interfaces.
Now to be clear, I'm talking about a layer, not a tier. A tier is a node in a distributed system, of which may include one or more layers. But when I refer to a layer, I'm referring only to the logical separation of code that serves a single concern such as data access. It may or may not be deployed into a separate tier from the other layers of a system. We could then begin to fly off on tangential discussions of distributed systems and service oriented architecture, but I will do my best to keep this discussion focused on the notion of a layer. There are several layered application architectures, but almost all of them in some way include the notion of a Data Access Layer (DAL). The design of the DAL will be influenced should the application architecture include the distribution of the DAL into a separate tier.
In addition to the goals of any layer mentioned above, there are some design elements specific to a Data Access Layer common to the many layered architectures:
- A DAL in our software provides simplified access to data that is stored in some persisted fashion, typically a relational database. The DAL is utilized by other components of our software so those other areas of our software do not have to be overly concerned with the complexities of that data store.
- In object or component oriented systems, the DAL typically will populate objects, converting rows and their columns/fields into objects and their properties/attributes. this allows the rest of the software to work with data in an abstraction that is most suitable to it.
- A common purpose of the DAL is to provide a translation between the structure or schema of the store and the desired abstraction in our software. As is often the case, the schema of a relational database is optimized for performance and data integrity (i.e. 3rd normal form) but this structure does not always lend itself well to the conceptual view of the real world or the way a developer may want to work with the data in an application. A DAL should serve as a central place for mapping between these domains such as to increase the maintainability of the software and provide an isolation between changes in the storage schema and/or the domain of the application software. This may include the marshalling or coercing of differing data types between the store and the application software.
- Another frequent purpose of the DAL is to provide independence between the application logic and the storage system itself such that if required, the storage engine itself could be switched with an alternative with minimal impact to the application layer. This is a common scenario for commercial software products that must work with different vendors' database engines (i.e. MS SQL Server, IBM DB/2, Oracle, etc.). With this requirement, sometimes alternate DAL's are created for each store that can be swapped out easily. This is commonly referred to as Persistence Ignorance.
Getting a little more concrete, there are a host of other issues that also need to be considered in the implementation of a DAL:
- How will database connections be handled? How will there lifetime be managed? A DAL will have to consider the security model. Will individual users connect to the database using their own credentials? This maybe fine in a client-server architecture where the number of users is small. It may even be desirable in those situations where there is business logic and security enforced in the database itself through the use of stored procedures, triggers, etc. It may however run incongruent to the scalability requirements of a public facing web application with thousands of users. In these cases, a connection pool may be the desired approach.
- How will database transactions be handled? Will there be explicit database transactions managed by the data access layer or will automatic or implied transaction management systems such as COM+ Automatic Transactions, the Distributed Transaction Coordinator be used?
- How will concurrent access to data be managed? Most modern application architecture's will rely on an optimistic concurrency to improve scalability. Will it be the DAL's job to manage the original state of a row in this case? Can we take advantage of SQL Server's row version timestamp column or do we need to track every single column?
- Will we be using dynamic SQL or stored procedures to communicate with our database?
As you can see, there is much to consider just in generic terms, well before we start looking at specific business scenarios and the wacky database schemas that are in the wild. All of these things can and should influence the design of your data access layer and the technology you use to implement it. In terms of .NET, the Entity Framework is just one data access technology. MS has been so kind to bless us with many others such as Linq To SQL, DataReaders, DataAdapters & DataSets, and SQL XML. In addition, there are over 30 3rd party Object Relational Mapping tools available to choose from.
Ok, so if you're not familiar with the design goals of the Entity Framework (EF) you can read all about it here or watch a video interview on channel 9, with Pablo Castro, Britt Johnson, and Michael Pizzo. A year after that interview, they did a follow up interview here.
In the next post, I'll explore the idea of the Entity Framework replacing my data access layer and evaluate how this choice rates against the various objectives above. I'll then continue to explore alternative implementations for a DAL using the Entity Framework.
If you're not familiar with the concept, a Birds-of-a-Feather (BOF) session is an open discussion lead by a moderator who is not a Microsoft employee. The sessions are not presentations, there are no projectors. Unlike the Keynotes and Breakout sessions which are mostly one to many communication, Birds-of-a-Feather sessions are many to many communication and don't necessarily focus on Microsoft products or technology. They are about people talking with people - connecting, sharing, networking, and creating community.
This year I'm doing a BOF session at TechEd Developer. From my expereince with the community at user groups and conferences it's pretty clear that there are lots of developers who still work with classic VB code at least part of the time. Many are still questioning what to do with this legacy code and how to move it forward or integrate it with .NET.
Strategies for Moving Your Microsoft Visual Basic 6 Investments to .NET: For years Visual Basic 6 (VB 6) was used by organizations world-wide to build key line-of-business applications and components. Now they have thousands to millions of lines of code representing a significant organizational investment. Many have struggled in the past trying to move this legacy code base to .NET, many are just starting that journey. The path from VB 6 to .NET has not always been clear - there are options but there is no one size fits all approach. One option is to rewrite your applications so you can re-architect and take advantage of all the features .NET has to offer. Another is to migrate the applications so automated tools like the Code Advisor and the Migration Wizard can assist you. Finally, you can use COM Interop and the Interop Forms Toolkit to continue leveraging existing working assets while phasing in new features built on the .NET Framework. In this session we will discuss all three options and explore the pros and cons of each. The goal is raise awareness of the choices and the tools available so you will be able to pick the best strategy for your organization going forward.
If you're thinking of heading down to Orlando June 3-6, 2008 - you can check out the list of sessions which has been recently posted here.
You also have the option of rating sessions that you might be interested in. I assume this is to help plan room sizes.
I'll be doing a breakout session called "Building Next Generation Data Access Layers with the ADO.NET Entity Framework" in the Architecture Track. I'm really looking forward to it. Hope to see you there.
Last night it was the attendees party. I have been to many of these, and this was one of the better ones.
We got the run of Fenway park, one of the oldest Ball parks in the games history (According to Bruce). It's quite amazing.
We sat at the top of the Green Giant. Walked around the field. Bruce wanted to throw a ball from the mound but the actual field was roped off. We kept daring him. I even offered hm 100 to do it, but he didn't want to be on the news today I guess.
They had a couple of bands play. I saw one of them Train. Very good band, they put on a good show.
Last Day of the conference. At this point you just want to go home. Barry was one of the Judges for the Iron Architect Competition on the last day. Bruce and I headed to the airport. I took the Subway which was a nice way to get to the airport cheaply. Not that a cab from downtown costs all that much but the boston subway is pretty cool so I thought I would take it.
The Boston Culture was Durgin Park. We went tonight for dinner. You have to do it. It's a 180 year old Boston landmark. Like they say “Your great grandfather likely had dinner there.”
Interesting People: I went to a session today by Jesper Johansson called Is that application really safe? I went on John Lam's recommendation. I'm glad I did. It was an excellent presentation. Security can be interesting. That was the first interesting person I saw today.
Tonight we went to the influencer's party at Ned Divines Bruce and I were walking around seeing who was there. We asked to borrow a chair from a table where two ladies were sitting and got chatting with them. They were both British and their job was to organize and execute Tech Ed Europe. I have mentioned before in my blog how amazed I am how something this huge comes together, and here I was with the chance to chat with the people who do it. They were very interesting to talk to, they mostly wanted our opinion on various matters. Which of course we gave them, however not without asking a bunch of questions about organizing something like Tech ed or PDC.
Interesting day all around.
Was looking at sessions for the afternoon. And came across one that I had missed before on this topic. The book didn't actually say it was about this but I recognized the name Mairread O'Donovan from the VSTS influencer's the night before. She was the one telling me about this new product.
I have been skipping VSTS sessions so far since I have been working with it for so long I thought they might be too light, but this is new and I wanted to see the product in action.
Some of the features I didn't find out about last night.
- Reverse engineer your SQL Server Database
- Version Control
- Schema Build and Deploy
- Unit Testing
- Schema Compare
- Data Compare
- Data Generator (This is a nice tool for creating sample test Data, FOR DEVELOPERS NOT TESTERS we'll talk later)
- Schema refactoring
- TSQL editor
- Query Execution
- Plus the normal Team Foundation Server stuff (Work items and Process Integration)
It would be nice if they would also include in this tool the following. If the Team is reading this feel free to use this as high level requirements.
- Integrate Profiler
- Debugging from code straight into SQL easily with no extra work
- Modeling (for Barry)
I attended a little party on Monday night for VSTS influencer's.
I met some very nice people, who are very excited about their work. I had a short discussion about the new Visual Studio for DBA's. This sounds like a nice tool. One of the features I liked from a testing/deployment/promotion model point of view is being able to compare Data between versions of the Database.
When you are testing an application you must have control variables. So often this is not the case. Other industries are laughing at us over this. I remember reading an article in American Scientific written by an engineer who was slamming the software industry because we do not have standard process and controls in place like the engineering community. Anyway One of the most important parts of testing is to have a Database that you know the state of when executing tests. If you don't know what data is in your Database how can you be sure the test results are accurate.
It sounds to me like there will be tools to help in the coming version or Visual Studio for DBA's
I really can't go the week without saying something about the people in charge of getting us from our hotels to the conference centre and back again.
The Buses run often and everyone is bending over backwards to help you get from A to B.
- I left the conference today to go to a Staples and stop in at the hotel for something. I got on a bus that was going to a hotel that was near the Staples. I was the only one on the bus. The driver asked me which hotel, to which I replied I'm actually going to the Staples so I'll get off at which ever hotel is closest. He dropped me off right in front of the Staples.
- I was talking to the guy who handles the bus outside our hotel. I asked him when the next bus would go. If it was more then 20 min I was going to walk. He tells me it's going to be 10 minutes. So I said I was going to walk around Quincy Market for a few minutes and I would come right back. On my way back I see him running across the street to find me in the market to tell me the bus was here and ready to take me back.
That is good service. To all those in charge of transportation at Tech-Ed 2006. Thank you!