Я сейчас играю с Scala и попытался выяснить некоторые рекомендации по дизайну классов. (Попытка Scala с недели или около того.)Занятия на основе актеров с интерфейсами или без них
С момента моего Erlang я являюсь огромным поклонником передачи сообщений и актерского программного обеспечения. В большинстве примеров Scala классы актера реализуется так:
object Foo
object Bar
class MyActor extends Actor {
def receive = {
case Foo => ...
case Bar => ...
case _ => ...
}
}
Но то, что я узнал от моего объектно-ориентированного (интерфейсов и полиморфизма) носитель говорит мне, что это понятие не очень гибкое.
MyActor может быть заменен на MyAdvancedActor, но нет контракта, который определяет, какие сообщения должна реализовать реализация MyActor.
Когда я думаю о написании актеров в Scala, я склонен писать черту, которая указывает некоторые методы. Реализация MyActor должна реализовать эти методы, в которых они могут отправлять свои собственные личные сообщения. При таком подходе мы имеем указанный интерфейс и можем заменить реализацию MyActor безопасным типом.
В мое время чтения учебников и примеров scala я не сталкивался с таким дизайном класса. Разве это не здравый смысл или есть ли лучшие способы сделать это в Scala? Или эти учебные пособия просто маленькие, чтобы охватить такую тему?
Каналы - это новая тема для меня, но я думаю, что я понимаю, что они делают. В настоящее время безопасность типов не так важна? Я думал, что это полезная функция статически типизированных языков. Чтобы ошибки могли быть обнаружены до отправки двоичного файла. – r2p2
@ r2p2: безопасность типов важна, поэтому существуют такие вещи, как типизированные каналы и [типизированные персонажи] (http://doc.akka.io/docs/akka/2.2.0/scala/typed-actors.html). , но сложно использовать актеров только в безопасном типе. Есть такие вещи, как «стать», и у вас должен быть способ ответить любому отправителю и так далее. Существует много дискуссий по этой теме, например: [Почему сообщения для аккских актеров непечатаны?] (Http://stackoverflow.com/q/5547947/406435). – senia