Amennyiben színész üzenetek terjed ki egy közös vonás?

szavazat
11

A legtöbb A helyes használata a scala (és akka) színész keretek, az emberek hajlamosak levezetni minden üzenetet egyetlen tulajdonság. Például:

trait Message
object Ping extends Message
object Pong extends Message

Azonban mindkét Scala és Akka, üzenet vétel nem gépelt egyáltalán. Van valami oka, hogy végre egy közös vonás?

A kérdést 12/06/2011 13:20
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
0

Ez nem kötelező, de ez egy OO tervezési cucc. Ez egy jobb design, hogy egy absztrakt típus az Ön alkalmazási területen üzeneteket. Így van polimorfizmus előnyöket, ha foglalkoznak üzenetek a mi alkalmazás kódját.

  
trait Message

object Ping extends Message
objet Pong extends Message

object Stop
  

Például, ha valahol az alkalmazáshoz kell foglalkozni csomó üzenet, tekintet nélkül azok sajátos típusú (Ping Pong vagy) fogja kezelni őket, mint típusú objektumok Message. Van értelme? Nem ?

Válaszolt 12/06/2011 14:16
a forrás felhasználó

szavazat
5

Ez attól függ, hogy mit próbál elérni. Például, a közelmúltban épült egy kis alkalmazás segítségével szereplők, volt többféle szereplők, valamint az irányító színész eljáró több vagy kevesebb, mint egy router. Most, a dolgozó színészek kaphat sok különböző üzeneteket, például Foo, Barés Baz. Anélkül, hogy Supertype, az irányító színész azt kell írni valamit, mint ez:

react {
    case x:Foo | x:Bar | x:Baz => worker ! x
}

Ami nyilvánvalóan feleslegesen bőbeszédű. Tehát ebben az esetben egy supertype WorkerMessagetenné sok értelme, mert egyszerűsíti a kódot:

react {
    case x:WorkerMessage => worker ! x
}

Másrészt, ez teszi az üzeneteket Foo, Barés Baznagyjából használhatatlan semmilyen más célra, mint a készülék által használt WorkerActors. Ha lenne egy üzenetet Stopvagy Initpéldául ez valószínűleg rossz, mert akkor lenne szükség, hogy újból meg az egész hely.

Tehát, ha tudja, akkor csak szereplők, nem adja át az üzeneteket körül (azaz, hogy feldolgozza azokat a saját maguk által), akkor azt hiszem, akkor lesz csak finom nélkül supertype számukra.

Azt hiszem, az oka, hogy az emberek ezt többé-kevésbé alapértelmezés az, hogy ha később módosítja a kódot nem kell létrehozni a tulajdonság utána, mert már nem az elején.

Személy szerint én mindig megpróbálják elkerülni a felesleges költségek, úgyhogy valószínűleg nem határozza meg a supertype hacsak tényleg szüksége van rá. Továbbá, én tényleg nem tudom, hogy létrehoz egy supertype hatással van-e a teljesítmény egyáltalán, de érdekes lenne tudni.

Válaszolt 12/06/2011 15:26
a forrás felhasználó

szavazat
5
  1. Mind a scala.actors(via InputChannel[T]vagy Reactor[T]), és Akka ( TypedActor) megadhat típus határait a bejövő üzeneteket;

  2. A legtöbb példa, üzenetek kiterjesztésére sealed trait. Ez kész 2 okból:

    • Ha az üzenet kezelő (részleges funkció) a színész nem terjed ki az összes üzenetet, hogy meghosszabbítja a tulajdonság, fordító generál figyelmeztetés ;

    • sealed trait csak akkor terjeszthető a forrás fájlban, ahol a tulajdonság határozza meg, és így az ügyfél nem tudja meghatározni, hogy a saját üzenetek, amelyek kiterjesztik a tulajdonság;

Válaszolt 12/06/2011 16:16
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more