E hiahia ana ahau ki te korero ki a koe tetahi tikanga pai mo te mahi me te whirihoranga o te punaha tohatoha. Ko te whirihoranga he tohu tika i roto i te reo whakahiato (Scala) ma te whakamahi i nga momo haumaru. Ko tenei pou he tauira mo taua whirihoranga me te matapaki i nga momo ahuatanga o te whakatinana i tetahi whirihoranga kua whakahiato ki roto i te tukanga whanaketanga katoa.
(
Whakataki
Ko te hanga i tetahi punaha tohatoha pono ko te tikanga ka whakamahia e nga pona katoa te whirihoranga tika, ka tukutahi me etahi atu pona. Ko nga hangarau DevOps (terraform, ansible, penei ranei) ka whakamahia ki te whakaputa aunoa i nga konae whirihoranga (he mea motuhake mo ia node). E hiahia ana hoki matou ki te mohio kei te whakamahi nga kawa whakawhitiwhiti katoa i nga kawa rite (tae atu ki te putanga kotahi). Ki te kore, ka whakauruhia te hototahi ki roto i ta maatau punaha tohatoha. I roto i te ao JVM, ko tetahi hua o tenei whakaritenga ko te ahua o te whare pukapuka kei roto nga karere kawa me whakamahi ki nga waahi katoa.
Me pehea te whakamatautau i te punaha tohatoha? Ae ra, ki ta maatau he whakamatautau wae nga waahanga katoa i mua i to maatau haere ki te whakamatautau whakauru. (Kia taea ai e tatou te taapiri i nga hua whakamatautau ki te wa whakahaere, me whakarato ano he huinga whare pukapuka i te wa whakamatautau me te wa whakahaere.)
I te wa e mahi ana me nga whakamatautau whakauru, he ngawari ake te whakamahi i te ara-akomanga kotahi ki nga waahi katoa i nga waahanga katoa. Ko ta maatau mahi he whakarite kia whakamahia taua ara-akomanga i te wa whakahaere. (Ahakoa ka taea te whakahaere i nga momo pona rereke me nga ara-akomanga rereke, ka nui ake te uaua o te whirihoranga me nga uauatanga o te whakatakotoranga me nga whakamatautau whakauru.) Mo nga kaupapa o tenei pou, e whakaaro ana matou ka whakamahia e nga pokapu katoa te ara-akomanga kotahi.
Ka whanake te whirihoranga me te tono. Ka whakamahi matou i nga putanga hei tautuhi i nga waahanga rereke o te whanaketanga o te papatono. Te ahua arorau hoki ki te tautuhi i nga momo momo whirihoranga. A tuu i te whirihoranga ki roto i te punaha whakahaere putanga. Mena he kotahi noa te whirihoranga i roto i te hanga, katahi ka taea e taatau te whakamahi i te nama putanga. Mena ka whakamahia e matou he maha nga waahanga whakaputa, ka hiahia matou kia maha
manga whirihoranga me tetahi tapanga taapiri hei taapiri i te putanga (hei tauira, te ingoa o te peka). Ma tenei ka taea e taatau te tautuhi i te whirihoranga tika. Ko ia kaitautuhi whirihoranga he rite ki tetahi huinga motuhake o nga pona kua tohatohahia, nga tauranga, nga rauemi o waho, me nga putanga whare pukapuka. Mo nga kaupapa o tenei pou ka whakaaro tatou kotahi noa te peka ka taea e tatou te tautuhi i te whirihoranga i runga i te tikanga ma te whakamahi i nga tau e toru kua wehea e te ira (1.2.3).
I roto i nga taiao hou, ko nga konae whirihoranga he uaua te hanga-a-ringa. I te nuinga o nga wa ka hangaia i te wa e tukuna ana ka kore e pa atu (na reira
I roto i tenei pou ka tirotirohia e matou te whakaaro o te tohu i tetahi whirihoranga i roto i tetahi taonga kua whakahiato.
whirihoranga kua whakahiato
Ko tenei waahanga he tauira o te whirihoranga kua whakahiato. E rua nga ratonga ngawari ka whakatinanahia - te ratonga echo me te kiritaki ratonga echo. I runga i enei ratonga e rua, ka huihuia nga whiringa punaha e rua. I tetahi waahanga, kei runga nga ratonga e rua i runga i te node kotahi, i tetahi atu whiringa - i runga i nga waahanga rereke.
Ko te tikanga he maha nga pona kei roto i te punaha tohatoha. Ka taea e koe te tautuhi i nga node ma te whakamahi i nga uara o etahi momo NodeId
:
sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeId
ranei
case class NodeId(hostName: String)
ranei
object Singleton
type NodeId = Singleton.type
He maha nga mahi a nga pona, ka whakahaere ratonga ka taea te hono hononga TCP/HTTP ki waenganui i a raatau.
Hei whakaahua i tetahi hononga TCP me whai tau tauranga. Kei te pirangi ano matou ki te whakaata i te kawa e tautokohia ana i runga i taua tauranga kia mohio ai kei te whakamahi te kaihoko me te kaimau i te kawa kotahi. Ka whakaahuahia e matou te hononga ma te whakamahi i te akomanga e whai ake nei:
case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])
te wahi Port
- he tauoti noa Int
e tohu ana i te awhe o nga uara e whakaaetia ana:
type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]
Nga momo parakore
Tirohia te whare pukapuka
Mo nga kawa HTTP (REST), hei taapiri mo te tau tauranga, ka hiahia pea tatou ki te huarahi ki te ratonga:
type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)
Nga momo Phantom
Hei tautuhi i te kawa i te wa whakahiato, ka whakamahia he tawhā momo karekau e whakamahia i roto i te akomanga. Ko tenei whakatau na te mea kaore matou e whakamahi i tetahi tauira kawa i te wa whakahaere, engari e hiahia ana matou kia tirohia e te kaitoi te hototahi kawa. Ma te tohu i te kawa, kaore e taea e matou te tuku i tetahi ratonga kore tika hei whakawhirinakitanga.
Ko tetahi o nga tikanga noa ko te REST API me te raupapatanga Json:
sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]
te wahi RequestMessage
— momo tono, ResponseMessage
— momo whakautu.
Ae ra, ka taea e taatau te whakamahi i etahi atu whakaahuatanga kawa e whakarato ana i te tika o te whakaahuatanga e hiahiatia ana e matou.
Mo nga kaupapa o tenei panui, ka whakamahia e matou he putanga ngawari o te kawa:
sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]
I konei ko te tono he aho taapiri ki te url me te whakautu ko te aho i whakahokia mai i roto i te tinana o te whakautu HTTP.
Ko te whirihoranga ratonga e whakaahuatia ana e te ingoa ratonga, tauranga, me nga whakawhirinaki. Ka taea te whakaatu i enei huānga ki te Scala i roto i nga huarahi maha (hei tauira, HList
-s, momo raraunga taurangi). Mo nga kaupapa o tenei pou, ka whakamahia e matou te Tauira Keke me te tohu i nga waahanga ma te whakamahi trait
'ov. (Ko te Tauira Keke ehara i te mea e hiahiatia ana mo tenei huarahi.
Ko nga whakawhirinakitanga i waenga i nga ratonga ka taea te tohu hei tikanga whakahoki i nga tauranga EndPoint
o etahi atu pona:
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)
}
Hei waihanga i te ratonga paoro, he tau tauranga me te tohu e tautoko ana te tauranga i te kawa paoro. Kaore pea matou e tohu i tetahi tauranga motuhake, na te mea... Ko nga ahuatanga ka taea e koe te whakapuaki i nga tikanga me te kore e whakatinanahia (nga tikanga poto). I tenei keehi, i te wa e hanga ana i te whirihoranga raima, ka tono te kaikoipi kia tukuna he whakatinanatanga o te tikanga tangohanga me te whakarato i te tau tauranga. I te mea kua whakatinanahia e matou te tikanga, i te wa e hanga ana i tetahi whirihoranga motuhake, kaore pea matou e tohu i tetahi tauranga rereke. Ka whakamahia te uara taunoa.
I roto i te whirihoranga o te kiritaki e kii ana matou he whakawhirinakitanga ki te ratonga echo:
trait EchoClientConfig[A] {
def testMessage: String = "test"
def pollInterval: FiniteDuration
def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
}
He rite te momo whakawhirinaki ki te ratonga kaweake echoService
. Ina koa, i roto i te kiritaki echo me rite tonu te kawa. Na reira, ka honoa nga ratonga e rua, ka tino mohio ka mahi tika nga mea katoa.
Te whakatinanatanga o nga ratonga
He mahi hei timata me te whakamutu i te ratonga. (Ko te kaha ki te whakamutu i te ratonga he mea tino nui mo te whakamatautau.) Ano, he maha nga whiringa mo te whakatinana i taua ahuatanga (hei tauira, ka taea e taatau te whakamahi i nga momo karaehe i runga i te momo whirihoranga). Mo nga kaupapa o tenei pou ka whakamahia e matou te Tauira Keke. Ka tohu matou i te ratonga ma te whakamahi i tetahi karaehe cats.Resource
, no te mea Kua whakaratohia e tenei karaehe nga huarahi hei whakapumau i te tukunga o nga rauemi mena ka raru. Ki te tiki rauemi, me whakarato tatou i te whirihoranga me te horopaki wa whakahaere kua rite. Ko te mahi whakaoho ratonga ka penei te ahua:
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]
}
te wahi
Config
— momo whirihoranga mo tenei ratongaAddressResolver
— he ahanoa wa mahi e taea ai e koe te kimi i nga wahitau o etahi atu pona (tirohia ki raro)
me etahi atu momo mai i te whare pukapuka cats
:
F[_]
— momo paanga (i roto i te keehi ngawariF[A]
he mahi noa() => A
. I tenei pou ka whakamahia e matoucats.IO
.)Reader[A,B]
- nui ake iti iho ranei te rite ki te mahiA => B
cats.Resource
- he rauemi ka taea te tiki me te tukuTimer
- matawā (ka taea e koe te moe mo te wa poto me te ine i nga waahi wa)ContextShift
- tairitengaExecutionContext
Applicative
— he karaehe momo paanga ka taea e koe te whakakotahi i nga paanga takitahi (tata he monad). I roto i nga tono uaua ake te ahua he pai ake te whakamahiMonad
/ConcurrentEffect
.
Ma te whakamahi i tenei waitohu mahi ka taea e matou te whakamahi i nga ratonga maha. Hei tauira, he ratonga kaore he mahi:
trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
type Config <: Any
def resource(...): ResourceReader[F, Config, Unit] =
Reader(_ => Resource.pure[F, Unit](()))
}
(Cm.
и
Ko te node he ahanoa ka taea te whakarewa i te maha o nga ratonga (ko te whakarewanga o te mekameka rauemi ka whakamanahia e te Tauira Keke):
object SingleNodeImpl extends ZeroServiceImpl[IO]
with EchoServiceService
with EchoClientService
with FiniteDurationLifecycleServiceImpl
{
type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}
Kia mahara kei te tohuhia e matou te momo whirihoranga e hiahiatia ana mo tenei node. Mena ka wareware tatou ki te tohu i tetahi o nga momo whirihoranga e hiahiatia ana e tetahi ratonga, ka puta he hapa whakahiato. Ano hoki, e kore e taea e matou te timata i te node mena ka tukuna e matou etahi mea o te momo tika me nga raraunga e tika ana.
Whakataunga Ingoa Kaihautū
Hei hono atu ki tetahi kaihautu mamao, ka hiahia matou ki tetahi wahitau IP tuuturu. Tera pea ka mohiotia te wahitau i muri mai i era atu o te whirihoranga. Na me hiahia he mahi hei mapi i te ID node ki tetahi wahitau:
case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}
He maha nga huarahi hei whakatinana i tenei mahi:
- Mena ka mohiohia nga wahitau ki a maatau i mua i te tuku, ka taea e taatau te whakaputa waehere Scala me
wāhitau ka whakahaere i te hanga. Ma tenei ka whakahiato me te whakahaere i nga whakamatautau.
I roto i tenei take, ka mohiohia te mahi ka taea te whakaatu i roto i te waehere hei mapiMap[NodeId, NodeAddress]
. - I etahi wa, ka mohio noa te wahitau tuuturu i muri i te tiimata o te node.
I tenei take, ka taea e tatou te whakatinana i te "ratonga kitenga" ka rere i mua i etahi atu pona ka rehita nga pona katoa ki tenei ratonga me te tono i nga wahitau o etahi atu pona. - Mena ka taea e taatau te whakarereke
/etc/hosts
, ka taea e koe te whakamahi i nga ingoa kaihautu kua tautuhia (peneimy-project-main-node
иecho-backend
) ka hono noa i enei ingoa
me nga wahitau IP i te wa e tukuna ana.
I tenei pou e kore matou e whakaaro ki enei keehi i roto i nga korero taipitopito. Mo ta tatou
i roto i tetahi tauira taakaro, he rite tonu te wahitau IP o nga pona katoa - 127.0.0.1
.
I muri mai, ka whakaarohia e rua nga waahanga mo te punaha tohatoha:
- Te whakatakoto i nga ratonga katoa ki runga i tetahi pona.
- Me te manaaki i te ratonga echo me te kiritaki echo i runga i nga waahanga rereke.
Whirihoranga mo
whirihoranga kōpuku kotahi
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.
}
Ka whakatinanahia e te ahanoa te whirihoranga o te kiritaki me te tūmau. Ka whakamahia ano he whirihoranga wa-ki-ora kia whai muri i te waahi lifetime
whakamutua te hōtaka. (Ka mahi hoki a Ctrl-C me te whakawātea tika i ngā rauemi katoa.)
Ka taea te whakamahi i taua huinga whirihoranga me te whakatinanatanga hei hanga i tetahi punaha kei roto
E rua whirihoranga node
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"
}
He mea nui! Tirohia me pehea te hono o nga ratonga. Ka whakapūtā mātou i tētahi ratonga ka whakatinanahia e tētahi kōpuku hei whakatinanatanga o te tikanga whakawhirinaki o tētahi atu kōpuku. Ko te momo whakawhirinaki ka tirohia e te kaitoi, na te mea kei roto te momo kawa. I te wa e whakahaere ana, kei roto i te ti'aturi te ID node tika. He mihi ki tenei kaupapa, ka tohua e matou te tau tauranga kia kotahi tonu, ka whakamanahia ki te tohu ki te tauranga tika.
Te whakatinanatanga o nga pona punaha e rua
Mo tenei whirihoranga, ka whakamahia e matou nga mahinga ratonga kotahi kaore he huringa. Ko te mea rereke ko te mea kei a maatau e rua nga taonga e whakatinana ana i nga momo ratonga rereke:
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
}
Ko te pona tuatahi ka whakatinana i te tūmau me te whirihoranga tūmau anake. Ko te pona tuarua ka whakatinana i te kiritaki me te whakamahi i tetahi waahanga rereke o te whirihoranga. Ano hoki, me whakahaere nga pokapu e rua mo te oranga. Ka haere tonu te node tūmau kia mutu ra ano SIGTERM
'om, ka mutu te pona kiritaki i muri i etahi wa. Cm.
Te tukanga whanaketanga whanui
Kia kite tatou he pehea te paanga o tenei huarahi whirihoranga ki te katoa o nga mahi whanaketanga.
Ka whakahiatohia te whirihoranga me te toenga o te waehere ka hangaia he toi (.jar). Te ahua nei he mea tika ki te whakatakoto i te whirihoranga ki tetahi toi motuhake. Ko tenei na te mea ka taea e tatou te maha o nga whirihoranga i runga i te waehere kotahi. Ano, ka taea te whakaputa taonga e rite ana ki nga peka whirihoranga rereke. Ko te whakawhirinaki ki nga momo momo whare pukapuka ka tiakina me te whirihoranga, a ka tiakina enei putanga mo ake tonu atu ina whakatau ana matou ki te tuku i taua momo whirihoranga.
Ko nga huringa whirihoranga ka huri hei huringa waehere. Na reira, ia
ka hipokina te huringa e te tukanga whakapumautanga kounga noa:
Tikiti i roto i te bug tracker -> PR -> arotake -> hanumi me nga peka e tika ana ->
whakauru -> tukunga
Ko nga hua matua o te whakatinana i te whirihoranga kua whakahiato ko:
-
Ka rite tonu te whirihoranga puta noa i nga pokapu katoa o te punaha toha. Na te mea ka whiwhi nga pona katoa i te whirihoranga kotahi mai i te puna kotahi.
-
He raruraru ki te huri i te whirihoranga i roto i tetahi o nga pona. No reira, kaore pea te "rerenga whirihoranga".
-
Ka uaua ake te whakarereketanga iti ki te whirihoranga.
-
Ko te nuinga o nga huringa whirihoranga ka puta hei waahanga o te tukanga whanaketanga katoa, ka arotakehia.
Kei te hiahia ahau ki tetahi putunga motuhake hei penapena i te whirihoranga whakaputa? Kei roto pea i tenei whirihoranga nga kupuhipa me etahi atu korero tairongo e hiahia ana matou ki te aukati i te uru. I runga i tenei, he mea tika ki te penapena i te whirihoranga whakamutunga i roto i tetahi putunga motuhake. Ka taea e koe te wehe i te whirihoranga kia rua nga wahanga—kotahi kei roto i nga tautuhinga whirihoranga e waatea ana ki te iwi whanui me tetahi kei roto i nga tautuhinga aukati. Ma tenei ka taea e te nuinga o nga kaihanga te uru ki nga tautuhinga noa. He ngawari tenei wehenga ma te whakamahi i nga ahuatanga takawaenga kei roto nga uara taunoa.
He rereke pea
Me ngana ki te whakataurite i te whirihoranga kua whakahiato me etahi momo rereke noa:
- He konae kupu i runga i te miihini whaainga.
- Pataka uara-matua matua (
etcd
/zookeeper
). - Tukatuka i nga waahanga ka taea te whirihora ano/whakahou ano me te kore e timata ano te mahi.
- Pupuri whirihoranga ki waho o te mana toi me te mana putanga.
Ko nga konae kuputuhi he tino ngawari ki nga huringa iti. Ka taea e te kaiwhakahaere o te punaha te takiuru ki roto i te node mamao, ki te whakarereke i nga konae e tika ana me te whakaara ano i te ratonga. Mo nga punaha nui, heoi, kare pea e pai te ahua ngawari. Ko nga huringa i mahia kaore he tohu i etahi atu punaha. Kaore tetahi e arotake i nga huringa. He uaua ki te whakatau ko wai i tino whakarereke, he aha te take. Kaore i te whakamatauhia nga huringa. Mena ka tohatohahia te punaha, ka wareware pea te kaiwhakahaere ki te whakarereke i etahi atu waahanga.
(Me mahara ano ko te whakamahi i te whirihoranga whakahiato kaore e kati i te kaha ki te whakamahi i nga konae tuhinga a muri ake nei. Ka ranea ki te taapiri i te parser me te whakamana e whakaputa ana i te momo rite ki te putanga. Config
, a ka taea e koe te whakamahi i nga konae tuhinga. Ka whai ake ko te uaua o te punaha me te whirihoranga whakahiato he iti ake i te uaua o te punaha e whakamahi ana i nga konae tuhinga, na te mea Ko nga konae tuhinga e hiahia ana he waehere taapiri.)
Ko te toa-nui-a-whaanui he tikanga pai mo te tohatoha i nga tawhā meta o te tono toha. Me whakatau he aha nga tawhā whirihoranga me te aha he raraunga noa. Kia whai mahi tatou C => A => B
, me nga tawhā C
he iti noa te whakarereke, me nga raraunga A
- maha. I roto i tenei take ka taea e tatou te kii C
- tawhā whirihoranga, me A
- raraunga. Te ahua nei he rereke nga tawhā whirihoranga mai i nga raraunga i te mea he iti ake te huri i nga raraunga. Ano, ko nga raraunga ka puta mai i tetahi puna (mai i te kaiwhakamahi), me nga tawhā whirihoranga mai i tetahi atu (mai i te kaiwhakahaere punaha).
Mena he iti noa te whakarereke i nga tawhā me whakahou me te kore e whakaara ano i te hotaka, katahi ka raru pea te hotaka, na te mea ka tukuna e tatou nga tawhā, te rokiroki, te poroporo me te tirotiro, me te whakahaere i nga uara he. Na reira, mai i te tirohanga o te whakaiti i te uaua o te kaupapa, he mea tika ki te whakaiti i te maha o nga tawhā ka taea te huri i te wa e mahi ana te kaupapa (kaore ranei e tautoko i aua tawhā).
Mo nga kaupapa o tenei pou, ka wehea e matou nga tawhā pateko me te hihiri. Mena ka hiahia te arorau o te ratonga ki te whakarereke i nga tawhā i te wa e whakahaerehia ana te hotaka, katahi ka kiia e maatau nga tohu hihiri. Ki te kore he pateko nga whiringa ka taea te whirihora ma te whakamahi i te whirihoranga kua whakahiato. Mo te whirihora hihiko, ka hiahia pea tatou i tetahi tikanga ki te whakaara ano i nga waahanga o te hotaka me nga tawhā hou, he rite ki te pehea o te whakaara ano i nga punaha whakahaere. (Ki ta matou whakaaro, he mea tika kia karo i te whirihora i nga wa tuturu, na te mea ka piki ake te uaua o te punaha. Mena ka taea, he pai ake te whakamahi i nga kaha OS paerewa mo te whakaara ano i nga mahi.)
Ko tetahi ahuatanga nui o te whakamahi i te whirihoranga pateko e whakaaro ai te tangata ki te whirihora hihiko ko te wa e mau ai te punaha ki te whakaara ano i muri i te whakahou whirihoranga (he wa heke). Inaa, ki te hiahia taatau ki te whakarereke i te whirihoranga pateko, me whakaara ano te punaha kia whai mana nga uara hou. He rereke te taumaha o te raru mo te wa heke mo nga punaha rereke. I etahi wa, ka taea e koe te whakarite i te whakaara ano i te wa he iti te kawenga. Mena ka hiahia koe ki te whakarato ratonga tonu, ka taea e koe te whakatinana
Ka whakaarohia e tatou te take o te penapena i te whirihoranga i roto, i waho ranei o te taonga. Mena ka penapenahia e matou te whirihoranga ki roto i tetahi taonga toi, katahi ka whai waahi taatau ki te manatoko i te tika o te whirihoranga i te wa o te huihuinga o te taonga. Mena kei waho te whirihoranga i te taonga toi whakahaere, he uaua ki te whai i nga huringa ki tenei konae me te aha. He aha te mea nui? Ki ta matou whakaaro, mo te maha o nga punaha whakangao he mea nui kia whai whirihoranga pumau me te kounga teitei.
Ko te putanga o te mahi toi ka taea e koe te whakatau i te wa i hangaia ai, he aha nga uara kei roto, he aha nga mahi ka taea/whakakorehia, ko wai te kawenga mo nga huringa o te whirihoranga. Ae ra, ko te penapena i te whirihoranga i roto i tetahi taonga toi me whakapau kaha, no reira me whai whakaaro koe.
Nga Putanga me nga Raraunga
E hiahia ana ahau ki te noho ki runga i nga pai me nga huakore o te hangarau e whakaarohia ana.
Hua
Kei raro nei te rarangi o nga ahuatanga matua o te whirihoranga punaha tohatoha kua whakahiato:
- Taki whirihoranga pateko. Ka taea e koe te tino mohio
he tika te whirihoranga. - Te reo whirihoranga taonga. Ko te tikanga, ko etahi atu tikanga whirihoranga he iti ki te whakakapinga taurangi aho i te nuinga. I te wa e whakamahi ana i a Scala, he maha nga waahanga reo e waatea ana hei whakapai ake i to whirihoranga. Hei tauira ka taea e tatou te whakamahi
nga ahuatanga mo nga uara taunoa, ma te whakamahi i nga taonga ki nga tawhā roopu, ka taea e tatou te korero ki nga vals kua whakahuahia kotahi anake (MAROKE) i roto i te waahanga taapiri. Ka taea e koe te whakarite i nga karaehe i roto tonu i te whirihoranga (Seq
,Map
, nga karaehe ritenga). - DSL. He maha nga ahuatanga reo a Scala e ngawari ake ai te hanga DSL. Ka taea te whakamahi i enei ahuatanga me te whakatinana i te reo whirihoranga he pai ake mo te roopu o nga kaiwhakamahi, kia pai ai te panui o nga tohungatanga rohe. Ka taea e nga tohunga, hei tauira, te uru atu ki te tukanga arotake whirihoranga.
- Te tapatahi me te tukutahi i waenga i nga pona. Ko tetahi o nga painga o te whirihoranga o te punaha tohatoha katoa kei te rongoa i te waahi kotahi ko nga uara katoa ka whakaatuhia kia kotahi katahi ka whakamahia ano ki nga waahi katoa e hiahiatia ana. Ma te whakamahi i nga momo phantom ki te whakapuaki i nga tauranga ka whakarite kei te whakamahi nga pona i nga kawa hototahi ki nga whirihoranga punaha tika katoa. Ma te kaha ki te whakawhirinaki ki waenga i nga pona ka tino hono nga ratonga katoa.
- Ko nga huringa kounga teitei. Ko te whakarereketanga o te whirihoranga ma te whakamahi i te tukanga whanaketanga noa ka taea te whakatutuki i nga paerewa kounga teitei mo te whirihoranga.
- Whakahou whirihoranga tukutahi. Ko te tukunga punaha aunoa i muri i nga huringa whirihoranga ka whakarite kia whakahoutia nga pona katoa.
- Whakamaamaa te tono. Karekau te tono e hiahia te poroporoaki, te arowhai whirihoranga, te whakahaere i nga uara he. Ma tenei ka whakaiti i te uaua o te tono. (Ko etahi o nga uauatanga o te whirihoranga e kitea ana i roto i ta maatau tauira ehara i te huanga o te whirihoranga kua whakahiatohia, engari he whakatau mohio noa na te hiahia ki te whakarato i te momo haumarutanga nui ake.) He tino ngawari ki te hoki ki te whirihoranga o mua - te whakatinana noa i te mea ngaro. nga wahanga. Na reira, ka taea e koe, hei tauira, te tiimata me te whirihoranga kua whakahiato, me te whakaroa i te whakatinanatanga o nga waahanga kore e tika ana kia tae ra ano ki te wa e tino hiahiatia ana.
- whirihoranga manatoko. I te mea ko nga huringa whirihoranga e whai ana i nga ahuatanga o etahi atu huringa, ko te putanga ka riro mai i a maatau he taonga toi me te putanga ahurei. Ma tenei ka taea e matou, hei tauira, ki te hoki ki tetahi putanga o mua o te whirihoranga mehemea e tika ana. Ka taea e taatau te whakamahi i te whirihoranga mai i te tau ki muri ka rite tonu te mahi a te punaha. Ma te whirihoranga pumau ka pai ake te matapae me te pono o te punaha toha. I te mea kua whakatauhia te whirihoranga i te waahanga whakahiato, he tino uaua ki te rūpahu i roto i te whakaputanga.
- Whakatauira. He rereke te angamahi e whakaarohia ana, ka taea te whakakotahi i nga waahanga ki nga huarahi rereke hei hanga i nga punaha rereke. Ina koa, ka taea e koe te whirihora i te punaha kia rere i runga i te pona kotahi i roto i te ahua kotahi, me nga pona maha i tetahi atu. Ka taea e koe te hanga i etahi whirihoranga mo nga ahuatanga whakaputa o te punaha.
- Whakamatau. Ma te whakakapi i nga ratonga takitahi me nga taonga tawai, ka taea e koe te tiki i nga momo waahanga o te punaha e pai ana mo te whakamatautau.
- Te whakamatautau whakauru. Ma te whirihoranga kotahi mo te punaha tohatoha katoa ka taea te whakahaere i nga waahanga katoa i roto i te taiao whakahaere hei waahanga o te whakamatautau whakauru. He ngawari ki te whai, hei tauira, he ahuatanga ka uru mai etahi pona.
Nga huakore me nga here
He rereke te whirihoranga kua whakahiato mai i etahi atu huarahi whirihoranga, kaore pea e pai mo etahi tono. Kei raro nei etahi o nga ngoikoretanga:
- whirihoranga pateko. I etahi wa ka hiahia koe ki te whakatika tere i te whirihoranga i roto i te whakaputa, ma te maataki i nga tikanga tiaki katoa. Ma tenei huarahi ka uaua ake. I te iti rawa, ka hiahiatia tonu te whakahiato me te tuku aunoa. He ahua whai hua tenei mo te huarahi me te ngoikoretanga i etahi wa.
- Whakatupuranga whirihoranga. Mena ka hangaia te konae whirihoranga e te taputapu aunoa, ka hiahiatia etahi atu mahi hei whakauru i te tuhinga hanga.
- Utauta. I tenei wa, ko nga taputapu me nga tikanga i hangaia hei mahi me te whirihoranga kei runga i nga konae tuhinga. Karekau enei taputapu/hangarau katoa e waatea i roto i te whirihoranga kua whakahiato.
- Me whakarereke nga waiaro. Kua waia nga Kaihanga me nga DevOps ki nga konae tuhinga. Ko te tino whakaaro ki te whakahiato i tetahi whirihoranga he ahua ohorere me te rerekee ka paopao.
- Ka hiahiatia he tukanga whanaketanga kounga teitei. Kia pai ai te whakamahi i te whirihoranga kua whakahiatohia, me tino tika te mahi aunoatanga o te hanga me te tuku tono (CI/CD). Ki te kore ka tino raruraru.
Me noho ano tatou ki runga i te maha o nga here o te tauira kua whakaarohia kaore e pa ana ki te whakaaro o te whirihoranga whakahiato:
- Mena ka whakaratohia e matou nga korero whirihoranga kore e whakamahia ana e te node, karekau te kaitoi e awhina i a matou ki te kite i te whakatinanatanga ngaro. Ka taea te whakatau i tenei raru ma te whakarere i te Tauira Keke me te whakamahi i nga momo tino pakari, hei tauira,
HList
momo raraunga taurangi ranei (nga karaehe take) hei tohu whirihoranga. - He rarangi kei roto i te konae whirihoranga kaore e pa ana ki te whirihoranga ake: (
package
,import
,whakapuakanga kaupapa;override def
mo nga tawhā he uara taunoa). Ka taea te karo i tenei waahanga mena ka whakatinana koe i to ake DSL. I tua atu, ko etahi atu momo whirihoranga (hei tauira, XML) ka tukuna ano etahi here mo te hanganga konae. - Mo nga kaupapa o tenei whakairinga, kaore matou e whakaaro ki te whirihora hihiko o te kahui o nga pona rite.
mutunga
I roto i tenei pou, i tirotirohia e matou te whakaaro mo te tohu whirihoranga i roto i te waehere puna ma te whakamahi i nga kaha o te punaha momo Scala. Ka taea te whakamahi i tenei huarahi ki nga momo tono hei whakakapi mo nga tikanga whirihoranga tuku iho i runga i te xml, i nga konae tuhinga ranei. Ahakoa kua whakatinanahia to maatau tauira ki Scala, ka taea te whakawhiti i nga whakaaro ano ki etahi atu reo kua whakahiato (penei i a Kotlin, C#, Swift, ...). Ka taea e koe te whakamatau i tenei huarahi ki tetahi o nga kaupapa e whai ake nei, a, ki te kore e mahi, neke atu ki te konae tuhinga, me te taapiri i nga waahanga kua ngaro.
Ko te tikanga, ko te whirihoranga kua whakahiatohia me whai tukanga whanaketanga kounga teitei. Hei utu, ka whakapumautia te kounga teitei me te pono o nga whirihoranga.
Ko te huarahi e whakaarohia ana ka taea te whakawhānui ake:
- Ka taea e koe te whakamahi tonotono ki te mahi i nga arowhai wa-whakahiato.
- Ka taea e koe te whakatinana i tetahi DSL hei whakaatu i te whirihoranga i runga i te huarahi e waatea ana ki nga kaiwhakamahi mutunga.
- Ka taea e koe te whakatinana i te whakahaere rauemi hihiri me te whakatikatika whirihoranga aunoa. Hei tauira, ko te whakarereke i te maha o nga node i roto i te tautau me (1) kia whiwhi ia node he whirihoranga paku rereke; (2) i whiwhi korero te kaiwhakahaere tautau mo nga pona hou.
Nga Mihi
Kei te mihi ahau ki a Andrei Saksonov, Pavel Popov me Anton Nekhaev mo o raatau whakahee whai hua mo te tuhinga tauira.
Source: will.com