Is it good or useful to implement `View` and `Update` manually?

It seems that you can get two additional read-only data stores if View and Update are implemented manually instead of in closure style. In this example I use it to do recursive rendering, but I wonder if there are some other use cases?

pub struct State {}

#[derive(Debug)]
pub enum Message {}

pub struct Updater {
  // updater data
}

impl Update<State, Message> for Updater {

  fn update(&self, state: &mut State, message: Message) -> Task<Message> {
    // access updater data
  }

}

pub struct Viewer {

  // viewer data
  pub remain: i32,

}

impl<'a> View<'a, State, Message, Theme, Renderer> for Viewer {

  fn view(&self, state: &'a State) -> Element<'a, Message, Theme, Renderer> {
    // access viewer data, rendering itself
    Container::new(
      Column::new()
      .push(Text::new(format!("remain: {}", self.remain)))
      .push(
        if self.remain > 0 {
          Element::from(Viewer { remain: self.remain - 1 }.view(state))
        }
        else {
          Element::from(Text::new("No More"))
        }
      )
    )
    .padding(8_f32)
    .style(|_theme| {
      iced::widget::container::Style {
        border: Border { color: Color::WHITE, width: 1_f32, radius: Radius::new(4_f32) },
        ..Default::default()
      }
    })
    .into()
  }

}