Galin Iliev's blog

Software Architecture & Development

Layers of data driven aplication

Sahil Malik wrote a nice article were give short presentation of layers of typical data-driven application. The focus is on ADO.NET vNext CTP and it's goals. Here is the copy of it:


At the very heart of it, the next release of ADO.NET vNext targets to bridge the gap between the Conceptual Model and the Logical Model. But what are the various models we deal with? Well, they are;

The Physical Model: Data, on a computer lives in bits and bytes. When we are working at the physical model level, we tend to talk in terms of bits and bytes, various file system structures, paging, caching, heaps, indexes, file allocation records etc. When we used to program for mainframes, frequently your business logic would target the physical model directly. This is no longer the case when working with modern day high level languages. It is safe to assume that today we have reached a maturity level where in order to solve a business solution, you do not need to worry about the physical model for the most part.

The Logical Model: This is where today’s applications target their data. This typically is the place where data lives in rows and columns and tables and databases. You define relationships, constraints, you normalize, de normalize data. Usually the RDBMS takes care of the impedance mismatch between the logical model and the physical model, and over the last 20 years RDBMS’s have matured to a level where you need to target the physical model directly in extremely infrequent instances.

The Conceptual Model: This is what your end-client will relate to better. So instead of talking about Employee records, at this level you can talk about a concept called Employee, and a specific employee called SalesPerson, and another called CEO. These are typically referred to as entities. At this level you have various other concepts besides entities introduced, such as Entities, Values, Factories, Aggregates, Repositories, and Services.

Various concepts have been introduced over the years that help you model conceptual models. An example most of us have heard of, is UML. (I am going to reserve my judgment on UML – But I am curious, what are your thoughts on UML?)

The translation between conceptual and logical models is usually labor intensive and problematic. Various processes have been defined by management schools, typically grouped under the umbrella called “Domain Driven Development” (Here’s a good book - ). The problem of course is that this process is terribly time consuming, and is almost always deemed to fail because in a real world scenario it is nearly impossible to account for every use case unless you are working in a fixed requirements scenario with years of time at hand. In short, Domain Driven Development is the least worst choice in today’s world.  Some folks will argue that Domain Driven Development is the anti-thesis of SCRUM/Agile. I strongly disagree with that statement. These two are essentially unrelated to each other. If a proper Agile process helps you reduce the cost of change, then the same reduction in cost of change also applies to the domain model. So in that sense they go hand in hand.

But there is still a huge gap between the logical model and the conceptual model. There have been software approaches to bridging this gap earlier – typically in the shape of ORMs. ADO.NET vNext aims to bridge this gap as well, but ADO.NET vNext does not intend to be a sophisticated ORM. I think going forward ADO.NET will become like ASP.NET controls, where the inbuilt controls get you started and give you reusable knowledge, but if you need steroids you need to look at companies like telerik ( for advanced functionality. Similarly, ADO.NET vNext will help you some, but there will be scope for third parties such as llblgen ( and deklarit ( And I feel all of these will continue to flourish and advance in a Microsoft ecosystem.

Presentation Model: Once you have your data model represented in concepts, you still need to present it to the actors. The actors can be users or external systems. In order to do so, in a well architected system you would tie your conceptual model with a presentation layer using a typical design pattern such as the MVP (Model View Presenter) or MVC (Model View Controller) design pattern etc. This gives you the utmost flexibility going forward."

Microsoft shares your pain!!!

When user see message that says somethings was broken the user feels real pain....
It is good to know that MS developers shares this pain. For your goodness you should be good if you work in such invironment ;):)

What this funny video :)


MS TechEd Iron Architect Contest

A few months ago Microsoft annonced first contest for Architects - TechEd Iron Architect. As I am member of local IASA chapter and participate in developing and review IASA Foundation Reference Model I am interesited in this event. Actually I am most developer and solution architect.

Profesion IT architect is to be developed at world level. More about this later when we prepare course about this for IASA.

Back on  TechEd Iron Architect. I pasted the problem here as there was message at that winners would be listed from June 20, 2006 to July 20, 2006.

"The final winner will be voted on by the distinguished panel of judges and awarded a free Architect certification(valued at $10,000). (Winners must go through application process for the certification program and be accepted in order to receive the paid certification)."

So the task was:

Problem Statement:

Have you ever been to a conference where you find it takes so long to walk between rooms for sessions – even though they are on the same subject?  Have you then rushed to the room only to find that it was over capacity?  Do you wish for a more dynamic way of allocating rooms for sessions based on popularity and location?

Now you have an opportunity to change it!  The Iron Architect competition this year is about creating a new experience for TechEd session management.  Here’s how it works…


The Requirements:

You have been asked to create an architecture that dynamically allocates sessions for presentations at TechEd 2007.  Aware of the people’s presence throughout the conference, the new system must dynamically allocate the rooms for a session 30 minutes before it’s due to start  based on:

·         Location and number of attendees in the area

·         Attendees that have registered their schedule

·         Location of speaker

