แแ แแแกแขแจแ แแแกแฃแ แก แแแแแแแแ แแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแแแคแแแฃแ แแชแแแก แแแแแแ แแแแก แกแแแแขแแ แแกแ แแแ.
แแแแคแแแฃแ แแชแแ แฌแแ แแแแแแแแแแ แแแ แแแแแ แกแแแแแก แแแแแ แฃแกแแคแ แแฎแ แขแแแแก แกแแฎแแ. แแแแฎแแ แชแแแแแแแก แแแแแแแแ แแแขแแแฃแ แแ แแ แแก แแฆแฌแแ แแแ. แแแแแฎแแแแแ แฌแแแแแแแแแแก แกแฎแแแแแกแฎแแ แแกแแแฅแขแแแ, แแแ แจแแ แแก แแแแแแแ แกแแแ แแ แแแแแแแแ แแแแก แแ แแชแแกแแ.
แจแแกแแแแแ
แซแแแแ แ แแแแแฌแแแแแฃแแ แกแแกแขแแแแแแก แแจแแแแแ แแแแแฎแแแก แกแฌแแ แ แแ แแแแแแแแแแ แฃแแ แแแแคแแแฃแ แแชแแแก แแแแแงแแแแแแก แงแแแแ แแแแแซแแ. แขแแแแฃแ แ แแแแแกแแแแแ แแ แแก แขแแฅแกแขแฃแ แ แแแแแแแแแแก แแฆแฌแแ แแแแแแก แแแแแงแแแแแ (แขแแ แแคแแ แแฃแแ, แแแกแแแแแ แแ แแกแแแแกแ) แแ แแแขแแแแขแฃแ แแ แแแแแ แแ แแแฃแแ แแแแคแแแฃแ แแชแแแก แคแแแแแแ (แฎแจแแ แแ - แแแแแงแแคแแแ แแแแแแฃแแ แแแแแซแแกแแแแก/แ แแแแกแแแแก). แฉแแแ แแกแแแ แแแกแฃแ แก แแแแแแแงแแแแ แแ แแ แแ แแแแแ แแแ แกแแแแแก แแแแแ แแ แแขแแแแแแแ แแแแแแฃแ แกแแแแแฃแแแแแชแแ แแแแแซแแ (แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ แจแแแแแฅแแแแแ แจแแฃแแแแกแแแแแแแก แกแแแแแฎแแแ). JVM แกแแแงแแ แแจแ แแก แแแจแแแแก, แ แแ แจแแขแงแแแแแแแแแแก แแแแแแแแแแ แแแแแช แฃแแแ แแงแแก แแแแแ แแแ แกแแแ แงแแแแ แกแแแแแฃแแแแแชแแ แแแแแซแแ.
แ แแช แจแแแฎแแแ แกแแกแขแแแแก แขแแกแขแแ แแแแก? แ แ แแฅแแ แฃแแแ, แแแขแแแ แแชแแแก แขแแกแขแแแแ แแแกแแแแแแ แฃแแแ แแแฅแแแแแก แแ แแแฃแแแก แขแแกแขแแแ แงแแแแ แแแแแแแแแขแแกแแแแก. แแแแกแแแแแก, แ แแ แจแแแซแแแ แขแแกแขแแก แจแแแแแแแแก แแฅแกแขแ แแแแแแชแแ แแแจแแแแแก แแ แแแ, แฃแแแ แแแแ แฌแแฃแแแแ, แ แแ แงแแแแ แแแแแแแแแแแก แแแ แกแแแแ แแแแแขแฃแ แแ แ แแแแ แช แแแจแแแแแก, แแกแแแ แขแแกแขแแ แแแแก แแแ แแแแจแ.
แแแขแแแ แแชแแแก แขแแกแขแแแแก แแแจแแแแแกแแก, แฎแจแแ แแ แแแแ แแ แฃแคแ แ แแแแแแแ แแฅแแแแแ แแ แแ แแ แแแแแ แแแแกแแก แแแ แงแแแแ แแแแแซแแ. แฉแแแ แฃแแ แแแแ แฃแแแ แแแแ แฌแแฃแแแแ, แ แแ แแแแแ แแแแกแแก แแแ แแแแแแงแแแแแ แแแแแแแแแแกแแก. (แจแแกแแซแแแแแแแ แแแแแแแงแแแแ แกแฎแแแแแกแฎแแ แแแแกแแก แแแ แกแฎแแแแแกแฎแแ แแแแแซแแ, แแแแ แแ แฃแคแ แ แ แแฃแแแ แแ แแแแคแแแฃแ แแชแแแก แฌแแ แแแแแแแ แแ แแแกแ แกแฌแแ แแ แแแแแแแแแ.) แแกแ แ แแ, แแแแกแแแแแก, แ แแ แงแแแแแคแแ แ แแแ แขแแแ แแงแแก, แฉแแแ แแแแแแฎแแแแแ แแฎแแแแ แแแแแขแฃแ แแแแกแแก แแแแก แงแแแแ แแแแแซแแ.
แแแแคแแแฃแ แแชแแ แแ แแแ แแแฃแ แฃแแ แฃแแแแแงแแคแแกแแแ แแ แแแ แแแแแ แแแแ. แฉแแแ แฉแแแฃแแแแ แแ แแแงแแแแแ แแแ แกแแแแก แกแฎแแแแแกแฎแแ แแแแแขแแคแแชแแ แแแแกแแแแก
แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแแแฃแชแแแก แแขแแแแแ. แแแแแแ แฃแแ แฉแแแก แแแแคแแแฃแ แแชแแแก แแแคแแ แแ แแแ แกแแแก แแแแแฏแแแแขแแก แฅแแแจ แแ แกแฎแแแแแกแฎแแ แแแแคแแแฃแ แแชแแแก แแแแแขแแคแแชแแ แแแ แแแแแแ แแ แแขแแแแขแแ. แแฃ แฌแแ แแแแแแจแ แแฎแแแแ แแ แแ แแแแคแแแฃแ แแชแแแ, แจแแแซแแแแ แแแแแแแงแแแแ แแ แแ แแแ แกแแ, แ แแแแ แช แแแแแขแแคแแแแขแแ แ. แแแแฏแแ แจแแแซแแแแ แแแฅแแแแแก แแ แแแแแ แกแแฌแแ แแแ แแแ แแแ. แแ แแแแแแฃแแ แแแ แแแแกแแแแก แจแแแซแแแแ แแแแแญแแ แแแก แแแแคแแแฃแ แแชแแแก แชแแแแ แคแแแแแแ. แแกแ แ แแ, แแแแคแแแฃแ แแชแแแแก แจแแแซแแแแ แแฌแแแแก แคแแแแแแ แแ แแแ แกแแ แกแฎแแแแแกแฎแแ แแแแคแแแฃแ แแชแแแก แชแแแกแแฎแแ แแแแแขแแคแแชแแ แแแแกแแแแก. แแแแแแฃแแ แคแแแแแแแก แแขแแแแขแ แแ แแแ แกแแ แจแแแกแแแแแแแ แแแแแฌแแแแแฃแแ แแแแแซแแแแก, แแแ แขแแแแก, แแแ แ แ แแกแฃแ แกแแแแก, แแแแกแแแแก แแแแแแแแแแแก แแแ แกแแแแแก แแ แ แแแแแแแแชแแแก แแแแแแฃแ แแแแแซแแ. แแฅ แฉแแแ แแแแคแแ แแแ แแฎแแแแ แแ แ แแแแจแขแแแแแก แแ แแแแแกแแแฆแแ แแแ แแแแคแแแฃแ แแชแแแแก แกแแแแแแแแแแแขแแแแ แแแแแแแ แแแ แกแแแ (1.2.3), แแกแแแ แ แแแแ แช แกแฎแแ แแ แขแแคแแฅแขแแแ.
แแแแแแแแ แแแ แแแ แแแแจแ แแแแคแแแฃแ แแชแแแก แคแแแแแแ แฎแแแแ แแฆแแ แแชแแแแแ. แ แแแแ แช แฌแแกแ, แฉแแแ แแแฌแแ แแแแแ
แแแแคแแแฃแ แแชแแแก แคแแแแแแ แแแแแแแแแแก แแ แแก แแ
แแ แแแกแขแจแ แแแแแแฎแแแแแ แจแแแแแแแ แแ แขแแคแแฅแขแจแ แแแแคแแแฃแ แแชแแแก แจแแแแ แฉแฃแแแแแก แแแแแก.
แแแแแแแแ แแแแแ แแแแคแแแฃแ แแชแแ
แแ แแแแงแแคแแแแแแจแ แแแแแแฎแแแแแ แกแขแแขแแแฃแ แ แแแแคแแแฃแ แแชแแแก แแแแแแแแก. แแแแแแแแ แแแแก แแ แ แแแ แขแแแ แกแแ แแแกแแก แแแแคแแแฃแ แแชแแ แแ แแแแแ แแแ - แแฅแ แกแแ แแแกแ แแ แแฅแ แกแแ แแแกแแก แแแแแแขแ. แจแแแแแ แแแกแขแแแแ แแแฃแแแ แแ แ แแแแกแฎแแแแแแฃแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแ แแ แแแ แกแแ แแแกแแ. แแ แแ แแ แแก แแ แแ แแแแแซแแก แแแแคแแแฃแ แแชแแแกแแแแก แแ แแแแ แ แแ แแ แแ แ แแแแแซแแก แแแแคแแแฃแ แแชแแแกแแแแก.
แขแแแแฃแ แ แแแแแฌแแแแแฃแแ แกแแกแขแแแ แจแแแแแแ แ แแแแแแแแ แแแแแซแแกแแแ. แแแแแซแแแแก แแแแแขแแคแแชแแ แแแ แจแแกแแซแแแแแแแ แแแ แแแแฃแแ แขแแแแก แแแแแงแแแแแแ:
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]]
แแแฎแแแฌแแแ แขแแแแแ
แแแ แแแแ Int
แแแกแแจแแแแแ แแฎแแแแ 16-แแแขแแแแ แแแแจแแแแแแแแแ, แ แแแแแแแช แจแแแซแแแแ แฌแแ แแแแแแแแแแก แแแ แขแแก แแแแแ แก. แแ แแ แแก แกแแญแแ แ แแ แแแแแแแแแแแก แแแแแงแแแแแ แแแแคแแแฃแ แแชแแแก แแ แแแแแแแแกแแแแก. แฃแแ แแแแ, แ แแแแ แช แฉแแแก, แซแแแแแ แแแ แแแ แฏแแแแ.
HTTP-แกแแแแก (REST) โโแจแแแซแแแแ แแกแแแ แแแแแญแแ แแแก แกแแ แแแกแแก แแแ:
type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)
แคแแแขแแแฃแ แ แขแแแ
แจแแแแแแแก แแ แแก แแ แแขแแแแแแก แแแแแขแแคแแชแแ แแแแกแแแแก แแแงแแแแแ Scala-แก แแแฎแแกแแแแแแแแก แขแแแแก แแ แแฃแแแแขแแก แแแแแชแฎแแแแแแกแแแแก Protocol
แ แแแแแแช แแ แแแแแแงแแแแแ แแแแกแจแ. แแก แแ แแก แ.แฌ แคแแแขแแแฃแ แ แขแแแ. แแแจแแแแแก แแ แแก แฉแแแ แแจแแแแแแ แแแญแแ แแแแ แแ แแขแแแแแแก แแแแแขแแคแแแแขแแ แแก แแแแแแแแ, แแแแขแแ แแ แแแแแฎแแแ แแแก. แจแแแแแแแกแแก แแก แคแแแขแแแฃแ แ แขแแแ แแซแแแแ แแแแแขแแแแ แขแแแแก แฃแกแแคแ แแฎแแแแแก. แฉแแแ แแ แจแแแแแซแแแ แแแ แขแแก แแแแแ แแ แแกแฌแแ แ แแ แแขแแแแแแ.
แแ แ-แแ แแ แงแแแแแแ แคแแ แแแ แแแแแงแแแแแฃแแ แแ แแขแแแแแ แแ แแก REST API Json แกแแ แแแแแแแชแแแ:
sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]
แกแแแแช RequestMessage
แแ แแก แจแแขแงแแแแแแแแแแก แซแแ แแแแแ แขแแแ, แ แแแแแแช แแแแแแขแก แจแแฃแซแแแ แแแแแแแแแก แกแแ แแแ แแ แแ ResponseMessage
แแ แแก แกแแแแกแฃแฎแ แจแแขแงแแแแแแแ แกแแ แแแ แแแแ. แ แ แแฅแแ แฃแแแ, แฉแแแ แจแแแซแแแแ แจแแแฅแแแแ แแ แแขแแแแแแก แกแฎแแ แแฆแฌแแ แแแแแแแ, แ แแแแแแแช แแแแแแ แแขแแแแ แแแแฃแแแแแชแแแก แแ แแขแแแแแก แกแแกแฃแ แแแแ แกแแแฃแกแขแแ.
แแ แแแกแขแแก แแแแแแแแกแแแแก แฉแแแ แแแแแแแงแแแแแ แแ แแขแแแแแแก แฃแคแ แ แแแ แขแแ แแแ แกแแแก:
sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]
แแ แแ แแขแแแแแจแ แแแแฎแแแแแก แจแแขแงแแแแแแแ แแแแขแแแ url-แก แแ แกแแแแกแฃแฎแ แจแแขแงแแแแแแแ แแ แฃแแแแแ แ แแแแ แช แฉแแแฃแแแแ แแแ แกแขแ แแฅแแแ.
แกแแ แแแกแแก แแแแคแแแฃแ แแชแแ แจแแแซแแแแ แแฆแฌแแ แแแ แแงแแก แกแแ แแแกแแก แกแแฎแแแแ, แแแ แขแแแแก แแแแแฅแชแแแ แแ แแแแแแ แแ แแแแแแแแแแฃแแแแแ. แแ แกแแแแแก แ แแแแแแแแ แจแแกแแซแแ แแแ, แแฃ แ แแแแ แฃแแแ แฌแแ แแแแแแแแแแ แงแแแแ แแก แแแแแแแขแ Scala-แจแ (แแแแแแแแแ, HList
, แแแแแแ แฃแแ แแแแแชแแแแ แขแแแแแ). แแ แแแกแขแแก แแแแแแแแกแแแแก แฉแแแ แแแแแแแงแแแแแ แขแแ แขแแก แจแแแแแแก แแ แฌแแ แแแแแแแแแ แแแแแแแแ แแแฃแ แแแญแ แแแก (แแแแฃแแแแก), แ แแแแ แช แแแแกแแแแแก. (แขแแ แขแแก แแแแฃแจแ แแ แแ แแก แแแแฎแแแแ แแ แแแแแแแแ แแแฃแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแกแแแแก. แแก แแ แแก แแแแแก แแฎแแแแ แแ แแ แจแแกแแซแแ แแแแฎแแ แชแแแแแแ.)
แแแแแแแแแแฃแแแแแแ แจแแแซแแแแ แฌแแ แแแแแแแแแ แแงแแก Cake Pattern-แแก แแแแแงแแแแแแ, แ แแแแ แช แกแฎแแ แแแแแซแแแแก แแแแ แฌแแ แขแแแแแ:
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)
}
Echo แกแแ แแแกแก แแฎแแแแ แแแ แขแแก แแแแคแแแฃแ แแชแแ แกแญแแ แแแแ. แแ แฉแแแ แแแชแฎแแแแแ, แ แแ แแก แแแ แขแ แแฎแแ แก แฃแญแแ แก แแฅแ แแ แแขแแแแแก. แแแแแแแแแกแฌแแแแ, แ แแ แฉแแแ แแ แแแญแแ แแแแ แแแแแ แแขแฃแแ แแแ แขแแก แแแแแแแแ แแ แแแแแแขแจแ, แ แแแแแ แแแแกแแแ แกแแจแฃแแแแแแก แแซแแแแ แแแกแขแ แแฅแขแฃแแ แแแแแแแแแก แแแแแแ แแชแแแแ. แแฃ แฉแแแ แแแงแแแแแ แแแกแขแ แแฅแขแฃแ แแแแแแแแก, แจแแแแแแแแแ แแแกแญแแ แแแแ แแแแแแแแแขแแชแแแก แแแแคแแแฃแ แแชแแแก แแแกแขแแแชแแแจแ. แแฅ แฉแแแ แแแแแฌแแแแ แแแแฎแแ แชแแแแแแ (8081
) แแ แแก แแแแแงแแแแแฃแแ แแฅแแแแ แ แแแแ แช แแแแฃแแแกแฎแแแแ แแแแจแแแแแแแ, แแฃ แแแก แแแแแแขแแแแแ แแแแแ แแขแฃแ แแแแคแแแฃแ แแชแแแจแ.
แฉแแแ แจแแแแแซแแแ แแแแแแแชแฎแแแแ แแแแแแแแแแฃแแแแ แแฅแ แกแแ แแแกแแก แแแแแแขแแก แแแแคแแแฃแ แแชแแแจแ:
trait EchoClientConfig[A] {
def testMessage: String = "test"
def pollInterval: FiniteDuration
def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
}
แแแแแแแแแแฃแแแแแก แแฅแแก แแแแแ แขแแแ, แ แแช echoService
. แแแ แซแแ, แแแแแ แแ แแขแแแแแก แแแแแฎแแแก. แแฅแแแแ แแแแแแแแแแ แ, แจแแแแแซแแแ แแแ แฌแแฃแแแแฃแแ แแแงแแ, แ แแ แแฃ แแ แแ แแแแแแแแแแฃแแแแแก แแแแแแแแจแแ แแแ, แแกแแแ แกแฌแแ แแ แแแฃแจแแแแแแ.
แกแแ แแแกแแแแก แแแแฎแแ แชแแแแแแ
แกแแ แแแกแก แกแญแแ แแแแ แคแฃแแฅแชแแ แแแกแแฌแงแแแแ แแ แแแฎแแแแแแแ แแแแแ แแแแกแแแแก. (แกแแ แแแกแแก แแแแแ แแแแก แจแแกแแซแแแแแแแ แแแแแแฌแงแแแขแแ แขแแกแขแแ แแแแกแแแแก.) แแกแแ แแ แกแแแแแก แ แแแแแแแแ แแแ แแแแขแ แแแชแแแฃแแ แแแแคแแแฃแ แแชแแแกแแแแก แแกแแแ แคแฃแแฅแชแแแก แแแแแแแแแกแแแแก (แแแแแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแแงแแแแ แขแแแแก แแแแกแแแ). แแ แแแกแขแแกแแแแก แฉแแแ แแแแแ แแแแแแแงแแแแแ แขแแ แขแแก แจแแแแแแก. แฉแแแ แจแแแแแซแแแ แฌแแ แแแแแแแแแแ แกแแ แแแกแ แแแแแงแแแแแแ 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
- แแแฅแแแแ แคแฃแแฅแชแแแแแก แจแแคแฃแแแ (แแแแฅแแแก แแแแแแ) (แจแแแซแแแแ แกแแแแแแแ แจแแแชแแแแแ แแแ แกแฎแแ แ แแแแ)
แแ แแแขแแ แคแแแกแแก แแแแแงแแแแแแ แฉแแแ แจแแแแแซแแแ แ แแแแแแแแ แกแแ แแแกแแก แแแแฎแแ แชแแแแแแ. แแแแแแแแแ, แกแแ แแแกแ, แ แแแแแแช แแ แแคแแ แก แแแแแแแก:
trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
type Config <: Any
def resource(...): ResourceReader[F, Config, Unit] =
Reader(_ => Resource.pure[F, Unit](()))
}
(แแฎแแแแ
แแแแแซแ แแ แแก แแ แแ แแแแแฅแขแ, แ แแแแแแช แแฌแแ แแแแแก แ แแแแแแแแ แกแแ แแแกแก (แ แแกแฃแ แกแแแแก แฏแแญแแแก แแแฌแงแแแ แฉแแ แแฃแแแ Cake Pattern-แแ):
object SingleNodeImpl extends ZeroServiceImpl[IO]
with EchoServiceService
with EchoClientService
with FiniteDurationLifecycleServiceImpl
{
type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}
แแแแแแแแแกแฌแแแแ, แ แแ แแแแแซแจแ แฉแแแ แแแแฃแกแขแแแ แแแแคแแแฃแ แแชแแแก แแฃแกแข แขแแแก, แ แแแแแแช แกแแญแแ แแ แแ แแแแแซแแกแแแแก. แจแแแแแแแแแ แแ แแแแซแแแแก แฃแคแแแแแก แแแแจแแแแ แแแแแฅแขแ (Cake) แแ แแกแแแแแ แแกแ แขแแแแ, แ แแแแแ แแแแแแฃแแ แกแแ แแแกแแก แแแฎแแกแแแแแแแแ แแชแฎแแแแแก แจแแแฆแฃแแแแก Config
แขแแแ. แแกแแแ, แฉแแแ แแแ แจแแแซแแแแ แแแแแซแแก แแแฌแงแแแแก แกแ แฃแแ แแแแคแแแฃแ แแชแแแก แแแ แแจแ.
แแแแแซแแก แแแกแแแแ แแแก แแแ แฉแแแแแแแ
แแแแจแแ แแก แแแกแแแงแแ แแแแแ แฉแแแ แแแญแแ แแแแ แ แแแแฃแ แ แฐแแกแขแแก แแแกแแแแ แแ แแแแแแฃแแ แแแแแซแแกแแแแก. แแก แจแแแซแแแแ แแแแแแแแแแแ แแงแแก แชแแแแแแ, แแแแ แ แแแแคแแแฃแ แแชแแแก แกแฎแแ แแแฌแแแแแ. แแฅแแแแ แแแแแแแแแแ แ, แฉแแแ แแแญแแ แแแแ แแแ, แ แแแ แแแแแฌแแแแ แ แฃแแแแแก แแแฌแแแแแ แแแแแซแแก id-แกแ แแ แแแก แคแแฅแขแแแ แแ แแแกแแแแ แแก แจแแ แแก. แแก แ แฃแฅแ แแ แแก แคแฃแแฅแชแแ:
case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}
แแกแแแ แคแฃแแฅแชแแแก แแแแฎแแ แชแแแแแแแก แ แแแแแแแแ แจแแกแแซแแ แแแ แแ แกแแแแแก.
- แแฃ แฉแแแ แแแชแแ แคแแฅแขแแแ แแแ แแแกแแแแ แแแแ แแแแแแแแแแแแ, แแแแแซแแก แฐแแกแขแแแแก แแแกแขแแแแชแแแก แแ แแก, แแแจแแ แจแแแแแซแแแ Scala แแแแแก แแแแแ แแ แแแ แ แแแแฃแ แ แแแกแแแแ แแแแแ แแ แแแจแแแแ แจแแแแแแแจแ (แ แแแแแแช แแกแ แฃแแแแก แแแแแแแแชแแแก แแ แแแก แจแแแแฌแแแแแก แแ แจแแแแแ แแฌแแ แแแแแก แแแขแแแ แแชแแแก แขแแกแขแแก แแแแแแแฅแขแก). แแ แจแแแแฎแแแแแจแ แฉแแแแ แ แฃแแแแแก แคแฃแแฅแชแแ แชแแแแแแแ แกแขแแขแแแฃแ แแ แแ แจแแแซแแแแ แแแแแ แขแแแแแก แแกแแแแกแแแแแแ
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
แแแขแแ แแแแ แแแแแก.
แแแแกแแฎแฃแ แแแแก แแแแแ แแแแกแ แแ แแแแคแแแฃแ แแชแแแก แแแแแ แแแแ แแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แกแแกแขแแแแก แแแแแแแแแแก แจแแกแแฅแแแแแแ แแ แ แชแแแแแฃแแ แแแแแซแแ. แฉแแแ แฃแแ แแแแ แฃแแแ แจแแแฅแแแแ
แแ แ แแแแแซแแก แแแแคแแแฃแ แแชแแ
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
, แฎแแแ echo แแแแแแขแ แจแแฌแงแแแแ แแแแคแแแฃแ แแ แแแฃแแ แกแแกแ แฃแแ แฎแแแแ แซแแแแแแแก แจแแแแแ. แแฎแแแแ
แแแแแแแแ แแแแก แกแแแ แแ แแ แแชแแกแ
แแแแฎแแ, แ แแแแ แชแแแแก แแก แแแแแแแ แแแแคแแแฃแ แแชแแแกแแแ แแฃแจแแแแแก แแแแก.
แแแแแก แกแแฎแแ แแแแคแแแฃแ แแชแแ แจแแแแแแแแ แแฅแแแแ แแ แแแแแแแฃแจแแแแแก แแ แขแแคแแฅแขแก. แแแแแแจแแฌแแแแแแ แแแแคแแแฃแ แแชแแแก แแ แขแแคแแฅแขแแก แแแแแงแแคแ แกแฎแแ แแแแแก แแ แขแแคแแฅแขแแแแกแแแ. แฎแจแแ แแ แฉแแแ แจแแแแแซแแแ แแแฅแแแแแก แแ แแแแแ แแแแคแแแฃแ แแชแแ แแแแแ แแแแแก แแแแแแ. แแ แ แ แแฅแแ แฃแแแ, แฉแแแ แจแแแแแซแแแ แแแฅแแแแแก แกแฎแแแแแกแฎแแ แแแแคแแแฃแ แแชแแแก แคแแแแแแแแแก แแ แแแแแ แแแ แกแแ. แแแแคแแแฃแ แแชแแแจแ แฉแแแ แจแแแแแซแแแ แจแแแแ แฉแแแ แแแแแแแแแแแแแก แแแแแ แแขแฃแแ แแแ แกแแแแ แแ แแก แแฃแแแแแ แแแ แฉแแแ, แ แแชแ แแ แแแแคแแแฃแ แแชแแแก แแแแแแแแแกแแแ.
แแแแคแแแฃแ แแชแแแก แชแแแแแแแ แฎแแแแ แแแแแก แจแแชแแแ. แแกแ แ แแ, แแก แฃแแแ แแงแแก แแแคแแ แฃแแ แฎแแ แแกแฎแแก แฃแแ แฃแแแแแงแแคแแก แแแแแ แแ แแชแแกแแ:
แแแแแแ -> PR -> แแแแแฎแแแแ -> แจแแ แฌแงแแ -> แฃแฌแงแแแขแ แแแขแแแ แแชแแ -> แฃแฌแงแแแขแ แแแแแแแแแ
แแแแแแแแก แจแแแแแแ แจแแแแแแแแ:
- แแแแคแแแฃแ แแชแแ แแแแแแแแแแ แฃแแแ แแแแแ แแขแฃแแ แกแแกแขแแแแก แแแแแแแแแกแแแแก. แ แแแแ แช แฉแแแก, แแ แแ แกแแแแแก แแแแแซแแแก แจแแ แแก แแ แแกแฌแแ แ แแแแจแแ แ.
- แแ แแ แแก แแแแแแ แแแแคแแแฃแ แแชแแแก แจแแชแแแ แแฎแแแแ แแ แ แแแแแซแจแ. แฃแกแแคแฃแซแแแแ แจแแกแแแ แแ แแแแแแ แแ แขแแฅแกแขแฃแ แ แคแแแแแก แจแแชแแแ. แแกแ แ แแ, แแแแคแแแฃแ แแชแแแก แแ แแคแขแ แแแแแแแแ แจแแกแแซแแแแแแ แฎแแแแ.
- แแแแคแแแฃแ แแชแแแก แแชแแ แ แชแแแแแแแแแแก แแแแแแแแ แแแแแแ แแ แแ แแก.
- แแแแคแแแฃแ แแชแแแก แชแแแแแแแแแแก แฃแแแขแแกแแแ แแแฐแงแแแแ แแแแแแแแ แแแแก แแแแแ แแ แแชแแกแก แแ แแแแแแแก แแแ แแแแฃแ แแแแฎแแแแแก.
แแแญแแ แแแแ แแฃ แแ แ แชแแแแ แกแแชแแแ แฌแแ แแแแแแก แแแแคแแแฃแ แแชแแแกแแแแก? แฌแแ แแแแแแก แแแแคแแแฃแ แแชแแ แจแแแซแแแแ แจแแแชแแแแแก แกแแแกแแขแแฃแ แแแคแแ แแแชแแแก, แ แแแแแแช แแแกแฃแ แก แแแแ แ แแแแแแแแแกแแแแแก แแแฃแฌแแแแแแ แจแแแแแแฎแแ. แแกแ แ แแ, แจแแกแแซแแแ แฆแแ แแแก แชแแแแแฃแแ แกแแชแแแ แจแแแฆแฃแแฃแแ แฌแแแแแแ, แ แแแแแแช แจแแแชแแแก แฌแแ แแแแแแก แแแแคแแแฃแ แแชแแแก. แฉแแแ แจแแแซแแแแ แแแแงแแ แแแแคแแแฃแ แแชแแ แแ แแแฌแแแแ - แแ แแ, แ แแแแแแช แจแแแชแแแก แฌแแ แแแแแแก แงแแแแแแ แฆแแ แแแ แแแแขแ แแแก แแ แแ แแ, แ แแแแแแช แจแแแชแแแก แแแแคแแแฃแ แแชแแแก แกแแแแฃแแแ แแแฌแแแก. แแก แกแแจแฃแแแแแแก แแแกแชแแแก แแแแแแแแแ แแแแก แฃแแแขแแกแแแแก แฌแแแแแ แฐแฅแแแแแก แแแ แแแแขแ แแแแก แแแ แฃแแ แแแแแกแแแแแ, แฎแแแ แจแแแฆแฃแแแก แฌแแแแแ แแแ แแแแช แแแ แซแแแแแแ แ แกแแแแแแแ. แแแแก แแแฆแฌแแแ แแแ แขแแแแ แจแฃแแแแแฃแ แ แแแฎแแกแแแแแแแแแแก แแแแแงแแแแแแ แแแแฃแแแกแฎแแแแ แแแ แแแแขแ แแก แแแแจแแแแแแแแแแ.
แแแ แแแชแแแแ
แแแแฎแแ แจแแแแแแแแแแแฃแแ แแแแแแแแก แแแแแแแแ แแ แฃแแ แงแแคแแแ แแฎแแ แแแแ แแแแคแแแฃแ แแชแแแก แแแ แแแแก แกแฎแแ แขแแฅแแแแแกแแแ แจแแแแ แแแแ.
แฃแแแ แแแแแก แงแแแแแกแ, แฉแแแ แฉแแแแแแแแแ แ แแแแแแแแ แแแขแแ แแแขแแแแก แแแแคแแแฃแ แแชแแแก แจแแแแแแแแแแแฃแแ แแแแก แกแฎแแแแแกแฎแแ แแกแแแฅแขแแกแแแแก:
- แขแแฅแกแขแฃแ แ แคแแแแ แกแแแแแแ แแแแฅแแแแแ.
- แแแกแแฆแแแแก แแแแจแแแแแแแแก แชแแแขแ แแแแแแแฃแแ แกแแชแแแ (แ แแแแ แแชแแ
etcd
/zookeeper
). - แฅแแแแ แแชแแกแแก แแแแแแแแแขแแแ, แ แแแแแแ แฎแแแแฎแแ แแแแคแแแฃแ แแชแแ/แแแแแขแแแ แแแ แจแแกแแซแแแแแแแ แแ แแชแแกแแก แแแแแขแแแ แแแแก แแแ แแจแ.
- แแแแคแแแฃแ แแชแแ แแ แขแแคแแฅแขแแก แแแ แแ แแ แแแ แกแแแก แแแแขแ แแแ.
แขแแฅแกแขแฃแ แ แคแแแแ แแซแแแแ แแแ แแแแฃแ แแแฅแแแแแแแก ad-hoc แจแแกแฌแแ แแแแแแก แแแแแกแแแ แแกแแ. แกแแกแขแแแแก แแแแแแแกแขแ แแขแแ แก แจแแฃแซแแแ แจแแแแแแก แกแแแแแแ แแแแแซแจแ, แจแแแขแแแแก แชแแแแแแแ แแ แฃแแ แแแแ แแแแแขแแแ แแแก แกแแ แแแกแ. แแก แจแแแซแแแแ แแ แช แแกแ แแแ แแ แแงแแก แฃแคแ แ แแแแ แกแแกแขแแแแแแกแแแแก. แชแแแแแแแแก แแแฆแแ แแแแแ แแ แ แฉแแแ. แชแแแแแแแ แแ แแแแแฎแแแแแ แกแฎแแ แฌแงแแแแ แแแแแแ. แจแแกแแซแแแ แ แแฃแแ แแงแแก แแแแก แแแ แแแแแ, แแฃ แ แแ แแแแแแฌแแแ แชแแแแแแแ. แแก แแ แแ แแก แแแแแชแแแแ. แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแแ แกแแแฅแขแแแแแแ แแแแแแแกแขแ แแขแแ แก แจแแฃแซแแแ แฃแแ แแแแ แแแแแแฌแงแแก แแแแคแแแฃแ แแชแแแก แแแแแฎแแแแ แแ แ-แแ แ แกแฎแแ แแแแแซแจแ.
(Btw, แแฃ แกแแแแแแแ แแแแญแแ แแแแแ แขแแฅแกแขแแก แแแแคแแแฃแ แแชแแแก แคแแแแแแแก แแแแแงแแแแแแก แแแฌแงแแแ, แฉแแแ แแฎแแแแ แฃแแแ แแแแแแแขแแ แแแ แกแแ แ + แแแแแแแขแแ แ, แ แแแแแแช แแแแแแก แฌแแ แแแฅแแแแก Config
แแแ แแคแแ แแ แแก แกแแแแแ แแกแ แแฅแแแแ แขแแฅแกแขแแก แแแแคแแแฃแ แแชแแแก แแแแแงแแแแแแก แแแกแแฌแงแแแแ. แแก แแกแแแ แแฉแแแแแแก, แ แแ แแแแแแแแชแแแก แแ แแแก แแแแคแแแฃแ แแชแแแก แกแแ แแฃแแ แชแแขแ แฃแคแ แ แแชแแ แแ แแแแ แ แขแแฅแกแขแแ แแแคแฃแซแแแแฃแแ แแแแคแแแฃแ แแชแแแก แกแแ แแฃแแ, แ แแแแแ แขแแฅแกแขแแ แแแคแฃแซแแแแฃแ แแแ แกแแแจแ แฉแแแ แแแญแแ แแแแ แแแแแขแแแแแ แแแแ.)
แชแแแขแ แแแแแแแฃแแ แแแกแแฆแแแ-แแแแจแแแแแแแแก แจแแแแฎแแ แแแ แแ แแแฅแแแแแแแ แแแแแชแฎแแแแก แแแขแ แแแ แแแแขแ แแแแก แแแแแฌแแแแแแกแแแแก. แแฅ แฉแแแ แฃแแแ แแแคแแฅแ แแ แแแแแ, แแฃ แ แแก แแแแแฉแแแแ แแแแคแแแฃแ แแชแแแก แแแแจแแแแแแแแแแ แแ แ แ แแ แแก แแฎแแแแ แแแแแชแแแแแ. แแแชแแแฃแแ แคแฃแแฅแชแแ C => A => B
แฉแแแ แฉแแแฃแแแแ แแ แแฃแฌแแแแแ แแจแแแแแแ แชแแแแแแแ แแแแจแแแแแแแแแก C
"แแแแคแแแฃแ แแชแแ", แฎแแแ แฎแจแแ แแ แแชแแแแแแแ แแแแแชแแแแแ A
- แฃแแ แแแแ แจแแแงแแแแแ แแแแแชแแแแแ. แแแแคแแแฃแ แแชแแ แฃแแแ แแแแฌแแแแก แคแฃแแฅแชแแแก แแแแแชแแแแแแ แแแ แ A
. แแ แแแแแแแ แแแแแแแแแแ แ, แจแแแแแซแแแ แแแฅแแแ, แ แแ แชแแแแแแแแแแก แแแกแแแแแแแแ แกแแฎแจแแ แแ, แ แแช แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแแแคแแแฃแ แแชแแแก แแแแแชแแแแแแก แแแแแกแฎแแแแแแแแ แแฎแแแแ แแแแแชแแแแแแกแแแ. แแกแแแ แแแแแชแแแแแ แฉแแแฃแแแแ แแ แแแแแก แแ แแ แฌแงแแ แแแแ (แแแแฎแแแ แแแแแแแ) แแ แแแแคแแแฃแ แแชแแ แแแแแก แกแฎแแ แฌแงแแ แแแแ (แแแแแแแกแขแ แแขแแ แ). แแแ แแแแขแ แแแแแ แฃแ แแแแ แแแแ, แ แแแแแแแช แจแแแซแแแแ แจแแแชแแแแแก แแแแชแแแแแแแชแแแก แแ แแชแแกแแก แจแแแแแ, แแฌแแแแก แแแแแชแฎแแแแก แกแแ แแฃแแแก แแ แแแก. แแกแแแ แแแ แแแแขแ แแแแกแแแแก แฉแแแ แแแแแแฌแแแก แแแแ แแแฌแแแแแแก แแแฅแแแแแแ, แแแแแแแ แแ แแแแแแแชแแ, แแ แแกแฌแแ แ แแแแจแแแแแแแแแแก แแแแฃแจแแแแแ. แแแแขแแ, แแ แแแ แแแแก แกแแ แแฃแแแก แจแแกแแแชแแ แแแแแ, แฃแแฏแแแแกแแ แจแแแแแชแแ แแ แแ แแแ แแแแขแ แแแแก แ แแแแแแแแ, แ แแแแแแแช แจแแแซแแแแ แจแแแชแแแแแก แแแจแแแแแก แแ แแก (แแ แแฃแแแแช แกแแแ แแแ แแฆแแแแคแฎแแ แแ แแกแแแ).
แแ แแแกแขแแก แแแ แกแแแฅแขแแแแแแ แฉแแแ แฃแแแ แแแแแแกแฎแแแแแ แกแขแแขแแแฃแ แ แแ แแแแแแแฃแ แ แแแ แแแแขแ แแแ. แแฃ แกแแ แแแกแแก แแแแแแ แแแแแฎแแแก แ แแแแแแแแ แแแ แแแแขแ แแก แแจแแแแ แชแแแแแแแแก แแแจแแแแแก แแ แแก, แแแจแแ แแแ แจแแแซแแแแ แแฃแฌแแแแ แแแแแแแฃแ แ แแแ แแแแขแ แแแ. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แแกแแแ แกแขแแขแแแฃแ แแ แแ แแแแ แแแแคแแแฃแ แแชแแ แจแแกแแซแแแแแแแ แจแแแแแแแแแแแฃแแ แแแแแแแแก แแแแแงแแแแแแ. แแแแแแแฃแ แ แ แแแแแคแแแฃแ แแชแแแกแแแแก แจแแแซแแแแ แกแแญแแ แ แแแฎแแแก แกแฎแแ แแแแแแแแแ. แแแแแแแแแ, แกแแกแขแแแแก แแแฌแแแแแ แจแแแซแแแแ แแแแแแขแแแ แแแก แแฎแแแ แแแแคแแแฃแ แแชแแแก แแแ แแแแขแ แแแแ, แแกแแแ แ แแแแ แช แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แชแแแแแฃแแ แแ แแชแแกแแแแก แแแแแขแแแ แแแ.
(แฉแแแ แแแแ แซแแแแแฃแแ แแแ แแ, แ แแ แแแแแแแ แแแแชแแแแ แแแจแแแแแก แ แแแแแคแแแฃแ แแชแแ, แ แแแแแ แแก แแ แแแก แกแแกแขแแแแก แกแแ แแฃแแแก.
แจแแแซแแแแ แฃแคแ แ แแแ แขแแแ แแงแแก แแฎแแแแ OS-แแก แแฎแแ แแแญแแ แแแ แแแงแ แแแแแ แแ แแชแแกแแแแก แแแแแขแแแ แแแแกแแก. แแฃแแชแ, แแก แจแแแซแแแแ แงแแแแแแแแก แแ แแงแแก แจแแกแแซแแแแแแ.)
แกแขแแขแแแฃแ แ แแแแคแแแฃแ แแชแแแก แแแแแงแแแแแแก แแ แ-แแ แแ แแแแจแแแแแแแแแ แแกแแแฅแขแ, แ แแแแแแช แแแแฏแแ แแแซแฃแแแแก แแแแแแแแแแก แแแแแฎแแแแ แแแแแแแฃแ แ แแแแคแแแฃแ แแชแแ (แกแฎแแ แแแแแแแแแก แแแ แแจแ) แแ แแก แกแแ แแแกแแก แจแแคแแ แฎแแแ แแแแคแแแฃแ แแชแแแก แแแแแฎแแแแแก แแ แแก. แแแ แแแแช, แแฃ แฉแแแ แแแแฌแแแก แชแแแแแแแแแแก แจแแขแแแ แกแขแแขแแแฃแ แแแแคแแแฃแ แแชแแแจแ, แฉแแแ แฃแแแ แแแแแแขแแแ แแแ แกแแกแขแแแ แแกแ, แ แแ แแฎแแแ แแแแจแแแแแแแแแ แแคแแฅแขแฃแ แ แแแฎแแแก. แจแแคแแ แฎแแแแก แแแแฎแแแแแแ แแแแกแฎแแแแแแฃแแแ แกแฎแแแแแกแฎแแ แกแแกแขแแแแแแกแแแแก, แแแแขแแ แแก แจแแแซแแแแ แแ แช แแกแ แแ แแขแแแฃแแ แแงแแก. แแฃ แแก แแ แแขแแแฃแแแ, แแแจแแ แฌแแแแกแฌแแ แฃแแแ แแแแแแแแแ แแแแแกแแแแ แ แกแแกแขแแแแก แแแแแขแแแ แแแ. แแแแแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแฎแแ แชแแแแแ
แ แแช แจแแแฎแแแ แแแแคแแแฃแ แแชแแแก แจแแแแ แฉแฃแแแแแก แแแ แกแแฃแแ แแ แขแแคแแฅแขแแก แจแแแแแ แแฃ แแแ แแ? แแแแคแแแฃแ แแชแแแก แจแแแแฎแแ แแ แขแแคแแฅแขแแก แจแแแแแ แแแจแแแแก แฃแแแขแแก แจแแแแฎแแแแแจแ, แ แแ แแ แแแแคแแแฃแ แแชแแแ แแแแแ แ แแแแแ แฎแแ แแกแฎแแก แฃแแ แฃแแแแแงแแคแแก แแ แแชแแกแ, แ แแแแ แช แกแฎแแ แแ แขแแคแแฅแขแแแแ. แแกแ แ แแ, แจแแแซแแแแ แแแ แฌแแฃแแแแฃแแ แแงแแก, แ แแ แแแแคแแแฃแ แแชแแ แแแ แแ แฎแแ แแกแฎแแก แแ แกแแแแแ. แแแ แแฅแแ, แชแแแแ แคแแแแจแ แแแแคแแแฃแ แแชแแ แแแจแแแแก, แ แแ แแ แแ แกแแแแแก แแแแแ แแแแก แจแแกแแฎแแ, แแฃ แแแ แแ แ แแขแแ แจแแแขแแแ แชแแแแแแแแแ แแ แคแแแแจแ. แแก แแแแจแแแแแแแแแแ? แฉแแแ แแแฏแแ แ, แ แแ แฌแแ แแแแแแก แกแแกแขแแแแแแก แฃแแแขแแกแแแแกแแแแก แฃแแแแแกแแ แกแขแแแแแฃแ แ แแ แแแฆแแแ แฎแแ แแกแฎแแก แแแแคแแแฃแ แแชแแ.
แแ แขแแคแแฅแขแแก แแแ แกแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแ แแแแแ แ แแแแก แจแแแฅแแแ, แ แ แแแแจแแแแแแแแแก แจแแแชแแแก, แ แ แคแฃแแฅแชแแแแแ แฉแแ แแฃแแ/แแแแแ แแฃแแ, แแแ แแงแ แแแกแฃแฎแแกแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแแแฃแ แชแแแแแแแแแ. แแแก แจแแกแแซแแแ แแแ แแแแฃแแ แซแแแแกแฎแแแแ แแแกแญแแ แแแก แแ แขแแคแแฅแขแแก แจแแแแแ แแแแคแแแฃแ แแชแแแก แจแแกแแแแ แฉแฃแแแแแแ แแ แแก แแแแแแแแก แแ แฉแแแแแแ.
แแแแแแแแ แแ แฃแแ แงแแคแแแ แแฎแแ แแแแ
แแฅ แฉแแแ แแแกแฃแ แก แแแแแแงแแ แจแแแแแแแแแแแฃแแ แแแแแแแแก แ แแแแแแแแ แฃแแแ แแขแแกแแแ แแ แแแแแแฎแแแแ แแแแแแ แแ แฃแแ แงแแคแแแ แแฎแแ แ.
แฃแแแ แแขแแกแแแแแ
แกแ แฃแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแแแแแแแ แแแแแ แแแแคแแแฃแ แแชแแแก แแแฎแแกแแแแแแแแแ:
- แแแแคแแแฃแ แแชแแแก แกแขแแขแแแฃแ แ แจแแแแฌแแแแ. แแก แแซแแแแ แแแฆแแแ แแแแแก แแแแแแก, แ แแ แแแแคแแแฃแ แแชแแ แกแฌแแ แแ แขแแแแก แจแแแฆแฃแแแแแแก แแแแแแแแกแฌแแแแแแ.
- แแแแคแแแฃแ แแชแแแก แแแแแแ แ แแแ. แ แแแแ แช แฌแแกแ, แกแฎแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแแ แจแแแแแคแแ แแแแแ แแแฅแกแแแฃแ แชแแแแแแก แฉแแแแชแแแแแแ.
Scala-แก แแแแแงแแแแแแ แจแแแแซแแแแ แแแแแแงแแแแ แแแแก แคแฃแแฅแชแแแแแก แคแแ แแ แกแแแฅแขแ แ แแแแคแแแฃแ แแชแแแก แแแกแแฃแแฏแแแแกแแแแแ. แแแแแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแแงแแแแ แแแแกแแแแแ แแแแฃแแแกแฎแแแแ แแแแจแแแแแแแแแแก แฃแแ แฃแแแแแกแแงแแคแแ, แแแแแฅแขแแแ แกแฎแแแแแกแฎแแ แแแกแจแขแแแแก แแแกแแงแแแแแแแ, แจแแแแแซแแแ แแแแแแ แแแval
s แแแแแกแแแฆแแ แแแ แแฎแแแแ แแ แแฎแแ แแแ แ แแแแแจแ (DRY). แจแแกแแซแแแแแแแ แแแขแแ แแขแฃแ แฃแแ แแแแแแแแแแ แแแแแแก แแ แแแ แแแแฃแแ แแแแกแแแแก แแแแแแแแแแแก แแแแแงแแแแแ (Seq
,Map
, แแ แ.แจ.). - DSL. Scala-แก แแฅแแก แฆแแ แกแแฃแแ แแฎแแ แแแญแแ แ DSL แแแแฌแแ แแแแกแแแแก. แแ แคแฃแแฅแชแแแแแก แแแแแงแแแแแ แจแแกแแซแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแก แแแกแแแงแแ แแแแแ, แ แแแแแแช แฃแคแ แ แแแกแแฎแแ แฎแแแแแ แแ แกแแแแแแ แแแแฎแแแ แแแแแกแแแแก แแแกแแฎแแ แฎแแแแแแ, แ แแแ แกแแแแแแ แแแแคแแแฃแ แแชแแ แแแแแแฃแแแแแ แแงแแก แฌแแแแแฎแฃแแ แแแแแแแก แแแแฎแแแ แแแแแแแกแแแแก.
- แแแแแแแแแ แแ แแแแแแแแแแ แฃแแแแ แแแแแซแแแจแ. แแแแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแ แ แแแแแแแก แแแแคแแแฃแ แแชแแแก แแ แ-แแ แแ แฃแแแ แแขแแกแแแ แแ แแก แแก, แ แแ แงแแแแ แแแแจแแแแแแแ แแแแชแ แแ แแ แแก แแแแกแแแฆแแ แฃแแ แแ แแฎแแ แแ แจแแแแแ แฎแแแแฎแแ แแแแแแงแแแแแ แงแแแแ แแแแแแแก, แกแแแแช แฉแแแ แแแญแแ แแแแ. แแกแแแ แแแ แแคแแ แฃแกแแคแ แแฎแ แแแ แขแแก แแแแแแ แแชแแแแ, แ แแแ แฃแแ แฃแแแแแงแแก, แ แแ แงแแแแ แจแแกแแซแแ แกแฌแแ แแแแคแแแฃแ แแชแแแจแ แกแแกแขแแแแก แแแแแซแแแ แแ แแกแ แแ แแแแแ แแแแแ แแกแแฃแแ แแแแ. แแ แกแแแแแก แแจแแแ แ แแแแแแแแแแฃแแแแแแ แแแแแซแแแก แจแแ แแก, แ แแช แแ แแฃแแแแก แแแแแแ แแ แกแแ แแแกแแก แแแฌแแแแแแก แแแแแฌแงแแแแก.
- แชแแแแแแแแแแก แแแฆแแแ แฎแแ แแกแฎแ. แแแแคแแแฃแ แแชแแแก แแแแแแก แกแแแ แแ แแแแแแแ แแชแแแแแ แแแ แแแแฃแ แ PR แแ แแชแแกแแก แแแจแแแแแแ, แแแแแแก แฎแแ แแกแฎแแก แแแฆแแ แกแขแแแแแ แขแแแก แแกแแแ แแแแคแแแฃแ แแชแแแจแ.
- แแแแคแแแฃแ แแชแแแก แแ แแแ แแฃแแ แชแแแแแแแแแ. แ แแแแกแแช แฉแแแ แแแแแแแแ แ แแแแ แชแแแแแแแแก แแแแคแแแฃแ แแชแแแจแ, แแแขแแแแขแฃแ แ แแแแแแแแแ แฃแแ แฃแแแแแงแแคแก แงแแแแ แแแแแซแแก แแแแแฎแแแแแก.
- แแแแแชแฎแแแแก แแแแแ แขแแแแแ. แแแแแแแชแแแก แแ แกแญแแ แแแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแแแแ แแ แแแแแฌแแแแ แแ แแ แแกแฌแแ แ แแแแคแแแฃแ แแชแแแก แแแแจแแแแแแแแแแก แแแแฃแจแแแแแ. แแก แแแแ แขแแแแแก แแแแแแ แแแแแแแชแแแก. (แกแแ แแฃแแแก แแแ แแแแฃแแ แแ แแ แแ แแก แแแแแ แแแแคแแแฃแ แแชแแแจแ, แแแแ แแ แแก แแ แแก แจแแแแแแฃแแ แแแญแ แแแ แฃแกแแคแ แแฎแแแแแก แแแแแ แ.) แฉแแแฃแแแแ แแแ แแแแคแแแฃแ แแชแแแก แแแแ แฃแแแแ แกแแแแแแ แแแ แขแแแแ - แฃแแ แแแแ แแแแแแขแแ แแแแแ แแฃแแ แแแฌแแแแแ. แฃแคแ แ แแแแแแแ แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแฌแงแแแ แแ แแแแแขแแแแแ แแแฌแแแแแแก แแแแฎแแ แชแแแแแแแก แแแแแแแแแแแ แแแแแแแแ.
- แแแ แกแแฃแแ แแแแคแแแฃแ แแชแแ. แแแแแแแแแแ แ แแฅแแแแ, แ แแ แแแแคแแแฃแ แแชแแแก แชแแแแแแแแแ แแแฐแงแแแแ แแแแแแแแ แแแแก แแแแแ แแ แแชแแกแก, แจแแแแแแ แแแฆแแแ แแ แขแแคแแฅแขแก แฃแแแแแแฃแ แ แแแ แกแแแ. แแก แแแแซแแแแก แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ แแแแคแแแฃแ แแชแแแก แฃแแแ แแแแแ แแแแก. แฉแแแ แจแแแแแซแแแ แแแแแแแแแกแแ แแแแคแแแฃแ แแชแแ, แ แแแแแแช แแแแแแงแแแแแแแ แแ แแ แฌแแแก แฌแแ แแ แแก แแแฃแจแแแแแก แแฃแกแขแแ แแแแแ แแแแ. แกแขแแแแแฃแ แ แแแแคแแแฃแ แแชแแ แแฃแแฏแแแแกแแแก แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แแ แแแแแแแ แแแแแแแแก แแ แกแแแแแแแแแแก. แแแแคแแแฃแ แแชแแ แคแแฅแกแแ แแแแ แแแแแแแแชแแแก แแ แแก แแ แแ แจแแแซแแแแ แแแแแแแ แจแแแชแแแแแก แฌแแ แแแแแแก แกแแกแขแแแแจแ.
- แแแแฃแแแ แฃแแแแ. แจแแแแแแแแแแแฃแแ แฉแแ แฉแ แแแแฃแแแ แฃแแแ แแ แแแแฃแแแแ แจแแแซแแแแ แแแแ แแแแแแแก แกแฎแแแแแกแฎแแ แแแแ
แกแฎแแแแแกแฎแแ แแแแคแแแฃแ แแชแแแก แแฎแแ แแแญแแ แ (แแแแคแแแฃแ แแชแแ/แแแแแแแแแ). แแแ แซแแ, แจแแกแแซแแแแแแแ แแฅแแแแแ แแชแแ แ แแแกแจแขแแแแก แแ แแ แแแแแซแแก แแแแแแแแแ แแ แแแแ แแแกแจแขแแแแก แแ แแแแ แแแแแซแแก แแแ แแแแขแ แ. แแแแแแจแแฌแแแแแแ แแฅแแแแแ แแ แแแแแ แฌแแ แแแแแแก แแแแแแแแแ. - แขแแกแขแแ แแแ. แกแแขแแกแขแ แแแแแแแแกแแแแก แจแแแซแแแแ แแแแขแแ แแแฃแแ แกแแ แแแกแแก แแแแแ แแแ แแ แแแแแแแแแแฃแแแแแก แกแแฎแแ แแแแแงแแแแแ แฃแกแแคแ แแฎแแ. แ แแแแแแแแ แแแแกแฎแแแแแแฃแแ แขแแกแขแแ แแแแก แแแแแแแแแ แกแฎแแแแแกแฎแแ แแแฌแแแแแแ แจแแชแแแแแ แแแแขแแ แแแแ แจแแแซแแแแ แจแแแแ แฉแฃแแแแก แแ แแแ แแฃแแแ.
- แแแขแแแ แแชแแแก แขแแกแขแแ แแแ. แแแแฏแแ แแแแแฌแแแแแฃแ แกแแกแขแแแแแจแ แ แแฃแแแ แแแขแแแ แแชแแแก แขแแกแขแแแแก แฉแแขแแ แแแ. แแฆแฌแแ แแแ แแแแแแแแก แแแแแงแแแแแแ แกแ แฃแแ แแแแแฌแแแแแฃแแ แกแแกแขแแแแก แฃแกแแคแ แแฎแ แแแแคแแแฃแ แแชแแแก แฉแแกแแฌแแ แแ, แฉแแแ แจแแแแแซแแแ แแแแแขแแ แแ แงแแแแ แแแแแฌแแแแแฃแแ แแแฌแแแ แแ แ แกแแ แแแ แแ แแแแขแ แแแแ แแแแแ แแแแ. แกแแขแฃแแชแแแก แแแแแซแแ แแแแแแแ
แ แแแแกแแช แแ แ-แแ แแ แกแแ แแแกแ แแแฃแฌแแแแแแแแ.
แแแแแแแแแแแแแ
แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แแแแแแแ แแแแกแฎแแแแแแแ "แแแ แแแแฃแ แ" แแแแคแแแฃแ แแชแแแกแแแ แแ แแก แจแแแซแแแแ แแ แแแแ แแแก แงแแแแ แกแแญแแ แแแแแก. แแฅ แแ แแก แจแแแแแแแแ แแแแคแแแฃแ แแชแแแก แ แแแแแแแแ แฃแแ แงแแคแแแ แแฎแแ แ:
- แกแขแแขแแแฃแ แ แแแแคแแแฃแ แแชแแ. แแก แจแแแซแแแแ แแ แแงแแก แจแแกแแคแแ แแกแ แงแแแแ แแแแแแแชแแแกแแแแก. แแแแแแ แ แจแแแแฎแแแแแจแ แกแแญแแ แแ แฌแแ แแแแแแก แแแแคแแแฃแ แแชแแแก แกแฌแ แแคแแ แแแคแแฅแกแแ แแแ แฃแกแแคแ แแฎแแแแแก แงแแแแ แแแแแก แแแแ แแแก แแแแแ. แแก แแแแแแแ แฃแคแ แ แแ แแฃแแแแก. แจแแแแแแ แแ แฎแแแแฎแแแ แแแแแแแแแ แกแแญแแ แแ แแแแคแแแฃแ แแชแแแก แแแแแกแแแแ แ แชแแแแแแแแก แแแแฎแแ แชแแแแแแแก แจแแแแแ. แแก แแ แแก แแแแกแแแแช แแ แขแแแ แแแช.
- แแแแคแแแฃแ แแชแแแก แแแแแ แแชแแ. แ แแแแกแแช แแแแคแแแฃแ แแชแแ แแแแแ แแ แแแแ แ แแแแ แแแขแแแแขแแแแชแแแก แฎแแแกแแฌแงแแก แแแแ , แแก แแแแแแแ แแแแแฎแแแก แจแแแแแแ แแแแแแแแชแแแก (แ แแช, แแแแแก แแฎแ แแ, แจแแแซแแแแ แแแ แแแฎแแ แฎแแแก). แจแแกแแซแแแ แแแแแขแแแแแ แซแแแแกแฎแแแแ แแแกแญแแ แแแก แแ แแแแแขแแแแแ แแแแแฏแแก แแแขแแแ แแ แแแแก build แกแแกแขแแแแจแ.
- แแแกแขแ แฃแแแแขแแแ. แแฆแแก แแแแแแงแแแแแ แฃแแแ แแแ แแแกแขแ แฃแแแแขแ, แ แแแแแแช แแงแ แแแแแ แขแแฅแกแขแแ แแแคแฃแซแแแแฃแ แแแแคแแแฃแ แแชแแแก. แฒแแแแแ แแ แแแแแแแ
แแ แแฅแแแแ แแแแแงแแแแแฃแแ แแแแคแแแฃแ แแชแแแก แจแแแแแแแกแแก. - แกแแญแแ แแ แแแ แแแแแแแก แจแแชแแแ. แแแแแแแแแ แแแ แแ DevOps แแชแแแแแ แขแแฅแกแขแแก แแแแคแแแฃแ แแชแแแก แคแแแแแแก. แแแแคแแแฃแ แแชแแแก แจแแแแแแแก แแแแ แแแแแแแก แจแแแซแแแแ แฃแชแแแฃแ แ แแฆแแแฉแแแแก.
- แแแแแแแแ แแแแแ แแแแคแแแฃแ แแชแแแก แแแแแ แแแแแแ แกแแญแแ แแ แแแฆแแแ แฎแแ แแกแฎแแก แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแแแแแแ แแแแก แแ แแชแแกแ.
แแแแฎแแ แชแแแแแแฃแแ แแแแแแแแแก แแแ แแแแฃแแ แจแแแฆแฃแแแแแ แแ แกแแแแแก:
- แแฃ แฉแแแ แแแแแแแแแ แแแแแขแแแแ แแแแคแแแฃแ แแชแแแก, แ แแแแแแช แแ แแ แแก แแแแฎแแแแแแ แแแแแซแแก แแแแแแแแแขแแชแแแก แแแแ , แจแแแแแแแแแ แแ แแแแแแฎแแแ แแแ แแ แแ แกแแแฃแแ แแแแแแแแแขแแชแแแก แแฆแแแฉแแแแจแ. แแก แจแแแซแแแแ แแแแแแ แแแก แแแแแงแแแแแแ
HList
แแ ADT-แแแ (แฅแแแกแแแแก แแแแกแแแ) แแแแแซแแแแก แแแแคแแแฃแ แแชแแแกแแแแก แแแจแแ-แแแแกแแแแแแกแ แแ Cake Pattern-แแก แแแชแแแแ. - แฉแแแ แฃแแแ แแแแแฌแแแแ แ แแแแแแแแ แฅแแแแแก แคแแ แคแแขแ แแแแคแแแฃแ แแชแแแก แคแแแแจแ: (
package
,import
,object
แแแแแแ แแชแแแแ;
override def
's แแ แแแ แแแแขแ แแแแกแแแแก, แ แแแแแแกแแช แแฅแแ แแแแฃแแแกแฎแแแแ แแแแจแแแแแแแแแ). แแก แจแแแซแแแแ แแแฌแแแแแ แแ แแแแแแญแ แแก DSL-แแก แแแแแงแแแแแแ. - แแ แแแกแขแจแ แฉแแแ แแ แแแแแแฎแแแแแ แแกแแแแกแ แแแแแซแแแแก แแแแกแขแแ แแแแก แแแแแแแฃแ แ แแแแแคแแแฃแ แแชแแแก.
แแแกแแแแ
แแ แแแกแขแจแ แฉแแแ แแแแแแฎแแแแ แแแแ แแแแคแแแฃแ แแชแแแก แฌแแ แแแแแแแแก แแแ แแแแแ แฌแงแแ แแก แแแแจแ แขแแแแก แฃแกแแคแ แแฎแ แแแแ. แแแแแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแ แแแแ แแแแแแแชแแแจแ, แ แแแแ แช xml- แแ แกแฎแแ แขแแฅแกแขแแ แแแคแฃแซแแแแฃแแ แแแแคแแแฃแ แแชแแแก แฉแแแแชแแแแแ. แแแฃแฎแแแแแแ แแแแกแ, แ แแ แฉแแแแ แแแแแแแแ แแแแแ แแแแแ Scala-แจแ, แแก แแกแแแ แจแแแซแแแแ แแแแ แแแแแก แกแฎแแ แแแแแแแแ แแแแ แแแแแแ (แ แแแแ แแชแแ Kotlin, C#, Swift แแ แ.แจ.). แจแแแซแแแแ แกแชแแแ แแก แแแแแแแ แแฎแแ แแ แแแฅแขแจแ แแ, แแฃ แแก แแแ แแแ แแ แฏแแแแ, แแแแแแ แแ แซแแแแแแแฃแ แแแแแ.
แ แ แแฅแแ แฃแแแ, แแแแแแแแ แแแแแ แแแแคแแแฃแ แแชแแ แแแแแฎแแแก แแแฆแแแ แฎแแ แแกแฎแแก แแแแแแแแ แแแแก แแ แแชแแกแก. แแแแก แกแแแแชแแแแ แแก แแแแแ แแแแ แแแแแแ แแ แแแฆแแแ แฎแแ แแกแฎแแก แแขแแแชแ แแแแคแแแฃแ แแชแแแก แฃแแ แฃแแแแแงแแคแแก.
แแก แแแแแแแ แจแแแซแแแแ แแแคแแ แแแแแแก แกแฎแแแแแกแฎแแ แแแแ:
- แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแแแ แแแแ แแแแคแแแฃแ แแชแแแก แแแแแแแชแแแก แจแแกแแกแ แฃแแแแแแ แแ แฌแแ แฃแแแขแแแแแแ แแแแแแแแชแแแก แแ แแก แแแแแกแแแแ แ แแแแแแก-แแแแแแฃแ แ แจแแแฆแฃแแแแแแก แฌแแ แฃแแแขแแแแแแแก แจแแแแฎแแแแแจแ.
- DSL แจแแแซแแแแ แแแแฎแแ แชแแแแแแก, แ แแแ แฌแแ แแแแแแแแแก แแแแคแแแฃแ แแชแแ แแแแแแแกแแแแก แแแกแแฎแแ แฎแแแแแ แแแแ.
- แแแแแแแฃแ แ แ แแกแฃแ แกแแแแก แแแ แแแ แแแขแแแแขแฃแ แ แแแแคแแแฃแ แแชแแแก แแแ แแฅแขแแ แแแแ. แแแแแแแแแ, แ แแแแกแแช แฉแแแ แแแ แแแฃแแแ แแแ แแแแกแขแแ แฃแแ แแแแแซแแแแก แ แแแแแแแแแก, แจแแแซแแแแ แแแกแฃแ แก (1) แแแแแซแแแแ แแแแฆแแ แแแแแ แจแแชแแแแแ แแแแคแแแฃแ แแชแแ; (2) แแแแกแขแแ แแก แแแแแฏแแ แ แแฎแแแ แแแแแซแแแแก แแแคแแ แแแชแแแก แแแกแแฆแแแแ.
แแแแแแแ
แแแแแ แแแแแแแ แแแแแแฃแฎแแแ แแแแ แแ แกแแฅแกแแแแแก, แแแแแ แแแแแแก, แแแขแแ แแแฐแแแแก แแ แแแกแขแแก แแ แแแฅแขแแ แแแกแแแ แแชแแฃแแ แแแแแฎแแแฃแ แแแแกแแแแก, แ แแช แแแแแฎแแแ แ แฃแคแ แ แแแแแแ แแแแแฎแกแแ.
แฌแงแแ แ: www.habr.com