那整個 app 要用 xamarin 重寫, 而且不能用現有所有 anroid 資源 (lib, 人力...etc). xamarin 的 commitment 也是有待考慮.
是說我也跑一次 tutorial 了,kotlin 的確有些地方讓我這 Java 開發者非常的心動。 (例如 builder, data class)
但是沒支援 Java8/Stream 讓人沮喪。然後和 Spring 合用時問題一堆1 。看大家這麼推我還以為所有 Java library/framework 都能無縫接軌咧… 原來扯到 CGLib 這類的東西 kotlin 還是很無力,但偏偏用 CGLib 的 framework 很多啊。kotlin 在這點還待時間的驗證。
另外最讓我意外的是:
fun main(args: Array<String>) {
arrayOf(1, 2, 3).forEach {
print(it);
return;
}
}
closure 裡的 return 會直接跳出 block,所以只會印出 1
。先不論這是好是壞,但這跟其他程式的行為差的有點多,移植 Java 程式時這會有一堆 bug 啊。這不該是一個講求最高 Java 合作的語言該做的選擇。
至於 Android 面,我正在等 async/await 的功能,因為這才會是真正殺手功能。Android 的程式寫起來很繁雜,但靠著 retrolambda 和 butterknife 還算過的去。但 async/await 帶來的優點就不是任何 Java library 可以做到的。
總而言之,現階段我還是選擇先等一下,等 kotlin 1.1,等 spring 支援的更好,等 async/await。
天啊!! 這東西好複雜,看了好久才知道他在說什麼。
一般來說store.dispatch應該只吃Action1 type,但是透過middleware可以包裝此dispatch變成可以吃Thunk這個型態,此型態的定義在 這裡2 ,簡單講就是一個
function(dispatch, getState)
這種型態的function。透過closure的方式,可以讓在async的地方去call這兩個redux會用到的function,來達到ajax complete的時候,去sync的呼叫dispatch來通知complete。
這個可能對於用redux的人可能會知其然但不知所以然吧,如果沒有搞懂thunk的機制,可能覺得莫名其妙吧。我同意你說的,這些abstraction不太必要,只是讓一且覺得很神奇而已,對於新手入門門檻太高了。
Redux 在文件 Async Actions1 中有說到,這時候通常用 redux trunk middleware 寫一種叫 Action Creator 的東西。儲存理應放在 Store 。
不喜歡 Redux 的地方就是這種造一大堆新的 abstraction 出來,而且也不是唯一的做法,新手不知道對不對。
side effect就是改變外面的狀態就是side effect,例如counter++就是side effect。所以以下的increase function就是有side-effect
var myObject = {
counter: 0,
increase: function() {
this.counter++;
}
}
因為他改變了counter的值了。而no side-effect的版本是
function addOne(counter) {
return counter + 1;
}
而redux做的事情是state = reducer(state);
所以這個assignment是做redux裡面,而非reducer。
事實上在functional language中,assignment is evil XD。所以他們才那麼不同意Imperative programming style。
side effect 是指 ajax call 或是 persist 到 local storage 之類的。 ajax code 是放在 action,persist 大概放 store 吧 ? 。
剩下可以 pure 處理的才可放在 reducer (大概是 model 之類的吧?)
不知有沒理解錯
ok, 所以 side effect 拆到 action 去了。感覺是將傳統的 controller 的角色再細分成 action, reduce, flow ...etc
一個page出來的時候應該有initial state,不管是page init state還是server side render的init state。
而每個event都可以改變狀態。例如click event, input event, 甚至ajax complete的event,都可以當做一個讓狀態改變的action。但是reducer只專注於input跟中間的參數,跟應該有的output。
以ajax read more的例子來說。先是ajax request到server,complete的時候增加一個append的action去reduce舊狀態(只有第一頁)到新狀態(增加ajax load的新文章),再呼叫react去render。
所以還是可以保持render跟reduce都是pure的。