What are the tradeoffs for using 'partial view models'?
Posted
by
Kenny Evitt
on Programmers
See other posts from Programmers
or by Kenny Evitt
Published on 2014-02-05T18:23:25Z
Indexed on
2014/06/07
3:45 UTC
Read the original article
Hit count: 353
I've become aware of an itch due to some non-DRY code pertaining to view model classes in an (ASP.NET) MVC web application and I'm thinking of scratching my itch by organizing code in various 'partial view model' classes.
By partial-view-model, I'm referring to a class like a view model class in an analogous way to how partial views are like views, i.e. a way to encapsulate common info and behavior.
To strengthen the 'analogy', and to aid in visually organizing the code in my IDE, I was thinking of naming the partial-view-model classes with a _
prefix, e.g. _ParentItemViewModel
.
As a slightly more concrete example of why I'm thinking along these lines, imagine that I have a domain-model-entity class ParentItem
and the user-friendly descriptive text that identifies these items to users is complex enough that I'd like to encapsulate that code in a method in a _ParentItemViewModel
class, for which I can then include an object or a collection of objects of that class in all the view model classes for all the views that need to include a reference to a parent item, e.g. ChildItemViewModel
can have a ParentItem
property of the _ParentItemViewModel
class type, so that in my ChildItemView
view, I can use @Model.ParentItem.UserFriendlyDescription
as desired, like breadcrumbs, links, etc.
Edited 2014-02-06 09:56 -05
As a second example, imagine that I have entity classes SomeKindOfBatch
, SomeKindOfBatchDetail
, and SomeKindOfBatchDetailEvent
, and a view model class and at least one view for each of those entities. Also, the example application covers a lot more than just some-kind-of-batches, so that it wouldn't really be useful or sensible to include info about a specific some-kind-of-batch in all of the project view model classes. But, like the above example, I have some code, say for generating a string for identifying a some-kind-of-batch in a user-friendly way, and I'd like to be able to use that in several views, say as breadcrumb text or text for a link.
As a third example, I'll describe another pattern I'm currently using. I have a Contact
entity class, but it's a fat class, with dozens of properties, and at least a dozen references to other fat classes. However, a lot of view model classes need properties for referencing a specific contact and most of those need other properties for collections of contacts, e.g. possible contacts to be referenced for some kind of relationship. Most of these view model classes only need a small fraction of all of the available contact info, basically just an ID and some kind of user-friendly description (i.e. a friendly name). It seems to be pretty useful to have a 'partial view model' class for contacts that all of these other view model classes can use.
Maybe I'm just misunderstanding 'view model class' – I understand a view model class as always corresponding to a view. But maybe I'm assuming too much.
© Programmers or respective owner