--
Excellent article!
I would just add that you can improve the separation of concerns, (without over complicating it):
1. The view model should only know about view concerns, not business/model concerns. For example, use variables like `title`, `detail`, rather than `orderItem`, `itemDescription` and `itemTotal`.
2. You can make an extension of your view model to map particular/different model/business logic into your view model, such as with a convenience init, such as `title: orderItem.description`.
3. The view and view model can then be used to represent numerous business/models. For example, the `OrderDetailsRowView`'s `detail` might be used for an `orderItem.itemDescription` or an `iceCream.flavor.name`.