how should the MVP pattern handle views created at runtime ?

for example

There is a mainView (that has a model and presenter) that needs to display a list, each item in the list is represented by it's own view, listItemView (which also has it's own model and presenter).

the listItemViews need to be created at run time, along with their models and presenters and they all need to be hooked up.

The solution I have come up with is to have the mainPresenter do all the creation, it creates the presenters, models and also creates the views using an abstract factory.

The mainPresenter will then hook everything up, pass the newly created view to the mainView using an AddUiEelement method I have all views implement. The mainPresenter will also have a list of listItemPresenters which it will add all the listItemPresenters it creates at runtime.

This all works as i expect it to, it also manages to separate the UI technology from the presenter as the abstract factory encapsulates all UI creation logic, however it just feels like a bodge to me, or at least inelegant.

Am i re-inventing the wheel, is this a common problem that has been solved in a better way, I would love to see a better solution.

this is all using .net winforms but i need a solution for winforms/wpf and JavaFX

1 Answer 1


It comes down to why you're creating views at runtime.

This may sound like dependency injection or immutable obsessed malarky but if your object needs A, B, and C but only A and B exist at program start up then you can't make your object until C exists. Really if there is nothing useful for your object to do when it only has A and B then really there is no point to giving it a setter for C.

Rather, I'd create a different object that takes A and B and when later passed a C it kicks out a new different object that has A, B and C and is ready to be used. That can be your view created at runtime.

Now that is a factory but notice nothing here had to be static. I just had to remember where I had put it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.