Presentation Model と MVVM

「MVVM」あたりを調べていると「Presentation Model」という言葉がやたら目につくので調べる。

マーチン・ファウラーさんがつぶやいていました。7年前。


MVVM is the Microsoft's world's name for the same pattern as Presentation Model. I haven't updated the article since.

マイクロソフトの「MVVM」パターンは「Presentation Model」と同じなので、記事は更新していません。

👉 Martin Fowler on Twitter: "@HerberthAmaral MVVM is the Microsoft's world's name for the same pattern as Presentation Model. I haven't updated the article since." / Twitter 

それぞれのソースを探す。

Presentation Model (Martin Fowler, 2004)

Represent the state and behavior of the presentation independently of the GUI controls used in the interface

👉 Presentation Model 

MVVM (Microsoft, 2005)

Model/View/ViewModel is a variation of Model/View/Controller (MVC) that is tailored for modern UI development platforms where the View is the responsibility of a designer rather than a classic developer. The designer is generally a more graphical, artistic focused person, and does less classic coding than a traditional developer.

👉 Introduction to Model/View/ViewModel pattern for building WPF apps – Tales from the Smart Client 

まとめ

2012年4月現在、XAMLを使用するWPFなどのテクノロジ以外で使用されるMVVMは実質Presentation Modelと変わらず、Viewの抽象化などはできない。

👉 Model View ViewModel - Wikipedia (ja) 

MVVM is a variation of Martin Fowler's Presentation Model design pattern. MVVM abstracts a view's state and behavior in the same way, but a Presentation Model abstracts a view (creates a view model) in a manner not dependent on a specific user-interface platform.

👉 Model–view–viewmodel - Wikipedia (en) 

同じと思っていいのか。


新装版 リファクタリング Martin Fowler (著), 児玉 公信 (翻訳)


SQLDelight 1.0 使い方 #2

前回でとりあえずREADMEのサンプルで使ってみました。

今回は、それを利用しての、DAO的な LocalRepository を作ります。

とりあえずおおまかな構成重視で細かいことはあとで調整していきます。


class LocalRepository(context: Context) {

  private val driver = AndroidSqliteDriver(Schema, context, "test.db")
  private val queries = Database(driver).playerQueries

  fun insert(player: GiantsPlayer) {
    queries.insert(player.number, player.name)
  }

  fun selectAll(): List<GiantsPlayer> {
    return queries.selectAll()
        .executeAsList().map {
          GiantsPlayer(it.number, it.name)
        }
  }

}


data class GiantsPlayer(
  val number: Long,
  val name: String
)

動画で雰囲気を。



最終的にはテキストでわかりやすくまとめます。

とりあえず、おおまかに。

(つづく...)

SQLDelight 1.0 使い方 #1
SQDelight の データベースバージョン