Here is a small part of my Demo that I’m creating. It is actually a second Presenter with Model and View that are used when you want to import something (the demo will follow so don’t worry :) ).It gives a good view of how I’m implementing the MVP pattern.

Import MVP Class Diagram

As you can see my Model exists only of methods to get data. My view exists of only events. The presenter has 1 public constructor which takes an IImportModel and IImportView instance. The constructor calls the SetUpView method which will bind all the View’s events to the private methods (ViewAdd, ViewClosing, ViewLoadFeed). The Closing event is an easy feature (WinForms already have this event anyway) which allows me to clean up everything. That’s why the Model also implements the IDisposable interface. So when the view is closed the presenter will call the Dispose method on the Model which can then close the database connection, file or …

I’ve been working MVP for a day now and I just love it. Complete seperation of data and user interface. I’ve been creating 2 models, one built with Ado.NET (which sucks by the way) and one built with Hera (the ORM tool at work).

I found a few ways to implement MVP though. Some still have a reference from the View to the Presenter. I removed this reference by using events on the View that the Presenter listens on.

By using Rhino.Mocks I also created a complete test case for my presenter with a mocked View and Model to check that everything goes as it should.

This is actually the first program where I could test a program with a user interface :)

I’ll see that I can post some information later today and put up the code for anybody who wants it.

Somebody mailed me that I should look into the MVP pattern (did I mention I love patterns! :) )

So after some browsing on the web it sure looks like the right pattern to use for my last problem.

MVP exists of a Model (the data), a View (the user interface) and a Presenter which links everything together. There are a few good articles about it on codeproject so you should look there if you want to.

Since MVP completly seperates model from view it should be possible to use an ORM and when you don’t want to use it anymore you just need to create a new model.

I couldn’t really find a sample of a MVP application with 2 models so I’ll create a sample myself. I might post it online to.

A few days ago a friend of mine asked me the following. He was working on a program with a database backend. He found some ORM tools on the web, but every time they worked differently (use that or that class, mapping files, configurations, …) and he was worried that if he took the wrong ORM tool that later on in the program they would be stuck with it.

So he asked me if I knew anything where this wouldn’t be the case. I was pretty busy at the moment but I told him that I would let him know anything in a few days.

Anybody that had the same problem before and has a good solution for it?