Pertanyaan FSM vs menjadi / tidak sehat di Akka


Akka menyediakan dua cara yang agak tumpang tindih untuk mengelola negara aktor, Hingga Mesin Negara dan tidak menjadi / menjadi. Apa keuntungan / kekurangannya masing-masing? Kapan salah satu dari mereka harus dipilih dari yang lain?


20
2018-06-14 13:49


asal


Jawaban:


FSM adalah DSL yang memungkinkan Anda membangun lebih canggih, dapat dibaca mesin negara dari yang mungkin menggunakan API aktor inti. Anda berpotensi menunjukkan kode FSM kepada orang bisnis dan mereka dapat memvalidasi aturan bisnis.

Itu FSM DSL memungkinkan Anda menyusun berbagai hal bersama dengan lebih bersih. Sebagai contoh transisi memungkinkan Anda untuk memperhitungkan logika yang harus diduplikasi di seluruh aktor become perilaku. Anda juga dapat berlangganan aktor lain untuk diberi tahu tentang transisi yang membantu dengan pemisahan dan pengujian.

Juga timer terintegrasi dengan baik ke dalam DSL dan hal-hal seperti pembatalan ditangani dengan bersih. Coding timeout messages menggunakan scheduler memiliki sejumlah gotchas.

Sisi bawah ke FSM adalah bahwa itu adalah DSL dan sintaks baru untuk anggota tim lain untuk dicerna. Sisi atas adalah bahwa itu adalah DSL dan tingkat abstraksi yang jauh lebih tinggi. Saya pikir ambang batas agilesteel dari 2 negara adalah bagus. Tapi begitu Anda melewati 2 menyatakan manfaat FSM benar-benar menarik.

Pasti dibaca dokumen FSM dan contoh yang menyertainya kontras become dan FSM.

Satu catatan: "muncul" perilaku menggunakan unbecome - perilaku default adalah tidak menggunakan perilaku menumpuk. Ini hanya relevan dalam sejumlah kecil kasus penggunaan (yaitu, biasanya bukan mesin negara).


21
2018-06-16 05:45



Being / Unbecome sangat ringan berbeda dengan FSMs. Jadi kecuali jika Anda memiliki lebih dari 2 negara (on / off misalnya) dan / atau kebijakan perubahan negara yang rumit, saya tidak akan mengonversi Menjadi / Tidak menjadi FSM yang penuh sesak. Lain kemudian itu, saya pikir hanya ada perbedaan kecil ... Seperti misalnya FSM memberi Anda bagus dibangun di timer DSL:

setTimer("TimerName", msg, 5 seconds, repeat = true)
// ...
cancelTimer("TimerName")

Atau misalnya saya tidak yakin apakah mungkin dalam FSM untuk "kembali" ke keadaan sebelumnya, hanya ada "maju", karena Anda harus secara eksplisit menentukan negara mana yang harus dituju. Sedangkan unbecome memberi Anda persis seperti itu.


14
2018-06-14 15:15