関数型プログラミング言語Haskell Part24
■ このスレッドは過去ログ倉庫に格納されています
0640636
2014/01/26(日) 09:26:01.57一晩開けて読みなおしてみたら、確かに意味不明だな、ごめん。
MVC アーキテクチャにおいて、ユーザーからの要請で
モデルで管理しているデータをビューへ表示することを考える。
[Model] は次の関数を公開する。
recordsSource :: (PersistMonadBackend m ~ SqlBackend, PersistQuery m) => Source m A
[View] は次の関数を公開する。
recordsSink :: (MonadIO m) => Sink A m ()
[Control] は次の関数内でソースとシンクを繋げる。
viewRecords :: (PersistMonadBackend m ~ SqlBackend, PersistQuery m) => m ()
viewRecords = recordsSource $$ recordsSink
ごく簡単にエッセンスだけ抽出するとこんな感じ。
(実際は表示方法やデータの個数などいろいろ制御するための引数があったり、
関数の定義ももう少し複雑だったりする)
本当は [Control] は [View] がどのような仕組みで
データを管理しているのか知らなくても良いようにしたいのだが、
今現状では [View] が persistent パッケージのライブラリを使っている影響が、
[Control] 側にも及んでいる(型シグネチャのコンテキストという形で)。
よって、MVC アーキテクチャなのに、[Model] と [Control] が強く結びついている。
これをちゃんと分離したいのだが、Persist + Conduit でやっている限りでは
実現は難しいのだろうか。
あれから考えてみたのだが、Persist + Conduit に限らず、
モナドを使っている限りついて回る問題ではないかと少し思えてきた・・・
■ このスレッドは過去ログ倉庫に格納されています