Model View Presenter Part I – Building it from Scratch

by Rod 3/31/2008 11:13:00 PM

MVP Part I Sample.zip (83.87 kb)


Introduction

The advantages of knowing Model-View-Presenter (MVP) pattern from scratch: 

  • Engineer’s knowledge can be applied across different OOP languages (like VB.NET, Ruby, Java, C#). This is advantageous for developers and architects working on different types of languages.
  • Engineer’s knowledge can be applied across different versions of IDE and frameworks.
  • Engineer becomes versatile and mobile across different platforms and languages.
  • Engineer will not be dependent to MVP tools.

MVP Tools are not bad, the downside of using tools is that they are often tied up to IDE versions and often does not support older versions. Tools have limited support on languages and frameworks, so if the engineer is given a project that does not support his beloved tool he’ll go back to square one or worst he will blame the tool or start cursing the client/boss who gave the project… hehehe…

The goals of MVP are:

  • Testability of the application
  • Cohesion or separation of responsibility
  • Orthogonality

Orthogonality is the ability to change the conceptual design of the application with minimal impact to the entire application. Domino effect is common to two-tier application where a slight change to data access layer affects the presentation and the business process.

Advantages of MVP:

  • Parallel development. Separation of responsibilities of UI developer, business logic developer, and data access developer that make them work independently. In economics, it’s division of labor.
  • Reusability. Reuse presenter in different user interface designs (web, windows form, etc). I even use it in Visual Studio Tools for Office (VSTO) application.
  • Maintainability due to clear separation of responsibilities (UI, application behavior, and domain).
  • User Interface independent. This is an advantage for an application that supports different user interface types.

Let’s get it on!

Download the code and launch your Visual Studio .NET and open the MVPSession.sln file.

Note: The sample is built using Visual Studio 2005 and compatible with VS 2008. If you are running Visual Studio 2003 just change the IList<T> types to IList. I already included the assemblies we need for Mocking (NMock) and Unit Testing (NUnit).

To illustrate the advantages I mentioned above, I created a sample application that will insert new employee profile. This will show how MVP will be reused and consumed by two different user interface types with minimal impact or without impact at all to the presentation logic. It will also shows how to separate the presentation from the presentation logic.

A Tester module is also added to show how to create a mock tester. Mock testing is also known as Horizontal Testing whose main goal is to test the behavior of the application without going deeply to the business logic and data access layer. We will discuss more about mocking in MVP Part II.

Figure 1 shows the architecture reference of the sample application –  User Interface Layer (Presentation and Presentation Logic), Business Logic, and the Data Access Layer. In this article we will just focus only on the User Interface Layer and how to test it.

Figure 1. Sample Application Architecture

Presentation is the layer where the user interacts with the application and can be represented in many types of interfaces - mobile, web, windows forms, etc. In our sample application, we only use Windows Form and Web Form.

Presentation Logic houses the behavior or the UI logic of the view. In most cases, it requires at least a view and a model in order for the presenter to work. Service layer is sometimes optional if you don’t have data to pull from data sources (database, file, or web service). I sometimes call this the MVP layer.

Parts of the Presentation Logic:

  • View is best described as the logical representation of the UI and provides an interface for the presenter to communicate with the UI.
  • Presenter houses the behavior and UI logic.
  • Model is just an object that represents the module or the view. It’s an ideal place to put the validation and small business rules like computation of total amount or formulas. This just a lump of data that holds the state and data of the view. In the sample application, our model is the EmployeeModel object. In an ordering system, the model would be the Order object that contains order details and order items.
  • Service is a data provider and a façade that manages data retrieval from different data sources (database, web service, xml, etc). It can also house some business logic and validation. It is not aware of the user interface type (whether it is a web, mobile, or windows form). In the sample application, our service layer only returns dummy data. If you have time, you can play with it by adding the BLL and/or DAL layer.

Side Note:
As a rule of thumb, do not include any UI libraries in your Presentation or MVP project like System.Web or System.Windows.Forms to avoid UI objects from mixing with the presenter code. This will make your presenter less flexible.

In the diagram above you can see that Model has no direct access to Service and only the presenter has direct access to both. But it does not mean that Model cannot access the Service. In most of my application I do not give Model access to Service as much as possible to centralize all the behavior and logic in the presenter and make Model just a lump data. This makes the application easy to debug and test.
 
To start the implementation, let’s assume that we have four engineers – Leo, Richard, Ryan, and Chris. Leo is a Windows Form UI designer, Richard is a UI/Presentation Developer, Ryan is the backend developer, and Chris is the Architect.

Chris was given a project to create a data entry application for HR. Chris decided to design the application in MVP pattern for agile development and to let engineer work in parallel. Chris divided the project into three parts the UI Interface Layer – Business Logic Layer – Data Access Layer and distributed the task to the four engineers.

Leo as a UI designer doesn’t care about how the data will be processed or how the form will behave when Submit button is clicked. He only cares about how the data will be presented to the user and how to make the application user friendly to the users. So he created the form in Figure 2.

Figure 2. Windows Forms UI.

Richard as a Presentation developer doesn’t care about what control to use in each fields, what color of the error message and labels are, and what the UI type is, whether it is a windows forms or a web form. He only cares about the fields needed and its data type, what are the required fields, validation rules, business flow, and the service provider. So he created IEmployeeView, IEmployee and EmployeeModel, EmployeeService, and EmployeePresenter objects. See MVP project for the implementation.

Ryan as a backend developer doesn’t care about the the presentation. He only cares about how to provide the client or consumer with the data, where to fetch the data, how to connect to the database, and how to ensure the integrity and consistency of data. In our sample application we don’t have the BLL and DAL project yet, so just assume that Ryan is still working on it or probably sick. Hehehe... We hope Ryan is finished with the DAL and/or BLL by the time MVP Part II article is ready.

Question: Do Richard requires to integrate his work to the UI and backend code before he can test the behavior and flow?

Answer: No.  Richard could proceed testing his work without the UI and backend. This method of testing is called Mock testing or Horizontal Testing. While Leo and Ryan are busy working on the UI and backend, Richard can proceed creating a Mock tester project to test his work. See Test project in the sample solution. In this sample we are using NMock for mock testing.

Late in the game, Marvin the Project Manager decided to add a Web form UI that will be used by the global HR in the main headquarters. So he added Jen as a resource to design HTML Forms. Jen created the form in Figure 3.

Figure 3. Web Form

Question: Are we going to create a new Presenter for the new web form UI?

Answer: No, we can reuse existing presentation with minor changes. Just take note that web is stateless so we need to modify interfaces that are statefull like the dialog boxes to display error messages.

Three months have pasts. Marvin comes in and approaches the team and says “Guys we did a great job, the project was so great that attracts another client. He likes the system and just wants to change the Salary Range dropdown to list box and wants to connect to his company database through web service.” Chris the architect evaluated and says “all we need to do is to modify the Service and the Form”. So the tasks are assigned to Leo and Richard.

Leo will just change comboxSalary to listBoxSalary in the form.

Richard will just create a new Service class that inherits the IEmployeeService and change the service used by the presenter in the Form_Load with the new service object named EmployeeWebService.

See WinUI2 project for the fixes made by leo and richard. In EmployeeWebService, I just provide a dummy data for the application to run. You can play with it with real web service if you have time.

How to Integrate Presentation to UI

 

Integrating presentation to UI is just three easy steps away:

 

   1. Inherit the view interface to UI. In our example its IEmployeeView interface.

      

public partial class FormEmployee : Form, IEmployeeView

      {  ...

}

   2. Implement all the IEmployeeView interfaces by providing code to each of the interfaces. See FormEmployee.  

   3. Initialize the presenter in Form_Load.

          _presenter.Initialize();

        

How to Run the Test Project

 

There are several ways and tools to run the test project.

 


Running Test Project Using Resharper (http://www.jetbrains.com/resharper/) 

 

If you have Resharper you can just simply click the bubble besides the test case and select the Run From Tester context menu. This will launch the Unit Test Runner within your IDE.

 

Figure 4.0. Running Test using Resharper.

 

 

Figure 4.1. Unit Test Runner.

 

Running Test Project Using NUnit (http://www.nunit.org/) 

1. Run the NUnit GUI.
2. Drag and Drop Test.dll found in Test project’s bin to NUnit GUI. You can also use the File | Open Project, and then browse the Test.dll.
3. Then click Run button.

Figure 4.3. NUnit GUI

 

Running Test Project using TestDriven.NET (http://www.testdriven.net/)

If you have TestDriven.NET installed you can just right click the Test project, then select the Test With from the context menu and select one of the variety of test tools supported. If you select NUnit it will launch NUnit GUI.

For a quick test you can just select the Run Test(s) from the context menu.

Figure 4.4. TestDriven.NET Context Menu

The cases above shows

  • Division of labor
  • Productivity and Efficiency
  • Maintainability of the application
  • Orthogonality 
  • Testability

There are times when you are developing your MVP application you’ll encounter a sort of dead end where you develop a presentation that it’s hard to test. If you are in this situation just refactor your code and remember the law of cohesion. Sometimes your code gets tangled because of lack of cohesion.

May the force be with you.
Rod

Currently rated 5.0 by 13 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , ,

Architectures | MVP | TDD

Related posts

Comments

4/1/2008 12:56:21 PM

Marvin

nice blog. very informative . =)

Marvin ph

4/1/2008 12:57:47 PM

Chris Ongsuco

At last! Nice one Rod. Keep it up.

Chris Ongsuco ph

4/1/2008 2:12:41 PM

Richard

I've been looking all around the net reading and studying about MVP but just gave me more confusions about it. With this article i understand clearly now the power of MVP!..

Richard ph

4/1/2008 2:27:33 PM

fredie savellano

Great!

fredie savellano ph

4/1/2008 4:47:19 PM

pingback

Pingback from ryangaraygay.com

Model View Presenter - Building from Scratch

ryangaraygay.com

4/1/2008 4:47:31 PM

Ryan Garaygay

Can't wait for Part II Laughing

Ryan Garaygay ph

4/2/2008 7:45:11 PM

Rod Fornillos IV

wow, this is really helpful and informative! i will be waiting for the next part...

Rod Fornillos IV ph

4/3/2008 1:12:13 AM

Rodel Dagumampan

Great article Rod. Keep them coming!

Rodel Dagumampan ph

4/4/2008 7:42:11 AM

andre

galing! Smile

andre sg

4/10/2008 6:42:04 AM

Marvin

In keeping with the Rods tradition of using real world case to explain things , Im going to make use of the same approach to ask questions (hehehe).

After discussion with the engineers , the dreaded QA Specialist , Aileen , comes into view and made this intriguing comment : " I like the way you implement the project but Im not satisfied with the way you handle security . Can you put a login screen for your app so that only authenticated users are allowed to use it?". So Chris , who wanted to go home already and eat chicken with lots of hot sauce , went back to the drawing board to come up with a solution.

Question: If a new Login UI is to be created , does it mean a new model-view-presenter is to be created for the Login task (ILoginView,ILogin,Login,LoginPresenter,LoginService)?

Question: If late in the game , Mac a McDo representative who is also a Monk , wants to use the software and requires several new features that would require new models,views and presenters (assuming the answer to question 1 is Yes) , will all these be placed in the MVP project? How will you make the project more manageable , creating several folders inside the MVP to seperate the different entities (model, view,presenter,service) or create separate Model project, View Project, Presenter Project , service Project ? Or perhaps there is a better and sexier way to do it.

Marvin ph

4/10/2008 11:09:37 AM

Leo Camalig

This is why I want to be like Rod...
Your the best parin....

Leo Camalig ph

4/10/2008 8:58:42 PM

Rod

Same cast of characters pa rin pare.. hehehe...

Thanks guys! your comments inspire me to continue sharing my knowledge... I already started part II.. keep you posted...

Rod

4/10/2008 9:26:51 PM

Rod

Hi Marvin,

Thanks for the feedback I really appreciate it.

Question 1: Yes, for small screens like login, you can use passive view. In passive view, the view is as dumb as we can possibly make it.

Question 2: There is no rule in MVP that 1 View = 1 Presenter. You can pass one or more view to a single presenter. If the views are all related you can use one presenter. Say in my current project I created a simulator that uses 3 complex controls where I created each control a view (IControlView1, etc..) and pass it to single presenter object that manipulate this views. Remember views is just a logical representation of your presentation. Remember law of cohesion.

As to the project, the answer is it depends, if McDo changes just extend the functinality of login by adding remember me or forgot password this can easily be integrated by inheritance or just simply adding new interfaces in your view. If the changes is more on the flow say what would be ne page to display if the password is invalid, etc.. this changes can be placed in the presenter.

As to organizing the project, you can group your MVP objects by creating a folder and group it by module. Say:

Root
|----- Inventory
|-- OrderModel.cs
|-- InventoryPresenter.cs
|-- InventoryService.cs

In my project I usually remove the extra Inventory namespace in OrderModel.cs, InvenotryPresenter.cs, and InventoryService.cs that way when you add the assembly you have access to all of your MVP libraries.

Also I place interfaces in my common project. that way you can use it in testing project, BLL, and DAL and to avoid cyclic reference.

Rod

4/11/2008 1:55:18 PM

Stepen Chow

Great!

Stepen Chow zw

4/17/2008 2:00:29 AM

Ben

Right on! Subscribed!!!

Ben us

4/19/2008 11:50:43 PM

kerwin

heheheheh... grabe ah ... believe na gid kmi ah ....

kerwin ph

6/14/2008 3:28:41 AM

Richard

Nice post! I noticed your EmployeeForm View class seems a bit broken in the MVP sense since it creates the EmployeePresenter.
I'm new to MVP at the moment, but thinking about this, I would probably use an ApplicationPresenter, and call Application.Run with an ApplicationContext object.
Would be keen to hear other suggestions! Thanks.

Richard gb

6/18/2008 10:01:05 PM

Rod

Hi Richard,

If we use the presenter as a launcher or context holder (ApplicationPresenter) it will defeat the purpose of the MVP pattern. MVP is often a triad - View which is the logical representation, Model as a state holder, and Presenter as the business logic or UI logic. The difference of MVP to normal 3 layer application is that we devide the presentation layer into MVP for cohesion, orthogonality, and testability of the application.

The name EmployeePresenter is just my naming convention where I use the model as the prefix(XXXPresenter). If i have an invoice form I named it InvoicePresenter, IInvoiceEntity, IInvoiceService where Invoice is the model or domain. This is to avoid confusion. for larger project I create a folder for each MVP objects that way it will nat clutter.

Thanks for your comments!
Rod

Rod

6/22/2008 7:42:28 AM

Ajit Singh

Great article and thanks a lot for the excellent accompanying code. Eagerly waiting for MVP Part 2 related to Mock Testing. Keep it up.

Ajit Singh in

7/24/2008 9:33:53 AM

Rajasekaran Moorthy

Great article.

Rajasekaran Moorthy in

8/1/2008 8:07:23 PM

Kay

Very good. Is there a VB.net version?

Kay us

8/4/2008 6:21:29 PM

Rod

Hi Guys,

Thanks for your comments. I'm still working on the part 2. Sorry about the delay, I was busy this past couple of months meeting with the client and organizing our team.

Hi Kay,

you can find online convertion tools that will help you convert the code to VB.NET. here are some of the site I found.

labs.developerfusion.co.uk/.../csharp-to-vb.aspx
http://www.kamalpatel.net/ConvertCSharp2VB.aspx

Regards,
Rod

Rod ph

8/9/2008 9:00:57 PM

Leon

great article! waiting for part 2 :-P

Leon ph

8/20/2008 5:54:59 AM

Pleb

great article,

I keep your sample project open on another monitor and use it for reference.

Any chance of expanding out the example and building the other layers? Maybe throw a few known gotcha's in too? I'd like to see how this is done, as I seem to get stuck at this step.

Pleb au

8/20/2008 11:29:25 PM

Alex

Great article! I have a question for you. I am building an application and have adopted the MVP pattern but am a bit stuck on one thing. Part of my application processes text files and my Business Object layer determines if a particular text file has already be imported and if so, I want to be able to ask the user if they want to overwrite the old with the new. If so, I want to process the file as usual but first deleting the old records. if I return to the presenter with a code that says "ask the user" who owns the creation of that message box? I don't think it should live in the presenter but I am not sure how to hook it up so that the view will display the message box and return that value back to the point in the presenter than needs the result to continue. Hope this makes a bit of sense.

Thanks for your time!
Alex

Alex us

8/21/2008 12:17:16 AM

Test

Hi Pleb,

I'll include your request in Part 2 of the article.

Hi Alex,

You are right, the owner of the creation of the Message Box is the Presentation or View, NOT the presenter. Rule of thumb - do not add reference to UI libraries in your presenter (UI libraries are System.Web, System.Windows.Forms, etc.. ).

Here is how to do it.

1. Create a view that contains the interface that will handle the delete confirmation. If you have existing view, just add it.

public interface IMyView
{
...
bool ConfirmDelete();
...
}

2. On your Presentation/View or Form add the implementation of the ConfirmDelete(). This is where the Messagebox is created.


public class MyForm: Form, IMyView
{
...
public bool ConfirmDelete()
{
return MessageBox("Overwrite?", ...) == DialogResult.Yes;
}
...

private void buttonProcessText_Click(object sender, EventArgs e)
{
_presenter.ProcessTextFile();
}
}

3. Then in your presenter you need to code the presenation logic.

public class MyPresenter
{
...

public MyPresenter(IMyView view)
{
_view = view;
}

...

public void ProcessTextFile()
{
...
if(_view.ConfirmDelete())
{
//-- DELETE FILE CODE GOES HERE
}

else
{
//-- DO NOT DELETE FILE CODE GOES HERE
}
...
}

...

}

Hope this answers your questions.

Test

8/21/2008 4:43:47 PM

Alex

Thanks! I appreciate your help.

Alex us

8/25/2008 3:21:38 AM

Jay

Nice one Rod. Very helpful and informative. I'm currently working with Model-View-Presenter and also SCS or Smart Client Shell..... Teach me Master! I want to be your padawan LOL. Laughing

Jay au

10/21/2008 1:26:10 PM

Rod

Part II is now published. See www.cerquit.com/.../...Part-II---Unit-Testing.aspx

Rock On!
Rod

Rod

2/5/2009 9:49:03 PM

Plastic Prototype

Glad to see that I'm in time for Part II.

Plastic Prototype us

2/6/2009 12:19:29 PM

Inventory Management Software

hehehe.. to many spammers Smile

Inventory Management Software gb

2/11/2009 10:33:01 AM

Windows Registry Problems

great post!!

Windows Registry Problems ph

2/12/2009 4:11:20 AM

Registry Repair Resources

Thanks for this post, I have searching this kind of information for how many times, this is really great... hope that you will continue sharing for your knowledge, I'll be back again to read some of your post...

Registry Repair Resources ph

2/16/2009 9:06:14 AM

Inventory Management Software

Hi.. thanks for sharing.. great infomation!!

Inventory Management Software us

2/23/2009 4:50:27 PM

learning selling

thanks for this rod!

learning selling us

2/28/2009 5:15:04 AM

the cash gifting riches exposed

thanks for sharing this idea.,

the cash gifting riches exposed us

3/3/2009 8:41:22 AM

learning selling

thanks for this mate!

learning selling us

3/9/2009 10:40:16 AM

cooldude055

This is cool, thanks for this one.

cooldude055 us

3/24/2009 9:09:56 AM

bolinao

Hi, i enjoy reading your website or blog. I got many ideas for my blog. Thanks for the info.

bolinao us

4/6/2009 1:17:50 PM

goodpeoplegives

Thanks for the great information.

goodpeoplegives us

4/29/2009 4:48:09 PM

Melayu Boleh

waaa... what a nice tips on your blog.. u should proud of it..

Melayu Boleh us

6/12/2009 11:09:32 AM

Melayu Boleh Satu Malaysia

great info best info

Melayu Boleh Satu Malaysia us

6/26/2009 1:41:42 PM

Borrow money online

That is great and really nice, thanks for posting that one.. keep it up!
http://www.24hpayday.com

Borrow money online us

6/30/2009 4:02:24 AM

mrazree

good article..thanks for sharing this knowledge..

mrazree us

6/30/2009 11:00:24 AM

stained glass windows

We are a group of volunteers and starting a new initiative in a community. Your blog provided us valuable information to work on. You have done a marvellous job!

stained glass windows gb

8/25/2009 9:24:50 AM

Make Money Online

Keep it up, your writing is always a joy to read that I even told my friends. Simply loving this!

Make Money Online us

8/31/2009 8:44:06 PM

Real Time Strategy

wow, this is really helpful and informative! i will be waiting for the next part...

Thanks!

Real Time Strategy us

9/7/2009 7:11:44 PM

lpn salary

cool, thanks

lpn salary us

9/15/2009 5:09:17 AM

payday online

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts.Any way Ill be subscribing to your feed and I hope you post again soon

payday online us

9/16/2009 2:19:51 PM

payday loans

Easy option to get useful information as well as share good stuff with good ideas and concepts

payday loans us

9/28/2009 4:40:46 PM

website design

Thanks for such lovely ideas as they seem to work in my project.

website design gb

10/5/2009 7:51:13 AM

Roman Shades

Thanks for sharing this tips. I think it is effective and could help mostly few of architects and engineers. I appreciate this.

Roman Shades us

10/7/2009 11:12:30 PM

how to train your dog

Have you ever considered adding more videos to your blog posts to keep the readers more entertained? I mean I just read through the entire article of yours and it was quite good but since I'm more of a visual learner,I found that to be more helpful well let me know how it turns out! I love what you guys are always up too. Such clever work and reporting! Keep up the great works guys I've added you guys to my blogroll. This is a great article thanks for sharing this informative information.. I will visit your blog regularly for some latest post.

how to train your dog us

10/8/2009 2:41:52 PM

work at home

Great job in your post here! I really have enjoyed reading this very much. will bookmark, thanks for sharing!

work at home us

10/9/2009 5:53:19 PM

Web design

I love spending time while reading your blog as it makes the time just flow.

Web design gb

10/10/2009 3:32:34 AM

work at home

The forms are so awesome, thanks for showing this.

work at home us

10/10/2009 10:06:30 AM

how to lose weight in 2 weeks

very nice and compelling post..you programmers sure is genius..

how to lose weight in 2 weeks us

10/12/2009 11:47:00 AM

web design

Thanks for the interesting blog - I really like it.

web design gb

10/16/2009 12:16:22 AM

cash loans

Nice resource. rss feed added

cash loans us

10/16/2009 3:54:24 PM

online chat software

Wonderful article, thanks for putting this together! This is obviously one great post. Thanks for the valuable information and insights you have so provided here

online chat software us

10/20/2009 9:37:04 AM

Apex Professionals LLC

I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.Thanks for sharing posts.
Regards,

Apex Professionals LLC us

10/20/2009 11:46:25 AM

dog fence

As UI-creation technologies such as ASP.NET and Windows® Forms become more and more powerful, it's common practice to let the UI layer do more than it should. Without a clear separation of responsibilities, the UI layer can often become a catch-all for logic that really belongs in other layers of the application. One design pattern, the Model View Presenter (MVP) pattern, is especially well suited to solving this problem

dog fence us

10/24/2009 9:44:02 PM

Kerja Keras Adalah Energi Kita

great article. thanks for taking the time to sharing this with us.
very useful.

Kerja Keras Adalah Energi Kita us

10/26/2009 3:44:02 PM

Kenali dan Kunjungi Objek Wisata di Pandeglang

Thanks for sharing this.

Kenali dan Kunjungi Objek Wisata di Pandeglang us

10/26/2009 4:05:46 PM

Kenali dan Kunjungi Objek Wisata di Pandeglang

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful and beneficial to your readers.

Kenali dan Kunjungi Objek Wisata di Pandeglang us

10/26/2009 9:12:45 PM

Kerja Keras Adalah Energi Kita

Hello admin, I must admit that today is my first time I visit here. However, I have found so many interesting in your blog, especially how you determine the topic. I really like it. Keep up the good work.

Kerja Keras Adalah Energi Kita us

10/28/2009 12:32:00 AM

cash loans

Just try to smile for about 2-3 mins then you can get back to work

cash loans us

10/28/2009 12:32:08 AM

online cash loans

Thank you for your help!

online cash loans us

10/29/2009 11:14:10 AM

Dimitar Keclok

Well, I just found your blog unexpectedly from the search engine. First time I saw it, I know it's a very informative blog. I got so many something new from here. Good work and thanks for that!

Dimitar Keclok us

10/30/2009 6:33:48 AM

free games online


I found that to be more helpful well let me know how it turns out! I love what you guys are always up too. Such clever work and reporting! Keep up the great works guys I've added you guys to my blogroll. This is a great article thanks for sharing this informative information.

free games online us

11/1/2009 9:56:37 PM

kenali dan kunjungi objek wisata di pandeglang

Wow guys, it's really really great info, thank you for sharing. This will help me so much in my learning.

kenali dan kunjungi objek wisata di pandeglang us

11/1/2009 11:56:24 PM

dog containment system

Thank you for the post once again, i am impressed, you have been brilliant with your posts, i am quite happy to have you in my bookmarks.

dog containment system us

11/3/2009 11:26:20 PM

scratch and dent

good post Thank for sharing

scratch and dent us

11/4/2009 12:54:59 PM

Jayne Petters

I found your blog in the search engines while I was researching for something about Model-View-Presenter, I like what you have written, your style is easy to read and follow. Have bookmarked your blog for future reffernce, Hoping to read more in the future.

[url=http://www.righttobuymortgagesuk.co.uk]right to buy mortgages[/url]

Jayne Petters gb

11/7/2009 3:24:15 PM

Oes Tsetnoc

Hello admin, I must admit that today is my first time I visit here. However, I have found so many interesting thing in your blog and I really love that. Keep up the good work!

Oes Tsetnoc us

11/7/2009 8:15:16 PM

kelowna real estate

Hello admin, I must admit that today is my first time I visit here. However, I have found so many interesting thing in your blog and I really love that. Keep up the good work!

kelowna real estate us

11/10/2009 4:05:35 PM

san diego real estate

I am very much impressed with your post. You have been brilliant with this. Good job.

san diego real estate us

11/11/2009 1:51:58 PM

bedweblog

bedweblog

bedweblog

11/12/2009 1:23:43 AM

online personal loans

Just wanted to say thanks for this.

online personal loans us

11/17/2009 1:12:42 PM

fast payday loans

Like your writing! Still you can do some things to improve it.

fast payday loans us

11/17/2009 6:29:19 PM

 debt recovery

You have been brilliant with this. Good job.

debt recovery us

11/18/2009 3:15:29 PM

Gourmet gift baskets


That's really a fantastic post ! I added to my favorite blogs list.. Thanks

Gourmet gift baskets us

11/19/2009 11:30:29 AM

Oes Tsetnoc

Many friends of mine talk about your blog anytime, and now I am here. After read a couple of your post, I must say that it's really great.

Oes Tsetnoc us

11/19/2009 11:35:22 AM

chat online

It was a very nice idea! Just wanna say thank you for the information you have shared. Just continue writing this kind of post. I will be your loyal reader. Thanks again.

chat online us

11/19/2009 5:39:37 PM

online logo design

I get so much lately it's driving me mad so any assistance is very much appreciated.

online logo design us

11/19/2009 6:00:26 PM

free laptop

As for me I would read your blog all night long but I have kids and need to share my time between your blog and them.

free laptop us

11/19/2009 6:41:48 PM

Laptop Computers

Many friends of mine talk about your blog anytime, and now I am here. After read a couple of your post, I must say that it's really great.

Laptop Computers us

11/21/2009 5:58:56 PM

denver dui attorney

I've been looking all around the net reading and studying about MVP but just gave me more confusions about it. With this article i understand clearly now the power of MVP

denver dui attorney us

11/21/2009 6:10:46 PM

kerja keras adalah energi kita

thank you for the great post and great blog engine

kerja keras adalah energi kita us

11/22/2009 1:16:29 PM

Oes Tsetnoc

thanks for this usefull informations ..
now i find what i want to know, thanks ..

Oes Tsetnoc us

11/23/2009 5:53:13 AM

Ottawa Concierge Home Services

The form you shared is a very helpful tool that can be used by small business owners who just started to make their company work. Thanks for sharing your knowledge.Just like what your bio said it was all for the younger generations.Cheers to that attitude.!

Ottawa Concierge Home Services ca

11/23/2009 11:13:49 AM

online racing games

Great, can't wait for part 2!

online racing games us

11/23/2009 8:41:09 PM

proxy sites

Keep up the good work bro.Your article is really great and I truly enjoyed reading it.Waiting for some more great articles like this from you in the coming days.

proxy sites us

11/27/2009 7:13:54 AM

Charleston Background Check

It looks that you've placed a lot of effort into your post and this world require more of these on the Internet these days. Me and my fiance thoroughly enjoyed your article. I don't really have much to say in response, I just wanted to comment to reply well done.

Charleston Background Check

11/28/2009 6:20:37 PM

Acai Berry

Pretty Interesting post. Couldnt be written any better. Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this post to him. Pretty sure he will have a good read. Thanks for sharing!

Acai Berry us

11/28/2009 10:13:40 PM

Acai Berry

Pretty Interesting post. Couldnt be written any better. Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this post to him. Pretty sure he will have a good read. Thanks for sharing!

Acai Berry us

11/30/2009 12:31:31 PM

Acai Berry

Excellent post.This was actually what I was looking for, and I am glad that I finally came here! Thanks for sharing the such information with us.

Acai Berry us

11/30/2009 2:59:20 PM

payday loans

Hmmm interesting stuff

payday loans us

11/30/2009 2:59:30 PM

payday loans

Do you make money out of this blog? just curious

payday loans us

11/30/2009 7:37:00 PM

oes tsetnoc faq

Well, I just found your blog through search engine. Actually I didn't intend to visit it before, yet after I read your article, I just can say that it's so inspiring. Thanks for making such nice article!

oes tsetnoc faq us

12/1/2009 9:44:05 PM

Dog fence

The goals of MVP are:

* Testability of the application
* Cohesion or separation of responsibility
* Orthogonality

I have note it down.I was learning about MVC and MVP when i come to this blog using Google.Much detailed and well organized content is here,thanks for your great efforts.

Dog fence us

12/2/2009 4:56:53 PM

work at home jobs

Thank you for this helpful information.

work at home jobs us

12/3/2009 7:00:59 AM

Cheap auto insurance quotes

Thanks for this post, I have searching this kind of information for how many times, this is really great... hope that you will continue sharing for your knowledge, I'll be back again to read some of your post...

Cheap auto insurance quotes us

12/3/2009 7:04:48 AM

Cheap auto insurance quotes

Thanks for this post, I have searching this kind of information for how many times, this is really great... hope that you will continue sharing for your knowledge, I'll be back again to read some of your post...

Cheap auto insurance quotes us

12/4/2009 11:18:03 PM

about oes tsetnoc

I should say that it's my first time to visit your blog, however, I can directly know that it contains so many useful thing. Keep up the good work!

about oes tsetnoc us

12/6/2009 5:37:11 AM

Reverse Cell Phone Lookup

Never seen such cool post. I read it all the way to the end. Keep them coming.

Reverse Cell Phone Lookup us

12/6/2009 7:55:28 PM

Oes Tsetnoc

I think you came up with a great idea, keep it up.

Oes Tsetnoc us

12/7/2009 4:35:39 AM

product reviews

Thats an interesting post. It was worth visiting your blog. Hope to visit again.

product reviews us

12/8/2009 3:31:15 AM

Fat Loss 4 Idiots Review

WOW your page came up first in Google. And this is what I was looking for.

Fat Loss 4 Idiots Review us

12/8/2009 9:25:50 AM

Acai Berry

Excellent post.This was actually what I was looking for, and I am glad that I finally came here! Thanks for sharing the such information with us.

Acai Berry us

12/8/2009 2:02:54 PM

oes tsetnoc seo contest

Many friends of mine talk about your blog anytime, and now I am here. After read a couple of your post, I must say that it's really great.

oes tsetnoc seo contest us

12/9/2009 11:49:27 AM

Registry Easy

Looks like an interesting blog. Will make visit again.

Registry Easy us

12/9/2009 12:26:55 PM

free cell phone

thanks

free cell phone us

12/10/2009 5:02:01 AM

Speed up windows xp

Loved reading this post.

Speed up windows xp us

12/10/2009 1:40:52 PM

Business Promotion Techniques

From low-cost business promotion techniques through web site promotion, ... Want to attract new business but have a small marketing budget or none at all?

Business Promotion Techniques in

12/12/2009 1:32:47 AM

OrangeCountyDefenseAttorney

Great article. Thanks!

OrangeCountyDefenseAttorney us

12/12/2009 9:56:33 PM

acido folico

excellent post, thank you for sharing
i love reading your blog

acido folico

12/16/2009 1:08:29 PM

Acai Berry

I am working on a project similar to this and I am getting a lot of information from yours. You have made my work a lot easier.

Acai Berry us

12/17/2009 6:40:41 AM

Colon Cleanse

Its really very good information and easily understood.

Colon Cleanse us

12/18/2009 10:15:20 PM

naked girls

holy cow that is a lot of comments and i didn't see anything about naked girls or hot sex... what is this world coming to when you don't get naked girl spam

naked girls us

12/25/2009 3:33:00 PM

hoodia super slim 400

Yeah, its so much comment and some of them does not even offer positive one.Anyway, thanks blog owner

hoodia super slim 400 gb

12/26/2009 3:18:58 AM

Acai Berry Scam

Merry Christmas admin and a Happy New Year. I will be coming back to read more of your interesting post

Acai Berry Scam us

Add comment


(Will show your Gravatar icon)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

3/10/2010 12:37:09 PM

Powered by BlogEngine.NET 1.3.0.0
Theme by Mads Kristensen

About the author

Name of author Rod Cerrada
One way to enrich world's treasure is to share your knowledge to younger generations.

E-mail me Send mail  |  LinkedIn  |  ScrumMaster

Company: www.cerquit.com


Recent posts

Pages

    Calendar

    <<  March 2010  >>
    MoTuWeThFrSaSu
    22232425262728
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    View posts in large calendar

    Authors






    Disclaimer

    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2010

    Sign in