·         Availability of suitable room for session

For example, if 55 of the 70 attendees that pre-registered for DEV101 are on the 2nd floor on the convention center, and the speaker is somewhere close by, the most appropriate course of action would be to allocate a room on the 2nd floor.  You have to work out how to perform this allocation, and how to notify both the attendees and the speaker of the room allocation.



·         The system must be technically feasible using today’s technology. 

·         Next year’s conference is also at the Boston Conference Center

·         There are a 100 sessions across 5 days.  Total 500 sessions. 

·         The timetable follows a similar format to this years.

Proposed Solution can be found here. (They are donwloaded from  and the only reason for this is to preserve them in case decide to remove them)

And of course.... THE WINNER - The Iron Architect prize goes to Steve Land, Pricipal Architect, Codesic Consulting. (download his solution)


Guy Kawasaki's The Art of the Start

Do you guys know Guy Kawasaki? I've just came across with his presentation about his book The Art of the Start. I do not know about the book but I watched presentation and I am very impressed. This guy is very good at his field.

I give presentations in university in front of about 200 studens and I am interested in improving my presentation skills. His video was full of jokes, self criticism but first of all very usefull information. Although this isn't technical presentation  I recommend it because there is very valuable information and a ton of practical information

Of course there are some things I personally disagree but there are some interesting thoughs and advises.
I think I am going to read his book. You can watch the presentation if you are short of time.

MS Access upsizing

Have you heard this term: "MS Access upsizing"? This means transfer all tables (with data) from MS Access to central database server as front-end forms keeps working. this action is applied when application from old days become too big, but it is too expensive to rewrite and as solution database back-end is changed but UI is kept.

I heard about this two weeks ago when I got a Access solution to upsize. so far so good :)  I learned it is typical to have two Access files - one for database and one with UI. UI file use linked tables to database file to access data. This sounds good as it separates layers.

All I had to do is transfer data from database file to SQL Server (the company has brand new server with SQL 2005 installed). Sound easy, doesn't it? From my experience I could tell you Nothing is easy! Especially when you want to make it bug free! To convince you in that I was told that author of this Access solution could not upsize it's own solution for a year. Scary huh!

My first step was to use MS Access Upsizing wizard to transfer data. Beleive or not but it transferred only half tables (I had 116 tables and about 55 was transfered). Why? I simply do not know... I suppose because very few tables have PK.

Second step: After fighting a bit with Upsizing wizard I decided to use newer products. I jumped directly to SQL Server 2005 tools (SQL Server Management Studio), I created new database and used SQL Server Import and Export Data Wizard. Guess what! I wasn't able to transfer all tables at once. Luckily it was Ok when I did it in two steps. Looks like I made half of the task :)

Today I found new newsgroups microsoft.public.access.sqlupsizing that contained link to Migrate to SQL Server page. Microsoft decided that MS Access Upsizing wizard is not good enough and started working on SQL Server Migration Assistants (there are assistants for Oracle ;), Access, and SyBase). they are still on CTP2 but it worked much better than SQL Server Import and Export Data Wizard. I was able to do same much easier and wihtout a single error (with a bunch of warrnings because missing default values). It will be much easier to explain whole procedure to our office

Milestone 1 Reached.

The second one is easy. Especially if you have experice with developing for MS Office. I executed the script below to relink linked tables to SQL server location (in UI access file)


Sub ModifyLinkedTables()
Dim tdf As TableDef, db As Database, tbfSource As TableDef
Set db = CurrentDb

On Error Resume Next

For Each tdf In db.TableDefs
'*** check if this is not system table
If InStr(1,, "MSys", vbTextCompare) = 0 Then

'*** check if table exists in AlliantData.mdb
tdf.Connect = TABLE_CONNECT

'*** print error if any
If Err.Number <> 0 Then
Debug.Print "Error Arrised at table: " & & " . Error is: "; Err.Description
End If

Set tbfSource = Nothing
End If

Debug.Print "Done!"
End Sub

I this is it. I will write again when I talk with clients and we change their files  :):). Whish me good luck

I tried some more solutions I come across article How to create a DSN-less connection to SQL Server for linked tables in Access 2003 and in Access 2002. It helps when you want to create linked tables in MS Access by script.

MCPD Achieved!!!

Wow! I just got back from testing center and I am excited about my results. I passed the exam

070-553: UPGRADE: MCSD Microsoft® .NET Skills to MCPD Enterprise Application Developer by Using the Microsoft .NET Framework: Part 1

This exam along with my MCSD.NET credentials and Exam 70-548 PRO: Designing and Developing Windows-Based Applications by Using the Microsoft .NET Framework made me Microsoft Certified Professional Developer (MCPD): Windows Developer

I described this because with MS new certification generation it is difficult to track all possible ways to achieve certain credentials

Ayrton Senna quote

I just read a quote from one the best F1 pilots of all times - Ayrton Senna

"Racing, competing, is in my blood, is part of me, is part of my life" 
                                                                           Ayrton Senna da Silva