Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more

Episerver Layout Model inside the Model or outside ?

Vote:
 

With my team we are starting a new project and we are discussing architecture regarding the components like header or footer navigation. I noticed that the Alloy template uses IPageViewModel<T> interface which has a property Layout of type LayoutModel. It is solving a real problem and I think it could be a good fit for our solution.

Because this approach requests to implement a ViewModel for every model that we want to return, I started to look at other potential trade-offs with this approach and I found this article: https://marisks.net/2015/05/18/episerver-strongly-typed-layout-model-without-ipageview/.

And now I am considering a custom WebViewPage to keep a "clean" model but I feel like I might be missing some trade-offs with approach. What are your thoughts on 'Layout' components ? Do you put them inside your model or outside ?

#228480
Edited, Sep 27, 2020 17:04
Vote:
 

I don't like the IPageViewModel since then you cannot re-use your layout for pages without Episerver content. So I would rather recommend having a LayoutModel without any dependencies to Episerver content. Similar to:

// Use this model in you layout
public class LayoutModel
{
   // Properties that your layout requires
}

// Use this model in your page views
public class PageModel<TPage> : LayoutModel
   where TPage : PageData
{
   public TContent CurrentPage { get; set; }
}
#229154
Edited, Oct 08, 2020 9:22
- Oct 12, 2020 9:34
This is a very nice alternative solution. What are your thoughts on having a custom WebViewPage ?
Vote:
 

`IPageViewModel` is quite constraining you. Why would you need to implement / inherit some interfaces in order to get layout. Injected layout is decoupled.

#229190
Oct 08, 2020 22:49
- Oct 12, 2020 9:34
It makes absolute sense. What are your thoughts on having a custom WebViewPage ?
valdis - Oct 12, 2020 10:29
I see no objections against it. It helps to decouple model requirements to get some layout stuff to the views. If this is a solution for that - I would go for it.
This topic was created over six months ago and has been resolved. If you have a similar question, please create a new topic and refer to this one.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.