แแแแแ แแแแฎแ แแ แแ แแ แกแแแแขแแ แแกแ แแแฅแแแแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแแแคแแแฃแ แแชแแแกแแแ แแฃแจแแแแแกแแแแก. แแแแคแแแฃแ แแชแแ แฌแแ แแแแแแแแแแ แแแ แแแแแ แจแแแแแแแ แแแแแ (Scala) แฃแกแแคแ แแฎแ แขแแแแแแก แแแแแงแแแแแแ. แแ แแแกแขแจแ แแแชแแแฃแแแ แแกแแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแ แแ แแแแแฎแแแแแก แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแฎแแ แชแแแแแแแก แกแฎแแแแแกแฎแแ แแกแแแฅแขแก แแแแแแแแ แแแแก แกแแแ แแ แแ แแชแแกแจแ.
แจแแกแแแแแ
แกแแแแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแจแแแแแ แแแจแแแแก, แ แแ แงแแแแ แแแแแซแ แแงแแแแแก แกแฌแแ แแแแคแแแฃแ แแชแแแก, แกแแแฅแ แแแแแแแฃแแแ แกแฎแแ แแแแแซแแแแแ. DevOps แขแแฅแแแแแแแแแ (terraform, ansible แแ แแกแแแแกแ) แฉแแแฃแแแแ แแ แแแแแแงแแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแแแแก แแแขแแแแขแฃแ แแ แแแแแ แแ แแแแกแแแแก (แฎแจแแ แแ แกแแแชแแคแแแฃแ แ แแแแแแฃแแ แแแแแซแแกแแแแก). แฉแแแ แแกแแแ แแแแแแ แแแงแแ แแแ แฌแแฃแแแแฃแแ, แ แแ แงแแแแ แกแแแแแฃแแแแแชแแ แแแแแซแ แแงแแแแแก แแแแแขแฃแ แแ แแขแแแแแแแก (แแแ แจแแ แแก แแแแแ แแแ แกแแ). แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แจแแฃแแแแกแแแแแแ แฉแแจแแแแแแ แฉแแแแก แแแแแฌแแแแแฃแ แกแแกแขแแแแจแ. JVM แกแแแงแแ แแจแ, แแ แแแแฎแแแแแก แแ แ-แแ แแ แจแแแแแแ แแก, แ แแ แแแแแแแแแแแก แแแแแ แแแ แกแแ, แ แแแแแแช แจแแแชแแแก แแ แแขแแแแแแก แจแแขแงแแแแแแแแแก, แงแแแแแแ แฃแแแ แแงแแก แแแแแงแแแแแฃแแ.
แ แแช แจแแแฎแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แขแแกแขแแ แแแแก? แ แ แแฅแแ แฃแแแ, แฉแแแ แแแแ แแฃแแแแ, แ แแ แงแแแแ แแแแแแแแแขแก แแฅแแก แแ แแแฃแแแก แขแแกแขแแแ, แกแแแแ แแแขแแแ แแชแแแก แขแแกแขแแ แแแแแ แแแแแแแแ. (แแแแกแแแแแก, แ แแ แขแแกแขแแก แจแแแแแแแแก แแฅแกแขแ แแแแแแชแแ แแแแแแฎแแ แชแแแแแ แแแจแแแแแก แแ แแแ, แฉแแแ แแกแแแ แฃแแแ แแแแแฌแแแแ แแแแแแแแแแแแแก แแแแแขแฃแ แ แแแแ แแแ แขแแกแขแแ แแแแก แแขแแแแ แแ แแแจแแแแแก แแ แแก.)
แแแขแแแ แแชแแแก แขแแกแขแแแแแ แแฃแจแแแแแกแแก แฎแจแแ แแ แแแแแแแ แแ แแ แแ แแแแแ แแแแกแแก แแแแก แแแแแงแแแแแ แงแแแแแแ แงแแแแ แแแแแซแแ. แงแแแแแคแแ แ แ แแช แฉแแแ แฃแแแ แแแแแแแแแ แแ แแก แแแแก แฃแแ แฃแแแแแกแแงแแคแแ, แ แแ แแ แแ แแ แแแแแ แแแแกแแก แแแ แแแแแแงแแแแแ แแแจแแแแแก แแ แแก. (แแแฃแฎแแแแแแ แแแแกแ, แ แแ แกแ แฃแแแแ แจแแกแแซแแแแแแแ แกแฎแแแแแกแฎแแ แแแแแซแแแแก แแแจแแแแ แกแฎแแแแแกแฎแแ แแแแกแแก แแแแแแแแแ, แแก แแแแขแแแก แแแแแแแฅแกแฃแ แแแแคแแแฃแ แแชแแแก แแ แกแแ แแฃแแแแแก แแแแแแแแแแกแ แแ แแแขแแแ แแชแแแก แขแแกแขแแแแแ แแแแแแจแแ แแแแ.) แแ แแแกแขแแก แแแแแแแแกแแแแก, แฉแแแ แแแแแ แแฃแแแแ, แ แแ แงแแแแ แแแแแซแ แแแแแแงแแแแแก แแ แแกแ แแ แแแแแ แแแแกแแก แแแแก.
แแแแคแแแฃแ แแชแแ แแแแแ แแแแ แแแแแแแชแแแกแแแ แแ แแแ. แฉแแแ แแแงแแแแแ แแแ แกแแแแก แแ แแแ แแแแก แแแแแฃแชแแแก แกแฎแแแแแกแฎแแ แแขแแแแแแก แแแกแแแแแแแ. แ แแแแ แช แฉแแแก, แแแแแแฃแ แแ แแแแคแแแฃแ แแชแแแก แกแฎแแแแแกแฎแแ แแแ แกแแแก แแแแแขแแคแแชแแ แแแ. แแ แแแแแแแแกแแ แแแแคแแแฃแ แแชแแ แแแ แกแแแก แแแแขแ แแแแก แกแแกแขแแแแจแ. แแฃ แฌแแ แแแแแแจแ แแฎแแแแ แแ แแ แแแแคแแแฃแ แแชแแแ, แแแจแแ แจแแแแแซแแแ แฃแแ แแแแ แแแแแแแงแแแแ แแแ แกแแแก แแแแแ แ. แแฃ แฉแแแ แแแงแแแแแ แฌแแ แแแแแแก แแแแ แแแกแขแแแชแแแก, แแแจแแ แแแแแญแแ แแแแ แ แแแแแแแแ
แแแแคแแแฃแ แแชแแแก แคแแแแแแแแ แแ แแแแแขแแแแแ แแขแแแแขแ แแแ แกแแแก แแแ แแ (แแแแแแแแแ, แคแแแแแแแก แกแแฎแแแ). แแ แแแแ แฉแแแ แจแแแแแซแแแ แแแแแแ แแแแแแชแแแ แแฃแกแขแ แแแแคแแแฃแ แแชแแ. แแแแแแฃแแ แแแแคแแแฃแ แแชแแแก แแแแแขแแคแแแแขแแ แ แชแแแกแแฎแแ แจแแแกแแแแแแแ แแแแแฌแแแแแฃแแ แแแแแซแแแแก, แแแ แขแแแแก, แแแ แ แ แแกแฃแ แกแแแแก แแ แแแแแแแแแแแก แแแ แกแแแแแก แแแแแ แแขแฃแ แแแแแแแแชแแแก. แแ แแแกแขแแก แแแแแแแแกแแแแก แฉแแแ แแแแแ แแฃแแแแ, แ แแ แแ แกแแแแแก แแฎแแแแ แแ แแ แแแแจแขแแแแ แแ แจแแแแแซแแแ แแแแแกแแแฆแแ แแ แแแแคแแแฃแ แแชแแ แฉแแแฃแแแแ แแแ แแแแ แกแแแ แฌแแ แขแแแแ แแแแแงแแคแแแ แกแแแ แ แแชแฎแแแก แแแแแงแแแแแแ (1.2.3).
แแแแแแแแ แแแ แแแ แแแแจแ, แแแแคแแแฃแ แแชแแแก แคแแแแแแ แแจแแแแแแ แแฅแแแแแ แฎแแแแ. แฃแคแ แ แฎแจแแ แแ แแกแแแ แฌแแ แแแแฅแแแแแ แแแแแแแแแแก แแ แแก แแ แแฆแแ แแฎแแแแแ (แแกแ แ แแ
แแ แแแกแขแจแ แฉแแแ แจแแแแกแฌแแแแแ แจแแแแแแแแ แแ แขแแคแแฅแขแแก แจแแแแแ แแแแคแแแฃแ แแชแแแก แฌแแ แแแแแแแแก แแแแแก.
แจแแแแแแแแ แแแแคแแแฃแ แแชแแ
แแ แแแแงแแคแแแแแแจแ แแแชแแแฃแแแ แกแขแแขแแแฃแ แ แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแ. แแแแแ แแแแแ แแ แ แแแ แขแแแ แกแแ แแแกแ - แแฅแ แกแแ แแแกแ แแ แแฅแ แกแแ แแแกแแก แแแแแแขแ. แแ แแ แ แกแแ แแแกแแก แกแแคแฃแซแแแแแ แแแ แแแแแ แกแแกแขแแแแก แแ แ แแแ แแแแขแ. แแ แ แแแ แแแแขแจแ แแ แแแ แกแแ แแแกแ แแแแแแแแแฃแแแ แแแแแ แแแแแซแแ, แแแแ แ แแแ แแแแขแจแ - แกแฎแแแแแกแฎแแ แแแแแซแแ.
แ แแแแ แช แฌแแกแ, แแแแแฌแแแแแฃแแ แกแแกแขแแแ แจแแแชแแแก แ แแแแแแแแ แแแแแซแก. แแฅแแแ แจแแแแซแแแแ แแแแแขแแคแแชแแ แแ แแแแแซแแแ แแแ แแแแฃแแ แขแแแแก แแแแจแแแแแแแแแแก แแแแแงแแแแแแ NodeId
:
sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeId
แแ
case class NodeId(hostName: String)
ะธะปะธ ะดะฐะถะต
object Singleton
type NodeId = Singleton.type
แแแแแซแแแ แแกแ แฃแแแแแ แกแฎแแแแแกแฎแแ แ แแแก, แแกแแแ แแฌแแ แแแแแแ แกแแ แแแกแแแก แแ แแแ แจแแ แแก แจแแแซแแแแ แแแแงแแ แแแก TCP/HTTP แแแแจแแ แแแ.
TCP แแแแจแแ แแก แแฆแกแแฌแแ แแ แฉแแแ แแแญแแ แแแแ แแแแแแฃแ แแแ แขแแก แแแแแ แ. แฉแแแ แแกแแแ แแแกแฃแ แก แแกแแฎแแ แแ แแขแแแแแ, แ แแแแแแช แแฎแแ แแแญแแ แแแแ แแ แแแ แขแแ, แ แแแ แแแแ แฌแแฃแแแแ, แ แแ แแแแแแขแแช แแ แกแแ แแแ แแช แแ แแกแ แแ แแแแแ แแ แแขแแแแแก แแงแแแแแแ. แฉแแแ แแฆแแฌแแ แ แแแแจแแ แก แจแแแแแแ แแแแกแแก แแแแแงแแแแแแ:
case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])
แกแแแแช Port
- แแฎแแแแ แแแแแ แ แแชแฎแแ Int
แแแกแแฆแแแ แแแแจแแแแแแแแแแก แแแแแแแแแแก แแแแแแแแแ:
type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]
แแแฎแแแฌแแแ แขแแแแแ
แแฎแแแแ แแแแแแแแแแ
HTTP (REST) โโแแ แแขแแแแแแแแกแแแแก, แแแ แขแแก แแแแ แแก แแแ แแ, แจแแแซแแแแ แแแแญแแ แแแ แกแแ แแแกแแก แแแแช:
type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)
แคแแแขแแแแก แขแแแแแ
แจแแแแแแแก แแ แแก แแ แแขแแแแแแก แแแแแขแแคแแชแแ แแแแกแแแแก แแแงแแแแแ แขแแแแก แแแ แแแแขแ แก, แ แแแแแแช แแ แแแแแแงแแแแแ แแแแกแจแ. แแก แแแแแฌแงแแแขแแแแแ แแแแแฌแแแฃแแแ แแแแ, แ แแ แฉแแแ แแ แแแงแแแแแ แแ แแขแแแแแแก แแแกแขแแแชแแแก แแแจแแแแแก แแ แแก, แแแแ แแ แแแกแฃแ แก แจแแแแแแแแแแ แจแแแแแฌแแแก แแ แแขแแแแแแก แแแแกแแแแแแแ. แแ แแขแแแแแแก แแแแแแแแแ, แฉแแแ แแแ แจแแแซแแแแ แจแแฃแกแแแแแ แกแแ แแแกแแก แแแแแชแแแแก แแแแแแแแแแฃแแแแแก แกแแฎแแ.
แแ แ-แแ แแ แแแแ แชแแแแแฃแแ แแ แแขแแแแแ แแ แแก REST API Json แกแแ แแแแแแแชแแแ:
sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]
แกแแแแช RequestMessage
- แแแแฎแแแแแก แขแแแ, ResponseMessage
- แแแกแฃแฎแแก แขแแแ.
แ แ แแฅแแ แฃแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแแงแแแแ แกแฎแแ แแ แแขแแแแแแก แแฆแฌแแ แแแแแแแ, แ แแแแแแแช แฃแแ แฃแแแแแงแแคแแ แฉแแแ แกแแญแแ แ แแฆแฌแแ แแแแแแก แกแแแฃแกแขแแก.
แแ แแแกแขแแก แแแแแแแแกแแแแก แฉแแแ แแแแแแแงแแแแแ แแ แแขแแแแแแก แแแแแ แขแแแแแฃแ แแแ แกแแแก:
sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]
แแฅ แแแแฎแแแแ แแ แแก แกแขแ แแฅแแแ, แ แแแแแแช แแแ แแฃแแแ url-แแ แแ แแแกแฃแฎแ แแ แแก แแแแ แฃแแแแฃแแ แกแขแ แแฅแแแ HTTP แแแกแฃแฎแแก แกแฎแแฃแแจแ.
แกแแ แแแกแแก แแแแคแแแฃแ แแชแแ แแฆแฌแแ แแแแ แกแแ แแแกแแก แกแแฎแแแแ, แแแ แขแแแแ แแ แแแแแแแแแแฃแแแแแแแ. แแก แแแแแแแขแแแ แจแแแซแแแแ แฌแแ แแแแแแแแแ แแงแแก Scala-แจแ แ แแแแแแแแ แแแแ (แแแแแแแแแ, HList
-s, แแแแแแ แฃแแ แแแแแชแแแแ แขแแแแแ). แแ แแแกแขแแก แแแแแแแแกแแแแก, แฉแแแ แแแแแแแงแแแแแ แขแแ แขแแก แจแแแแแแก แแ แฌแแ แแแแแแแแแ แแแแฃแแแแก trait
'แแ. (แขแแ แขแแก แแแแฃแจแ แแ แแ แแก แแ แแแแแแแแก แแฃแชแแแแแแแ แแแแแแแขแ. แแก แฃแแ แแแแ แแ แ-แแ แแ แจแแกแแซแแ แแแแฎแแ แชแแแแแแแ.)
แกแแ แแแกแแแก แจแแ แแก แแแแแแแแแแฃแแแแแแ แจแแแซแแแแ แแงแแก แฌแแ แแแแแแแแแ, แ แแแแ แช แแแแแแแแ, แ แแแแแแแช แแแ แฃแแแแแ แแแ แขแแแก EndPoint
แกแฎแแ แแแแแซแแแแก:
type EchoProtocol[A] = SimpleHttpGetRest[A, A]
trait EchoConfig[A] extends ServiceConfig {
def portNumber: PortNumber = 8081
def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
}
แแฅแ แกแแ แแแกแแก แจแแกแแฅแแแแแแ แกแแญแแ แแ แแฎแแแแ แแแ แขแแก แแแแแ แ แแ แแแแก แแแแแแแแ, แ แแ แแแ แขแ แแฎแแ แก แฃแญแแ แก แแฅแ แแ แแขแแแแแก. แฉแแแ แจแแแซแแแแ แแ แแแแแแแแแ แแขแแ แแแแแ แแขแฃแแ แแแ แขแ, แ แแแแแ... แแแแกแแแแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแชแฎแแแแ แแแแแแแแ แแแแฎแแ แชแแแแแแแก แแแ แแจแ (แแแกแขแ แแฅแขแฃแแ แแแแแแแแ). แแ แจแแแแฎแแแแแจแ, แแแแแ แแขแฃแแ แแแแคแแแฃแ แแชแแแก แจแแฅแแแแกแแก, แจแแแแแแแแแ แแแแแแฎแแแก แแแกแขแ แแฅแขแฃแแ แแแแแแแก แแแแฎแแ แชแแแแแแแก แแ แแแ แขแแก แแแแ แแก แแแฌแแแแแแก. แแแแแแแแ แฉแแแ แแแแแแฎแแ แชแแแแแ แแแแแแ, แแแแแ แแขแฃแแ แแแแคแแแฃแ แแชแแแก แจแแฅแแแแกแแก แจแแแซแแแแ แแ แแแแฃแแแแแ แกแฎแแ แแแ แขแ. แแแแแงแแแแแฃแแ แแฅแแแแ แแแแฃแแแกแฎแแแแ แแแแจแแแแแแแ.
แแแแแแขแแก แแแแคแแแฃแ แแชแแแจแ แฉแแแ แแแชแฎแแแแแ แแแแแแแแแแฃแแแแแก แแฅแ แกแแ แแแกแแ:
trait EchoClientConfig[A] {
def testMessage: String = "test"
def pollInterval: FiniteDuration
def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
}
แแแแแแแแแแฃแแแแ แแแแแ แขแแแแกแแ, แ แแแแ แช แแฅแกแแแ แขแแ แแแฃแแ แกแแ แแแกแ echoService
. แแแ แซแแ, echo แแแแแแขแจแ แฉแแแ แแแแฎแแแ แแแแแ แแ แแขแแแแแก. แแแแขแแ, แแ แ แกแแ แแแกแแก แจแแแ แแแแแกแแก, แจแแแแแซแแแ แแแ แฌแแฃแแแแฃแแ แแแงแแ, แ แแ แงแแแแแคแแ แ แกแฌแแ แแ แแแฃแจแแแแแก.
แกแแ แแแกแแแแก แแแแฎแแ แชแแแแแแ
แกแแ แแแกแแก แแแกแแฌแงแแแแ แแ แจแแกแแฉแแ แแแแแ แกแแญแแ แแ แคแฃแแฅแชแแ. (แกแแ แแแกแแก แจแแฉแแ แแแแก แจแแกแแซแแแแแแแ แแแแแแฌแงแแแขแแ แขแแกแขแแ แแแแกแแแแก.) แแแแแ แแ แกแแแแแก แ แแแแแแแแ แแแ แแแแขแ แแกแแแ แคแฃแแฅแชแแแก แแแแกแแฎแแ แชแแแแแแแแ (แแแแแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแแงแแแแ แขแแแแก แแแแกแแแ แแแแคแแแฃแ แแชแแแก แขแแแแ แแแงแ แแแแแแ). แแ แแแกแขแแก แแแแแแแแกแแแแก แฉแแแ แแแแแแแงแแแแแ แขแแ แขแแก แจแแแแแแก. แฉแแแ แฌแแ แแแแแแแแแ แกแแ แแแกแก แแแแกแแก แแแแแงแแแแแแ cats.Resource
, แแแแขแแ แแก แแแแกแ แฃแแแ แแซแแแแ แกแแจแฃแแแแแแแก แแ แแแแแแแแแก แจแแแแฎแแแแแจแ แ แแกแฃแ แกแแแแก แแแแแแแกแฃแคแแแแแก แฃแกแแคแ แแฎแแ แแแ แแแขแแ แแแแกแแแแก. แ แแกแฃแ แกแแก แแแกแแฆแแแแ, แฉแแแ แฃแแแ แแแแแฌแแแแ แแแแคแแแฃแ แแชแแ แแ แแแ แแแจแแแแแก แแแแขแแฅแกแขแ. แกแแ แแแกแแก แแแจแแแแแก แคแฃแแฅแชแแ แจแแแซแแแแ แแกแ แแแแแแงแฃแ แแแแแแก:
type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]
trait ServiceImpl[F[_]] {
type Config
def resource(
implicit
resolver: AddressResolver[F],
timer: Timer[F],
contextShift: ContextShift[F],
ec: ExecutionContext,
applicative: Applicative[F]
): ResourceReader[F, Config, Unit]
}
แกแแแแช
Config
โ แแ แกแแ แแแกแแก แแแแคแแแฃแ แแชแแแก แขแแแAddressResolver
โ แแแจแแแแแก แแแแแฅแขแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแ แกแฎแแ แแแแแซแแแแก แแแกแแแแ แแแแ (แแฎ. แฅแแแแแ)
แแ แกแฎแแ แขแแแแแ แแแแแแแแแแแแแ cats
:
F[_]
- แแคแแฅแขแแก แขแแแ (แฃแแแ แขแแแแก แจแแแแฎแแแแแจแF[A]
แจแแแซแแแแ แฃแแ แแแแ แคแฃแแฅแชแแ แแงแแก() => A
. แแ แแแกแขแจแ แฉแแแ แแแแแแแงแแแแแcats.IO
.)Reader[A,B]
- แแแข-แแแแแแแแ แคแฃแแฅแชแแแก แกแแแแแแแA => B
cats.Resource
- แ แแกแฃแ แกแ, แ แแแแแก แแแฆแแแ แแ แแแแแจแแแแ แจแแกแแซแแแแแแแTimer
โ แขแแแแแ แ ( แกแแจแฃแแแแแแก แแแซแแแแ แชแแขแ แฎแแแ แแแแซแแแแ แแ แแแแแแแ แแ แแแก แแแขแแ แแแแแแ)ContextShift
- แแแแแแแฃแ แExecutionContext
Applicative
โ แแคแแฅแขแแก แขแแแแก แแแแกแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแแจแแ แแ แแแแแแแแฃแแแฃแ แ แแคแแฅแขแแแ (แแแแฅแแแก แแแแแแ). แฃแคแ แ แ แแฃแ แแแแแแแชแแแแจแ, แ แแแแ แช แฉแแแก, แฃแแแแแกแแ แแแแแงแแแแแMonad
/ConcurrentEffect
.
แแ แคแฃแแฅแชแแแก แฎแแแแแฌแแ แแก แแแแแงแแแแแแ แฉแแแ แจแแแแแซแแแ แ แแแแแแแแ แกแแ แแแกแแก แแแแฎแแ แชแแแแแแ. แแแแแแแแแ, แกแแ แแแกแ, แ แแแแแแช แแ แแคแแ แก แแแแแแแก:
trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
type Config <: Any
def resource(...): ResourceReader[F, Config, Unit] =
Reader(_ => Resource.pure[F, Unit](()))
}
(แฒกแ.
ะธ
แแแแแซแ แแ แแก แแแแแฅแขแ, แ แแแแแกแแช แจแแฃแซแแแ แ แแแแแแแแ แกแแ แแแกแแก แแแจแแแแ (แ แแกแฃแ แกแแแแก แฏแแญแแแก แแแจแแแแ แฃแแ แฃแแแแแงแแคแแแแ แขแแ แขแแก แแแแฃแจแแ):
object SingleNodeImpl extends ZeroServiceImpl[IO]
with EchoServiceService
with EchoClientService
with FiniteDurationLifecycleServiceImpl
{
type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}
แแแฎแแแ แแแแแแแแแกแฌแแแแ, แ แแ แฉแแแ แแแแฃแกแขแแแ แแแแคแแแฃแ แแชแแแก แแฃแกแข แขแแแก, แ แแแแแแช แกแแญแแ แแ แแ แแแแแซแแกแแแแก. แแฃ แแแแแแแแฌแงแแแแ แแแแแ แแขแฃแแ แกแแ แแแกแแก แแแแ แแแแฎแแแแแแ แแแแคแแแฃแ แแชแแแก แแ แ-แแ แแ แขแแแแก แแแแแแแแ, แแฅแแแแ แแแแแแแแชแแแก แจแแชแแแแ. แแกแแแ, แฉแแแ แแแ แจแแแซแแแแ แแแแแซแแก แแแฌแงแแแแก, แแฃ แแ แแแแแฌแแแแแ แจแแกแแแแแแกแ แขแแแแก แ แแแแแแแ แแแแแฅแขแก แงแแแแ แกแแญแแ แ แแแแแชแแแแ.
แฐแแกแขแแก แกแแฎแแแแก แ แแแแแฃแชแแ
แแแกแขแแแชแแฃแ แฐแแกแขแแแ แแแกแแแแแจแแ แแแแแ, แฉแแแ แแแญแแ แแแแ แ แแแแฃแ แ IP แแแกแแแแ แแ. แจแแกแแซแแแแแแแ, แ แแ แแแกแแแแ แแ แแแฎแแแแ แชแแแแแแ แแแแแแแแแแแ, แแแแ แ แแแแแ แฉแแแ แแแแคแแแฃแ แแชแแ. แแกแ แ แแ, แฉแแแ แแแญแแ แแแแ แคแฃแแฅแชแแ, แ แแแแแแช แแกแแฎแแแก แแแแแซแแก ID แแแกแแแแ แแก:
case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}
แแ แคแฃแแฅแชแแแก แแแแฎแแ แชแแแแแแแก แ แแแแแแแแ แแแ แแ แกแแแแแก:
- แแฃ แแแกแแแแ แแแแ แแแแ แชแแแแแแแแ แแแฎแแแแ แชแแแแแแ แฉแแแแแแแก, แแแจแแ แจแแแแแซแแแ Scala แแแแแก แแแแแ แแ แแแ
แแแกแแแแ แแแแ แแ แจแแแแแ แแแฃแจแแแ build. แแก แจแแแแ แแแแแก แแ แแฌแแ แแแแแก แขแแกแขแแแก.
แแ แจแแแแฎแแแแแจแ, แคแฃแแฅแชแแ แชแแแแแแ แแฅแแแแ แกแขแแขแแแฃแ แแ แแ แจแแแซแแแแ แฌแแ แแแแแแแแแ แแงแแก แแแแจแ, แ แแแแ แช แ แฃแแแแแก แกแแฎแแMap[NodeId, NodeAddress]
. - แแแแแแ แ แจแแแแฎแแแแแจแ, แคแแฅแขแแแ แแแ แแแกแแแแ แแ แชแแแแแแแ แแฎแแแแ แแแแแซแแก แแแฌแงแแแแก แจแแแแแ.
แแ แจแแแแฎแแแแแจแ, แฉแแแ แจแแแแแซแแแ แแแแแแฎแแ แชแแแแแ โแแฆแแแฉแแแแก แกแแ แแแกแโ, แ แแแแแแช แแฃแจแแแแก แกแฎแแ แแแแแซแแแแก แฌแแ แแ แงแแแแ แแแแแซแ แแแ แแแแกแขแ แแ แแแแ แแ แกแแ แแแกแจแ แแ แแแแแฎแแแก แกแฎแแ แแแแแซแแแแก แแแกแแแแ แแแแก. - แแฃ แจแแแแแซแแแ แจแแแชแแแแแ
/etc/hosts
, แแแจแแ แจแแแแซแแแแ แแแแแแงแแแแ แฌแแแแกแฌแแ แแแแกแแแฆแแ แฃแแ แฐแแกแขแแแแก แกแแฎแแแแแ (แ แแแแ แแชแแmy-project-main-node
ะธecho-backend
) แแ แฃแแ แแแแ แแแแแแแจแแ แแ แแก แกแแฎแแแแแ
แแแแแแแแแแก แแ แแก IP แแแกแแแแ แแแแแ.
แแ แแแกแขแจแ แฉแแแ แแ แแแแแแฎแแแแแ แแ แจแแแแฎแแแแแแก แฃแคแ แ แแแขแแแฃแ แแ. แฒฉแแแแแแแก
แกแแแแแแจแแแแแก แแแแแแแแจแ, แงแแแแ แแแแแซแก แแฅแแแแ แแแแแ IP แแแกแแแแ แแ - 127.0.0.1
.
แจแแแแแแ, แฉแแแ แแแแแแฎแแแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแ แแแ แแแแขแก:
- แงแแแแ แกแแ แแแกแแก แแแแแแแกแแแ แแ แ แแแแแซแแ.
- แแ แแฅแ แกแแ แแแกแแกแ แแ แแฅแ แแแแแแขแแก แแแแแแแกแแแ แกแฎแแแแแกแฎแแ แแแแแซแแ.
แแแแคแแแฃแ แแชแแ แแแแกแแแแก
แแ แแ แแแแแซแแก แแแแคแแแฃแ แแชแแ
object SingleNodeConfig extends EchoConfig[String]
with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
case object Singleton // identifier of the single node
// configuration of server
type NodeId = Singleton.type
def nodeId = Singleton
/** Type safe service port specification. */
override def portNumber: PortNumber = 8088
// configuration of client
/** We'll use the service provided by the same host. */
def echoServiceDependency = echoService
override def testMessage: UrlPathElement = "hello"
def pollInterval: FiniteDuration = 1.second
// lifecycle controller configuration
def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}
แแแแแฅแขแ แแฎแแ แชแแแแแแก แ แแแแ แช แแแแแแขแแก, แแกแแแ แกแแ แแแ แแก แแแแคแแแฃแ แแชแแแก. แแกแแแ แแแแแแงแแแแแ แแ แแแก แกแแชแแชแฎแแแก แแแแคแแแฃแ แแชแแ แแกแ, แ แแ แแแขแแ แแแแแก แจแแแแแ lifetime
แแ แแแ แแแแก แจแแฌแงแแแขแ. (Ctrl-C แแกแแแ แแฃแจแแแแก แแ แแแแแแกแฃแคแแแแก แงแแแแ แ แแกแฃแ แกแก แกแฌแแ แแ.)
แแแแคแแแฃแ แแชแแแกแ แแ แแแแฎแแ แชแแแแแแแก แแแฎแแกแแแแแแแแแแก แแแแแ แแแแ แแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แกแแกแขแแแแก แจแแกแแฅแแแแแแ, แ แแแแแแช แจแแแแแแ
แแ แ แแแแแซแแก แแแแคแแแฃแ แแชแแ
object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
{
type NodeId = NodeIdImpl
def nodeId = NodeServer
override def portNumber: PortNumber = 8080
}
object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
// NB! dependency specification
def echoServiceDependency = NodeServerConfig.echoService
def pollInterval: FiniteDuration = 1.second
def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.
def testMessage: String = "dolly"
}
แฒแแแจแแแแแแแแแ! แงแฃแ แแแฆแแแ แแแแฅแชแแแ แ แแแแ แแ แแก แแแแแแจแแ แแแฃแแ แกแแ แแแกแแแ. แฉแแแ แแแแฃแกแขแแแ แกแแ แแแกแก, แ แแแแแแช แแแแฎแแ แชแแแแแแฃแแแ แแ แแ แแแแแซแแก แแแแ , แ แแแแ แช แกแฎแแ แแแแแซแแก แแแแแแแแแแฃแแแแแก แแแแแแแก แแแแฎแแ แชแแแแแแ. แแแแแแแแแแฃแแแแแก แขแแแก แแแแฌแแแแก แจแแแแแแแแแ, แ แแแแแ แจแแแชแแแก แแ แแขแแแแแแก แขแแแก. แแแจแแแแแกแแก, แแแแแแแแแแฃแแแแ แจแแแชแแแก แกแฌแแ แกแแแแแแ แแแแแซแแก ID-แก. แแ แกแฅแแแแก แฌแงแแแแแแ, แฉแแแ แแฃแกแขแแ แแ แแฎแแ แแแแฃแกแขแแแ แแแ แขแแก แแแแแ แก แแ แงแแแแแแแแก แแแ แแแขแแ แแแฃแแ แแแแฅแแก แกแฌแแ แ แแแ แขแแก แแแแแแแแ.
แแ แ แกแแกแขแแแแก แแแแแซแแก แแแแแ แแแ
แแ แแแแคแแแฃแ แแชแแแกแแแแก, แฉแแแ แแแงแแแแแ แแแแแ แกแแ แแแกแแก แแแแแแแแแขแแชแแแก แชแแแแแแแแแแก แแแ แแจแ. แแ แแแแแ แแ แแแแกแฎแแแแแแ แแกแแ, แ แแ แแฎแแ แแแแฅแแก แแ แ แแแแแฅแขแ, แ แแแแแแแช แแฎแแ แชแแแแแแแ แกแฎแแแแแกแฎแแ แกแแ แแแกแแแแก แแแแแแแฅแขแก:
object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
type Config = EchoConfig[String] with SigTermLifecycleConfig
}
object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
}
แแแ แแแแ แแแแแซแ แแฎแแ แชแแแแแแก แกแแ แแแ แก แแ แกแญแแ แแแแ แแฎแแแแ แกแแ แแแ แแก แแแแคแแแฃแ แแชแแ. แแแแ แ แแแแแซแ แแฎแแ แชแแแแแแก แแแแแแขแก แแ แแงแแแแแก แแแแคแแแฃแ แแชแแแก แกแฎแแแแแกแฎแแ แแแฌแแแก. แแกแแแ แแ แแแ แแแแแซแก แกแญแแ แแแแ แฃแฌแงแแแขแ แแแ แแแ. แกแแ แแแ แแก แแแแแซแ แแฃแจแแแแก แแแแฃแกแแแฆแแ แแแ แแแแแ, แกแแแแ แแ แจแแฉแแ แแแแ SIGTERM
'om, แแ แแแแแแขแแก แแแแแซแ แฌแงแแแแ แแแ แแแแฃแแ แแ แแแก แจแแแแแ. แฒกแ.
แแแแแแแแ แแแแก แแแแแแ แแ แแชแแกแ
แแแแฎแแ, แ แแแแ แแแฅแแแแแแก แแก แแแแคแแแฃแ แแชแแแก แแแแแแแ แแแแแแแแ แแแแก แกแแแ แแ แแ แแชแแกแแ.
แแแแคแแแฃแ แแชแแ แจแแแแแแแแ แแฅแแแแ แแแแแ แฉแแ แแแแแแ แแ แแแ แแ แฌแแ แแแแฅแแแแแ แแ แขแแคแแฅแขแ (.jar). แ แแแแ แช แฉแแแก, แแแ แ แแฅแแก แแแแคแแแฃแ แแชแแแก แชแแแแ แแ แขแแคแแฅแขแจแ แแแแแแกแแแแก. แแก แแแแขแแ แฎแแแแ, แ แแ แฉแแแ แจแแแแแซแแแ แแแฅแแแแแก แแ แแแแแ แแแแคแแแฃแ แแชแแ แแแแแ แแแแแก แกแแคแฃแซแแแแแ. แแแแแ แแ แแฎแแ, แจแแกแแซแแแแแแแ แกแฎแแแแแกแฎแแ แแแแคแแแฃแ แแชแแแก แคแแแแแแแแแก แจแแกแแแแแแกแ แแ แขแแคแแฅแขแแแแก แแแแแ แแ แแแ. แแแแแแแแแแแแแก แแแแแ แแขแฃแ แแแ แกแแแแแ แแแแแแแแแแฃแแแแแแ แแแแฎแแแ แแแแคแแแฃแ แแชแแแกแแแ แแ แแแ แแ แแก แแแ แกแแแแ แแแแฎแแแ แกแแแฃแแแแแ, แ แแแแกแแช แฉแแแ แแแแแแฌแงแแแขแ แแแแคแแแฃแ แแชแแแก แแ แแแ แกแแแก แแแแแแแกแแแแก.
แแแแแกแแแแ แ แแแแคแแแฃแ แแชแแแก แชแแแแแแแ แแฅแชแแแ แแแแแก แจแแชแแแแ. แแ แแแแขแแ, แแแแแแฃแแ
แชแแแแแแแ แแแคแแ แฃแแ แแฅแแแแ แแแ แแแแฃแ แ แฎแแ แแกแฎแแก แฃแแ แฃแแแแแงแแคแแก แแ แแชแแกแแ:
แแแแแแ แจแแชแแแแแแแก แขแ แแแแ แจแ -> PR -> แแแแแฎแแแแ -> แจแแ แฌแงแแ แจแแกแแแแแแก แคแแแแแแแแแแ ->
แแแขแแแ แแชแแ -> แแแแแแแแแ
แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแฎแแ แชแแแแแแแก แซแแ แแแแแ แจแแแแแแแแ:
-
แแแแคแแแฃแ แแชแแ แแแแแแแแแแ แฃแแ แแฅแแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แงแแแแ แแแแแซแจแ. แแแแก แแแแ, แ แแ แงแแแแ แแแแแซแ แแฆแแแก แแ แแกแ แแ แแแแแ แแแแคแแแฃแ แแชแแแก แแ แแ แฌแงแแ แแแแ.
-
แแ แแแแแแฃแ แแ แแแแคแแแฃแ แแชแแแก แจแแชแแแ แแฎแแแแ แแ แ แแแแแซแจแ. แแแแขแแ, "แแแแคแแแฃแ แแชแแแก แแ แแคแขแ" แแแแแแแแ แกแแแแ แแฃแแแ.
-
แฃแคแ แ แ แแฃแแ แฎแแแแ แแแแคแแแฃแ แแชแแแจแ แแชแแ แ แชแแแแแแแแแแก แจแแขแแแ.
-
แแแแคแแแฃแ แแชแแแก แชแแแแแแแแแแก แฃแแแขแแกแแแ แแแแฎแแ แชแแแแแแแ แแแแแแแแ แแแแก แกแแแ แแ แแ แแชแแกแแก แคแแ แแแแแจแ แแ แแฅแแแแแแแแ แแแ แแแแฎแแแแแก.
แแญแแ แแแแ แชแแแแ แกแแชแแแ แฌแแ แแแแแแก แแแแคแแแฃแ แแชแแแก แจแแกแแแแฎแแ? แแก แแแแคแแแฃแ แแชแแ แจแแแซแแแแ แจแแแชแแแแแก แแแ แแแแแก แแ แกแฎแแ แกแแแกแแขแแฃแ แแแคแแ แแแชแแแก, แ แแแแแแแแช แฉแแแ แแแกแฃแ แก แจแแแฆแฃแแแก แฌแแแแแ. แแแแก แกแแคแฃแซแแแแแ, แ แแแแ แช แฉแแแก, แแแ แ แแฅแแก แกแแแแแแ แแแแคแแแฃแ แแชแแแก แชแแแแ แกแแชแแแจแ แจแแแแฎแแแก. แจแแแแซแแแแ แแแแคแแแฃแ แแชแแ แแแงแแ แแ แแแฌแแแแ โ แแ แแ แจแแแชแแแก แกแแฏแแ แแ แฎแแแแแกแแฌแแแแ แแแแคแแแฃแ แแชแแแก แแแ แแแแขแ แแแก แแ แแ แแ แจแแแฆแฃแแฃแ แแแ แแแแขแ แแแก. แแก แกแแจแฃแแแแแแก แแแกแชแแแก แแแแแแแแแ แแแแก แฃแแแขแแกแแแแก แฐแฅแแแแแก แฌแแแแแ แกแแแ แแ แแแ แแแแขแ แแแแ. แแ แแแแชแแแแแแแแแก แแแฆแฌแแแ แแแ แขแแแแ แแแแฃแแแกแฎแแแแ แแแแจแแแแแแแแแแก แจแแแชแแแแ แจแฃแแแแแฃแ แ แแแฎแแกแแแแแแแแแแก แแแแแงแแแแแแ.
แจแแกแแซแแ แแแ แแแชแแแแ
แจแแแแชแแแแ แจแแแแแแ แแ แจแแแแแแแแ แแแแคแแแฃแ แแชแแ แ แแแแแแแแ แกแแแ แแ แแแขแแ แแแขแแแแก:
- แขแแฅแกแขแฃแ แ แคแแแแ แกแแแแแแ แแแแฅแแแแแ.
- แแแกแแฆแแแแก แฆแแ แแแฃแแแแแก แชแแแขแ แแแแแแแฃแแ แแแฆแแแแ (
etcd
/zookeeper
). - แแ แแชแแกแแก แแแแแแแแแขแแแ, แ แแแแแแ แฎแแแแฎแแ แแแแคแแแฃแ แแชแแ/แแแแแขแแแ แแแ แจแแกแแซแแแแแแแ แแ แแชแแกแแก แแแแแขแแแ แแแแก แแแ แแจแ.
- แแแแคแแแฃแ แแชแแแก แจแแแแฎแแ แแ แขแแคแแฅแขแแกแ แแ แแแ แกแแแก แแแแขแ แแแแก แแแ แแ.
แขแแฅแกแขแฃแ แ แคแแแแแแ แแซแแแแ แแแแจแแแแแแแแ แแแฅแแแแแแแก แแชแแ แ แชแแแแแแแแแแก แแแแแกแแแ แแกแแ. แกแแกแขแแแแก แแแแแแแกแขแ แแขแแ แก แจแแฃแซแแแ แจแแแแแแก แแแกแขแแแชแแฃแ แแแแแซแจแ, แจแแแขแแแแก แชแแแแแแแแแ แจแแกแแแแแแก แคแแแแแแจแ แแ แแแแแขแแแ แแแก แกแแ แแแกแ. แแฃแแชแ, แแแแ แกแแกแขแแแแแแกแแแแก, แแกแแแ แแแฅแแแแแแ แจแแแซแแแแ แแ แแงแแก แกแแกแฃแ แแแแ. แแแแฎแแ แชแแแแแแฃแแ แชแแแแแแแแแ แกแฎแแ แกแแกแขแแแแแจแ แแแแแก แแ แขแแแแแก. แชแแแแแแแแแก แแ แแแแ แแแแแฎแแแแแก. แซแแแแแ แแแแก แแแแแแแ, แแแแแ แแขแฃแแแ แแแ แแ แ แ แแแแแแแ แแแแแแแ แชแแแแแแแแแ. แชแแแแแแแแแ แแ แแ แแก แแแแแชแแแแ. แแฃ แกแแกแขแแแ แแแแแฌแแแแแฃแแแ, แแแจแแ แแแแแแแกแขแ แแขแแ แก แจแแแซแแแแ แแแแแแฌแงแแแก แกแฎแแ แแแแแซแแแแ แจแแกแแแแแแกแ แชแแแแแแแแก แจแแขแแแ.
(แแกแแแ แฃแแแ แแฆแแแแจแแแก, แ แแ แแแแแแแแ แแแฃแแ แแแแคแแแฃแ แแชแแแก แแแแแงแแแแแ แแ แฎแฃแ แแแก แกแแแแแแแแแ แขแแฅแกแขแฃแ แ แคแแแแแแแก แแแแแงแแแแแแก แจแแกแแซแแแแแแแแก. แกแแแแแ แแกแ แแฅแแแแ แแแ แกแแ แแก แแ แแแแแแแขแแ แแก แแแแแขแแแ, แ แแแแแแช แแแแแแแฃแจแแแแแก แแแแแ แขแแแก, แ แแแแ แช แแแแแแแแแแก. Config
แแ แจแแแแซแแแแ แแแแแแงแแแแ แขแแฅแกแขแฃแ แ แคแแแแแแ. แแฅแแแแ แแแฃแงแแแแแแแแ แแ แแแแแ, แ แแ แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแฅแแแ แกแแกแขแแแแก แกแแ แแฃแแ แแแ แแแแฃแแฌแแแแ แแแแแแแแ, แแแแ แ แกแแกแขแแแแก แกแแ แแฃแแ, แ แแแแแแช แแงแแแแแก แขแแฅแกแขแฃแ แคแแแแแแก, แ แแแแแ แขแแฅแกแขแฃแ แคแแแแแแก แแแแแขแแแแแ แแแแ แกแญแแ แแแแ.)
แแแกแแฆแแแแก แแแแจแแแแแแแแก แชแแแขแ แแแแแแแฃแแ แแแฆแแแแ แแแ แแ แแแฅแแแแแแแ แแแแแฌแแแแแฃแแ แแแแแแแชแแแก แแแขแ แแแ แแแแขแ แแแแก แแแแแฌแแแแแแกแแแแก. แฉแแแ แฃแแแ แแแแแแฌแงแแแขแแ แ แ แแ แแก แแแแคแแแฃแ แแชแแแก แแแ แแแแขแ แแแ แแ แ แ แแ แแก แแฎแแแแ แแแแแชแแแแแ. แแแแแ, แแแแฅแแก แคแฃแแฅแชแแ C => A => B
แแ แแแ แแแแขแ แแแ C
แแจแแแแแแ แแชแแแแแ แแ แแแแแชแแแแแ A
- แฎแจแแ แแ. แแ แจแแแแฎแแแแแจแ แจแแแแแซแแแ แแแฅแแแ, แ แแ C
- แแแแคแแแฃแ แแชแแแก แแแ แแแแขแ แแแ แแ A
- แแแแแชแแแแแ. แ แแแแ แช แฉแแแก, แแแแคแแแฃแ แแชแแแก แแแ แแแแขแ แแแ แแแแกแฎแแแแแแแ แแแแแชแแแแแแกแแแ แแแแ, แ แแ แแกแแแ แฉแแแฃแแแแ แแ แแชแแแแแแแ แแแแแแแแ แฎแจแแ แแ, แแแแ แ แแแแแชแแแแแ. แแกแแแ, แแแแแชแแแแแ แฉแแแฃแแแแ แแ แแแแแก แแ แแ แฌแงแแ แแแแ (แแแแฎแแแ แแแแแกแแแ), แฎแแแ แแแแคแแแฃแ แแชแแแก แแแ แแแแขแ แแแ แแแแ แแแแ (แกแแกแขแแแแก แแแแแแแกแขแ แแขแแ แแกแแแ).
แแฃ แแจแแแแแแ แชแแแแแแแ แแแ แแแแขแ แแแก แกแญแแ แแแแ แแแแแฎแแแแ แแ แแแ แแแแก แแแแแขแแแ แแแแก แแแ แแจแ, แแแจแแ แแแแ แจแแแซแแแแ แฎแจแแ แแ แแแแแแฌแแแแก แแ แแแ แแแแก แแแ แแฃแแแแ, แ แแแแแ แแแแแญแแ แแแแ แ แแแแ แแ แแแ แแแแขแ แแแแก แแแฌแแแแแ, แจแแแแฎแแ, แแแ แฉแแแ แแ แจแแแแฌแแแแ แแ แแ แแกแฌแแ แ แแแแจแแแแแแแแแแก แแแแฃแจแแแแแ. แแแแขแแ, แแ แแแ แแแแก แกแแ แแฃแแแก แจแแแชแแ แแแแก แแแแแกแแแ แแกแแ, แแแ แ แแฅแแก แแ แแแ แแแแขแ แแแแก แ แแแแแแแแแก แจแแแชแแ แแแแก, แ แแแแแแแช แจแแแซแแแแ แจแแแชแแแแแก แแ แแแ แแแแก แแฃแจแแแแแก แแ แแก (แแ แกแแแ แแแ แแ แฃแญแแ แก แแฎแแ แก แแกแแ แแแ แแแแขแ แแแก).
แแ แแแกแขแแก แแแแแแแแกแแแแก แฉแแแ แแแแแแกแฎแแแแแแ แกแขแแขแแแฃแ แ แแ แแแแแแแฃแ แ แแแ แแแแขแ แแแก. แแฃ แกแแ แแแกแแก แแแแแแ แแแแแฎแแแก แแ แแแ แแแแก แแฃแจแแแแแกแแก แแแ แแแแขแ แแแแก แจแแชแแแแก, แแแจแแ แแกแแ แแแ แแแแขแ แแแก แแแแแแแฃแ แก แแฃแฌแแแแแ. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แแแ แแแแขแ แแแ แกแขแแขแแแฃแ แแ แแ แแแแ แแแแคแแแฃแ แแชแแ แจแแกแแซแแแแแแแ แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแแงแแแแแแ. แแแแแแแฃแ แ แฎแแแแฎแแแ แแแแคแแแฃแ แแชแแแกแแแแก, แจแแแซแแแแ แแแแแญแแ แแแก แแแฅแแแแแแ, แ แแ แแแแแขแแแ แแแ แแ แแแ แแแแก แแแฌแแแแแ แแฎแแแ แแแ แแแแขแ แแแแ, แแกแแแ แ แแแแ แช แแแแ แแชแแฃแแ แกแแกแขแแแแก แแ แแชแแกแแแแก แแแแแขแแแ แแแ. (แฉแแแแ แแแ แแ, แแแแแแจแแฌแแแแแแ แแแแแแแ แแแชแแแแ แ แแแแฃแ แแ แแจแ แฎแแแแฎแแแ แแแแคแแแฃแ แแชแแ, แ แแแแแ แแก แแ แแแก แกแแกแขแแแแก แกแแ แแฃแแแก. แแฃ แจแแกแแซแแแแแแแ, แฃแแฏแแแแกแแ แแแแแแงแแแแ แกแขแแแแแ แขแฃแแ OS แจแแกแแซแแแแแแแแแ แแ แแชแแกแแแแก แแแแแขแแแ แแแแกแแแแก.)
แกแขแแขแแแฃแ แ แแแแคแแแฃแ แแชแแแก แแแแแงแแแแแแก แแ แ-แแ แแ แแแแจแแแแแแแแแ แแกแแแฅแขแ, แ แแแแแแช แฎแแแฎแก แแแซแฃแแแแก แแแแแฎแแแแ แแแแแแแฃแ แ แฎแแแแฎแแแ แแแแคแแแฃแ แแชแแ, แแ แแก แแ แ, แ แแแแแแช แกแญแแ แแแแ แกแแกแขแแแแก แแแแแขแแแ แแแแก แแแแคแแแฃแ แแชแแแก แแแแแฎแแแแแก แจแแแแแ (แจแแฃแกแแแแแแ). แกแแแแแแแแแแจแ, แแฃ แฉแแแ แแแญแแ แแแแ แชแแแแแแแแแแก แจแแขแแแ แกแขแแขแแแฃแ แแแแคแแแฃแ แแชแแแจแ, แฉแแแ แแแแแแฌแแแก แกแแกแขแแแแก แแแแแขแแแ แแแ, แ แแแ แแฎแแแ แแแแจแแแแแแแแแ แแแแฅแแแแแแก. แจแแคแแ แฎแแแแก แแ แแแแแแ แแแแกแฎแแแแแแฃแแแ แกแฎแแแแแกแฎแแ แกแแกแขแแแแกแแแแก. แแแแแแ แ แจแแแแฎแแแแแจแ, แจแแแแซแแแแ แแแแแแแแ แแแแแขแแแ แแแ แแ แแ แแก, แ แแแแกแแช แแแขแแแ แแแ แแแแแแแแฃแ แแ. แแฃ แแฅแแแ แแญแแ แแแแแ แฃแฌแงแแแขแ แกแแ แแแกแแก แแแฌแแแแแ, แจแแแแซแแแแ แแแแแฎแแ แชแแแแแ
แแฎแแ แแแแแแฎแแแแ แแแแคแแแฃแ แแชแแแก แจแแแแฎแแแก แกแแแแแฎแ แแ แขแแคแแฅแขแแก แจแแแแแ แแ แแแก แแแ แแ. แแฃ แแแแคแแแฃแ แแชแแแก แแ แขแแคแแฅแขแแก แจแแแแแ แแแแแฎแแแ, แแแจแแ แแแแแช แแแฅแแแแ แจแแกแแซแแแแแแแ, แแแแแแแแแแฌแแแแแแ แแแแคแแแฃแ แแชแแแก แกแแกแฌแแ แ แแ แขแแคแแฅแขแแก แแฌแงแแแแกแแก. แแฃ แแแแคแแแฃแ แแชแแ แแแแขแ แแแแ แแแแแ แแ แขแแคแแฅแขแแก แแแฆแแแ, แซแแแแแ แแแแแงแฃแ แ แแแแแแแ แแแ แจแแแขแแแ แชแแแแแแแแแ แแ แคแแแแจแ แแ แ แแขแแ. แ แแแแแแแ แแแแจแแแแแแแแแแ? แฉแแแแ แแแ แแ, แแ แแแแแ แฌแแ แแแแแแก แกแแกแขแแแแกแแแแก แแแแจแแแแแแแแแแ แกแขแแแแแฃแ แ แแ แแแฆแแแ แฎแแ แแกแฎแแก แแแแคแแแฃแ แแชแแ.
แแ แขแแคแแฅแขแแก แแแ แกแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแกแแแฆแแ แแ, แ แแแแก แจแแแฅแแแ, แ แ แแแแจแแแแแแแแแก แจแแแชแแแก, แ แ แคแฃแแฅแชแแแแแ แฉแแ แแฃแแ/แแแแแ แแฃแแ แแ แแแ แแ แแก แแแกแฃแฎแแกแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแแกแแแแ แชแแแแแแแแแ. แ แ แแฅแแ แฃแแแ, แแแแคแแแฃแ แแชแแแก แจแแแแฎแแ แแ แขแแคแแฅแขแแก แจแแแแแ แแแแแฎแแแก แแแ แแแแฃแ แซแแแแกแฎแแแแแก, แแกแ แ แแ แแฅแแแ แฃแแแ แแแแฆแแ แแแคแแ แแแ แแแฃแแ แแแแแฌแงแแแขแแแแแ.
แแแแแแแแ แแ แฃแแ แงแแคแแแ แแฎแแ แแแแ
แแกแฃแ แก แแแกแแฃแแ แ แจแแแแแแแแแแแฃแแ แขแแฅแแแแแแแแก แแแแแแแ แแ แฃแแ แงแแคแแ แแฎแแ แแแแแ.
แฃแแแ แแขแแกแแแแแ
แฅแแแแแ แแแชแแแฃแแแ แจแแแแแแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแแแคแแแฃแ แแชแแแก แซแแ แแแแแ แแแฎแแกแแแแแแแแแแก แกแแ:
- แกแขแแขแแแฃแ แ แแแแคแแแฃแ แแชแแแก แจแแแแฌแแแแ. แกแแจแฃแแแแแแก แแแซแแแแ แแแ แฌแแฃแแแแฃแแ แแงแแ แแแแจแ
แแแแคแแแฃแ แแชแแ แกแฌแแ แแ. - แแแแแแ แ แแแแคแแแฃแ แแชแแแก แแแ. แ แแแแ แช แฌแแกแ, แกแฎแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแ แจแแแแแคแแ แแแแแ แแแฅแกแแแฃแ แกแแแแแแแแ แชแแแแแแก แฉแแแแชแแแแแแ. Scala-แก แแแแแงแแแแแแกแแก แฎแแแแแกแแฌแแแแแแ แแแแก แคแฃแแฅแชแแแแแก แคแแ แแ แกแแแฅแขแ แ แแฅแแแแ แแแแคแแแฃแ แแชแแแก แแแกแแฃแแฏแแแแกแแแแแ. แแแแแแแแแ แจแแแแแซแแแ แแแแแแแงแแแแ
แแแแฃแแแกแฎแแแแ แแแแจแแแแแแแแแแก แแแจแแ-แแแแกแแแแแ, แแแแแฅแขแแแแก แแแแแงแแแแแแ แแแ แแแแขแ แแแแก แแแกแแฏแแฃแคแแแแแ, แจแแแแแซแแแ แแแแแแ แแแ แแฎแแแแ แแ แแฎแแ แแแแแชแฎแแแแแฃแ แแแแแแก (DRY) แแแแแแ แแฃแ แกแแแแจแ. แแฅแแแ แจแแแแซแแแแ แแแแแกแแแแ แ แแแแกแแก แแแกแขแแแแชแแ แแแ แแแแแ แแแแคแแแฃแ แแชแแแก แจแแแแแ (Seq
,Map
, แกแแแแแ แแแแกแแแ). - DSL. Scala-แก แแฅแแก แแ แแแแแ แแแแแ แแแ แคแฃแแฅแชแแ, แ แแช แแแแแแแแแก DSL-แแก แจแแฅแแแแก. แจแแกแแซแแแแแแแ แแ แคแฃแแฅแชแแแแแ แกแแ แแแแแแแ แแ แแแแคแแแฃแ แแชแแแก แแแแก แแแแแ แแแ, แ แแแแแแช แฃแคแ แ แแแกแแฎแแ แฎแแแแแแ แแแแฎแแแ แแแแแแ แกแแแแแแ แฏแแฃแคแแกแแแแก, แ แแแ แแแแคแแแฃแ แแชแแ แแแแแช แแงแแก แฌแแแแแฎแฃแแ แแแแแแแก แแฅแกแแแ แขแแแแกแแแแก. แกแแแชแแแแแกแขแแแก แจแแฃแซแแแแ, แแแแแแแแแ, แแแแแฌแแแแแแ แแแแฆแแ แแแแคแแแฃแ แแชแแแก แแแแฎแแแแแก แแ แแชแแกแจแ.
- แแแแแแแแแ แแ แกแแแฅแ แแแฃแแแแ แแแแแซแแแก แจแแ แแก. แแแแแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแแแคแแแฃแ แแชแแแก แแ แ แฌแแ แขแแแจแ แจแแแแฎแแแก แแ แ-แแ แแ แฃแแแ แแขแแกแแแ แแ แแก แแก, แ แแ แงแแแแ แแแแจแแแแแแแ แแแแแชแฎแแแแแฃแแแ แแฃแกแขแแ แแ แแฎแแ แแ แจแแแแแ แฎแแแแฎแแ แแแแแแงแแแแแ แแฅ, แกแแแแช แกแแญแแ แแ. แแแ แขแแแแก แแแแแชแฎแแแแแแกแแแแก แคแแแขแแแฃแ แ แขแแแแแแก แแแแแงแแแแแ แฃแแ แฃแแแแแงแแคแก, แ แแ แแแแแซแแแ แแงแแแแแแ แแแแกแแแแแ แแ แแขแแแแแแแก แงแแแแ แกแฌแแ แ แกแแกแขแแแแก แแแแคแแแฃแ แแชแแแจแ. แแแแแซแแแก แจแแ แแก แแจแแแ แ แกแแแแแแแแฃแแ แแแแแแแแแแฃแแแแแก แแ แกแแแแแ แฃแแ แฃแแแแแงแแคแก แงแแแแ แกแแ แแแกแแก แแแแแแจแแ แแแแก.
- แแแฆแแแ แฎแแ แแกแฎแแก แชแแแแแแแแแ. แแแแคแแแฃแ แแชแแแจแ แชแแแแแแแแแแก แจแแขแแแ แแแแแแแแ แแแแก แกแแแ แแ แแ แแชแแกแแก แแแแแงแแแแแแ แจแแกแแซแแแแแแก แฎแแแก แแแแคแแแฃแ แแชแแแก แแแฆแแแ แฎแแ แแกแฎแแก แกแขแแแแแ แขแแแแก แแแฆแฌแแแแกแแช.
- แแแแคแแแฃแ แแชแแแก แแ แแแ แแฃแแ แแแแแฎแแแแ. แกแแกแขแแแแก แแแขแแแแขแฃแ แ แแแแแแแแแ แแแแคแแแฃแ แแชแแแก แชแแแแแแแแแแก แจแแแแแ แฃแแ แฃแแแแแงแแคแก แงแแแแ แแแแแซแแก แแแแแฎแแแแแก.
- แแแแแแแชแแแก แแแแแ แขแแแแแ. แแแแแแแชแแแก แแ แกแญแแ แแแแ แแแแแแแ, แแแแคแแแฃแ แแชแแแก แจแแแแฌแแแแ แแ แแ แแกแฌแแ แ แแแแจแแแแแแแแแแก แแแแฃแจแแแแแ. แแก แแแชแแ แแแก แแแแแแแชแแแก แกแแ แแฃแแแก. (แฉแแแแก แแแแแแแแจแ แแแคแแฅแกแแ แแแฃแแ แแแแคแแแฃแ แแชแแแก แแแแแแ แแ แกแแ แแฃแแ แแ แแ แแก แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแขแ แแแฃแขแ, แแ แแแแ แแฎแแแแ แจแแแแแแฃแแ แแแแแฌแงแแแขแแแแแ, แ แแแแแแช แแแแแฌแแแฃแแแ แฃแคแ แ แแแแ แขแแแแก แฃแกแแคแ แแฎแแแแแก แฃแแ แฃแแแแแงแแคแแก แกแฃแ แแแแแ.) แกแแแแแแ แแแ แขแแแแ แฉแแแฃแ แแแแคแแแฃแ แแชแแแแ แแแแ แฃแแแแ - แฃแแ แแแแ แแแแแฎแแ แชแแแแแ แแแแแ แแฃแแ. แแแฌแแแแแ. แแแจแแกแแแแแ, แจแแแแซแแแแ, แแแแแแแแแ, แแแแฌแงแแ แจแแแแแแแแ แแแแคแแแฃแ แแชแแแ, แแแแแแแ แแ แแกแแญแแ แ แแแฌแแแแแแก แแแแฎแแ แชแแแแแแ แแ แแ แแแแ, แ แแแแกแแช แแก แแแแแแแแแ แกแแญแแ แแ.
- แแแแแฌแแแแฃแแ แแแแคแแแฃแ แแชแแ. แแแแแแแแ แแแแคแแแฃแ แแชแแแก แชแแแแแแแแแ แแแแแกแแแแ แ แกแฎแแ แชแแแแแแแแก แฉแแแฃแ แแแแก แแแฐแงแแแแ, แแแแแแแแแแ, แ แแแแแกแแช แฉแแแ แแแฆแแแ, แแ แแก แแ แขแแคแแฅแขแ แฃแแแแแแฃแ แ แแแ แกแแแ. แแก แกแแจแฃแแแแแแก แแแแซแแแแก, แแแแแแแแแ, แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ แแแแฃแแ แฃแแแแ แแแแคแแแฃแ แแชแแแก แฌแแแ แแแ แกแแแก. แฉแแแ แจแแแแแซแแแ แแ แแ แฌแแแก แฌแแแแแแแแ แแแแคแแแฃแ แแชแแแช แแ แแแแแแแงแแแแ แแ แกแแกแขแแแ แแฃแกแขแแ แแแฃแจแแแแแก. แกแขแแแแแฃแ แ แแแแคแแแฃแ แแชแแ แแฃแแฏแแแแกแแแก แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแ แแแแแแแ แแแแแแแแก แแ แกแแแแแแแแแแก. แแแแแแแแ แแแแคแแแฃแ แแชแแ แคแแฅแกแแ แแแแ แจแแแแแแแก แแขแแแแ, แกแแแแแแ แ แแฃแแแ แแแกแ แแแงแแแแแแ แฌแแ แแแแแแจแ.
- แแแแฃแแแ แฃแแแแ. แจแแแแแแแแแแแฃแแ แฉแแ แฉแ แแแแฃแแแ แฃแแแ แแ แแแแฃแแแแ แจแแแซแแแแ แแแแ แแแแแแแก แกแฎแแแแแกแฎแแ แแแแ แกแฎแแแแแกแฎแแ แกแแกแขแแแแก แจแแกแแฅแแแแแแ. แแแ แซแแ, แจแแแแซแแแแ แแแแแแแคแแแฃแ แแ แแ แกแแกแขแแแ แแกแ, แ แแ แแแฃแจแแแก แแ แ แแแแแซแแ แแ แ แแแแกแแฎแแแ แแแแจแ แแ แแ แแแแ แแแแแซแแ แแแแ แแจแ. แแฅแแแ แจแแแแซแแแแ แจแแฅแแแแ แ แแแแแแแแ แแแแคแแแฃแ แแชแแ แกแแกแขแแแแก แฌแแ แแแแแแก แแแกแขแแแชแแแแแกแแแแก.
- แขแแกแขแแ แแแ. แแแแแแแแฃแแแฃแ แ แกแแ แแแกแแแแก แแแแขแแ แแแฃแแ แแแแแฅแขแแแแ แจแแชแแแแ, แจแแแแซแแแแ แแแแฆแแ แกแแกแขแแแแก แ แแแแแแแแ แแแ แกแแ, แ แแแแแแแช แแแกแแฎแแ แฎแแแแแแ แขแแกแขแแ แแแแกแแแแก.
- แแแขแแแ แแชแแแก แขแแกแขแแ แแแ. แแแแแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแกแแแแก แแ แแแแแ แแแแคแแแฃแ แแชแแแก แแ แกแแแแแ แจแแกแแซแแแแแแก แฎแแแก แงแแแแ แแแแแแแแแขแแก แแแจแแแแแก แแแแขแ แแแแ แแแแ แแแ แแแแจแ, แ แแแแ แช แแแขแแแ แแชแแแก แขแแกแขแแ แแแแก แแแฌแแแ. แแแแแแแ แแแฃแแแชแแ, แแแแแแแแแ, แกแแขแฃแแชแแ, แ แแแแกแแช แแแแแแ แแ แแแแแซแ แฎแแแแแกแแฌแแแแแ แฎแแแแ.
แแแแแแแแแแแแแ แแ แจแแแฆแฃแแแแแ
แจแแแแแแแแ แแแแคแแแฃแ แแชแแ แแแแกแฎแแแแแแแ แกแฎแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแแแกแแแ แแ แจแแแซแแแแ แแ แแงแแก แจแแกแแคแแ แแกแ แแแแแแ แแ แแแแแแแชแแแกแแแแก. แฅแแแแแ แแแชแแแฃแแแ แ แแแแแแแแ แฃแแ แงแแคแแแ แแฎแแ แ:
- แกแขแแขแแแฃแ แ แแแแคแแแฃแ แแชแแ. แแแแฏแแ แกแแญแแ แแ แกแฌแ แแคแแ แจแแแกแฌแแ แแ แแแแคแแแฃแ แแชแแ แฌแแ แแแแแแจแ, แงแแแแ แแแแชแแแ แแแฅแแแแแแแก แแแแ แแแก แแแแแ. แแ แแแแแแแแ แจแแแซแแแแ แฃแคแ แ แ แแฃแแ แแงแแก. แกแฃแ แแชแแ แ, แแแแแแแแชแแ แแ แแแขแแแแขแฃแ แ แแแแแแแแแ แแแแแช แแฅแแแแ แกแแญแแ แ. แแก แแ แแก แแแแแแแแก แ แแแแ แช แกแแกแแ แแแแแ แแแแกแแแ, แแกแแแ แแแ แจแแแแฎแแแแแจแ แแแแฃแกแ.
- แแแแคแแแฃแ แแชแแแก แแแแแ แแชแแ. แแ แจแแแแฎแแแแแจแ, แแฃ แแแแคแแแฃแ แแชแแแก แคแแแแ แแแแแ แแ แแแฃแแแ แแแขแแแแขแฃแ แ แฎแแแกแแฌแงแแแ, แจแแแซแแแแ แกแแญแแ แ แแแฎแแแก แแแแแขแแแแแ แซแแแแกแฎแแแแ build แกแแ แแแขแแก แแแขแแแ แแ แแแแกแแแแก.
- แฎแแแกแแฌแงแแแแ. แแแแแแแ, แฃแขแแแแขแแแ แแ แขแแฅแแแแ, แ แแแแแแแช แจแแฅแแแแแแ แแแแคแแแฃแ แแชแแแกแแแ แแฃแจแแแแแกแแแแก, แแคแฃแซแแแแ แขแแฅแกแขแฃแ แคแแแแแแก. แงแแแแ แแกแแแ แแแแฃแแแแฃแ แ/แขแแฅแแแแ แแ แแฅแแแแ แฎแแแแแกแแฌแแแแแ แจแแแแแแแ แแแแคแแแฃแ แแชแแแจแ.
- แกแแญแแ แแ แแแแแแแแแแฃแแแแแแแก แจแแชแแแ. แแแแแแแแแ แแแ แแ DevOps แแแฉแแแฃแแแแ แแ แแแ แขแแฅแกแขแฃแ แคแแแแแแก. แแแแคแแแฃแ แแชแแแก แจแแแแแแแก แแแแ แจแแแซแแแแ แแงแแก แแแ แแแแฃแแฌแแแแ แแแฃแแแแแแแ แแ แฃแฉแแแฃแแ แแ แแแแแแฌแแแแก แฃแแ แ.
- แกแแญแแ แแ แแแฆแแแ แฎแแ แแกแฎแแก แแแแแแแแ แแแแก แแ แแชแแกแ. แแแแแแแแ แแแฃแแ แแแแคแแแฃแ แแชแแแก แแแแคแแ แขแฃแแแ แแแแแกแแงแแแแแแแ แแฃแชแแแแแแแแ แแแแแแแชแแแก แจแแฅแแแแกแ แแ แแแแแแแแแแก แแ แแชแแกแแก แกแ แฃแแ แแแขแแแแขแแแแชแแ (CI/CD). แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แแก แกแแแแแแ แแแฃแฎแแ แฎแแแแแ แแฅแแแแ.
แแแแแ แแกแแแ แแแกแแฃแแ แแ แแแแฎแแแฃแแ แแแแแแแแแก แ แแ แจแแแฆแฃแแแแแแ, แ แแแแแแแช แแ แแ แแก แแแแแแจแแ แแแฃแแ แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแแกแแแ:
- แแฃ แฉแแแ แแแแแฌแแแแ แแ แแกแแญแแ แ แแแแคแแแฃแ แแชแแแก แแแคแแ แแแชแแแก, แ แแแแแแช แแ แแแแแแงแแแแแ แแแแแซแแก แแแแ , แแแจแแ แจแแแแแแแแแ แแ แแแแแแฎแแแ แแแ แแแแแ แแฃแแ แแแแแแแแแขแแชแแแก แแฆแแแฉแแแแจแ. แแ แแ แแแแแแแก แแแแแแ แแแ แจแแกแแซแแแแแแแ แขแแ แขแแก แแแแฃแจแแก แแแขแแแแแแ แแ แฃแคแ แ แแแแชแ แ แขแแแแแแก แแแแแงแแแแแแ, แแแแแแแแแ,
HList
แแ แแแแแแ แฃแแ แแแแแชแแแแ แขแแแแแ (แฅแแแกแแแแก แแแแกแแแ) แแแแคแแแฃแ แแชแแแก แฌแแ แแแกแแฉแแแแ. - แแแแคแแแฃแ แแชแแแก แคแแแแจแ แแ แแก แฎแแแแแ, แ แแแแแแแช แแ แแ แแก แแแแแแจแแ แแแฃแแ แแแแแ แแแแคแแแฃแ แแชแแแกแแแ: (
package
,import
,แแแแแฅแขแแแแก แแแแแแ แแชแแแแ;override def
's แแ แแแ แแแแขแ แแแแกแแแแก, แ แแแแแแกแแช แแฅแแ แแแแฃแแแกแฎแแแแ แแแแจแแแแแแแแแ). แแก แจแแแซแแแแ แแแฌแแแแแ แแ แแฅแแแก แแชแแแแแฃแแ, แแฃ แแฅแแแ แแแแแ แแแแ แกแแแฃแแแ DSL-แก. แแแ แแ แแแแกแ, แกแฎแแ แกแแฎแแก แแแแคแแแฃแ แแชแแ (แแแแแแแแแ, XML) แแกแแแ แแฌแแกแแแก แแแ แแแแฃแ แจแแแฆแฃแแแแแก แคแแแแแก แกแขแ แฃแฅแขแฃแ แแแ. - แแ แแแกแขแแก แแแแแแแแกแแแแก, แฉแแแ แแ แแแแแแฎแแแแแ แแกแแแแกแ แแแแแซแแแแก แแแแกแขแแ แแก แแแแแแแฃแ แ แแแแแคแแแฃแ แแชแแแก.
แแแกแแแแ
แแ แแแกแขแจแ แฉแแแ แจแแแแกแฌแแแแแ แแแแคแแแฃแ แแชแแแก แฌแแ แแแแแแแแก แแแแ แฌแงแแ แแก แแแแจแ Scala แขแแแแก แกแแกแขแแแแก แแแฌแแแแแ แจแแกแแซแแแแแแแแแแก แแแแแงแแแแแแ. แแก แแแแแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แกแฎแแแแแกแฎแแ แแแแแแแชแแแแจแ, แ แแแแ แช xml แแ แขแแฅแกแขแฃแ แคแแแแแแแ แแแคแฃแซแแแแฃแแ แแแแคแแแฃแ แแชแแแก แขแ แแแแชแแฃแแ แแแแแแแแแก แฉแแแแชแแแแแ. แแแฃแฎแแแแแแ แแแแกแ, แ แแ แฉแแแแ แแแแแแแแ แแแแฎแแ แชแแแแแแฃแแแ Scala-แจแ, แแแแแ แแแแแแ แจแแแซแแแแ แแแแแแแแแก แกแฎแแ แจแแแแแแแ แแแแแแ (แ แแแแ แแชแแ Kotlin, C#, Swift, ...). แจแแแแซแแแแ แกแชแแแแ แแก แแแแแแแ แแ แ-แแ แ แจแแแแแ แแ แแแฅแขแจแ แแ, แแฃ แแก แแ แแแแแแแแแ, แแแแแแแ แขแแฅแกแขแฃแ แคแแแแแ, แแแแแแขแแ แแแแแ แแฃแแ แแแฌแแแแแ.
แแฃแแแแ แแแแ, แจแแแแแแแแ แแแแคแแแฃแ แแชแแ แแแแแฎแแแก แแแฆแแแ แฎแแ แแกแฎแแก แแแแแแแแ แแแแก แแ แแชแแกแก. แกแแแแชแแแแ, แฃแแ แฃแแแแแงแแคแแแแ แแแแคแแแฃแ แแชแแแก แแแฆแแแ แฎแแ แแกแฎแ แแ แกแแแแแแแแแ.
แแแแฎแแแฃแแ แแแแแแแ แจแแแซแแแแ แแแคแแ แแแแแแก:
- แแฅแแแ แจแแแแซแแแแ แแแแแแงแแแแ แแแแ แแแแ แแแแแแแแชแแแก แแ แแแก แจแแแแฌแแแแแก แจแแกแแกแ แฃแแแแแแ.
- แแฅแแแ แจแแแแซแแแแ แแแแแ แแแ DSL แแแแคแแแฃแ แแชแแแก แฌแแ แแแกแแฉแแแแ แแกแ, แ แแ แฎแแแแแกแแฌแแแแแ แแงแแก แกแแแแแแ แแแแฎแแแ แแแแแแแกแแแแก.
- แแฅแแแ แจแแแแซแแแแ แแแแแฎแแ แชแแแแแ แ แแกแฃแ แกแแแแก แแแแแแแฃแ แ แแแ แแแ แแแขแแแแขแฃแ แ แแแแคแแแฃแ แแชแแแก แ แแแฃแแแ แแแแ. แแแแแแแแแ, แแแแกแขแแ แจแ แแแแแซแแแแก แ แแแแแแแแแก แจแแชแแแ แแแแแฎแแแก, แ แแ (1) แแแแแแฃแแแ แแแแแซแแ แแแแฆแแก แแแแแ แแแแกแฎแแแแแแฃแแ แแแแคแแแฃแ แแชแแ; (2) แแแแกแขแแ แแก แแแแแฏแแ แแ แแแแฆแ แแแคแแ แแแชแแ แแฎแแแ แแแแแซแแแแก แจแแกแแฎแแ.
แแแแแแแ
แแแแแ แแแแแแแ แแแแแแฃแฎแแแ แแแแ แแ แกแแฅแกแแแแแก, แแแแแ แแแแแแก แแ แแแขแแ แแแฎแแแแก แกแขแแขแแแก แแ แแแฅแขแแก แแแแกแขแ แฃแฅแชแแฃแแ แแ แแขแแแแกแแแแก.
แฌแงแแ แ: www.habr.com