10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

ʻIke pinepine wau i nā mea hoʻomohala i lohe ʻole i nā loina SOLID (mākou kamaʻilio e pili ana iā lākou ma ʻaneʻi. — Unuhi) a i ʻole nā ​​mea hoʻolālā hoʻolālā (OOP), a i ʻole i lohe iā lākou, akā mai hoʻohana iā ia i ka hana. Hōʻike kēia ʻatikala i nā pono o nā loina OOP e kōkua i ka mea hoʻomohala i kāna hana i kēlā me kēia lā. Ua ʻike maikaʻi ʻia kekahi o lākou, ʻaʻole nui nā mea ʻē aʻe, no laila e pono ka ʻatikala no nā poʻe hoʻomaka a me nā mea papahana ʻike.

Hoʻomaopopo mākou iā ʻoe: no ka poʻe heluhelu Habr a pau - he 10 ruble ka hoʻemi ʻana i ke kau inoa ʻana i kekahi papa Skillbox me ka hoʻohana ʻana i ka code promotional Habr.

Manaʻo ʻo Skillbox: Papa hoʻonaʻauao pūnaewele "Ka mea hoʻomohala Java".

DRY (Mai Hana hou iā ʻoe iho)

ʻO kahi loina maʻalahi, ʻo ke ʻano o ia mea i maopopo mai ka inoa: "Mai hana hou iā ʻoe iho." No ka mea papahana, ʻo ia ke ʻano o ka pale ʻana i ke code pālua, a me ka manawa e hoʻohana ai i ka abstraction i kā lākou hana.

Inā ʻelua mau ʻāpana hou i ke code, pono e hoʻohui ʻia i hoʻokahi ala. Inā hoʻohana ʻia kahi waiwai paʻakikī i hoʻohana ʻia ma mua o hoʻokahi manawa, pono ia e hoʻololi iā ia i ka lehulehu.

Pono kēia i mea e maʻalahi ai ke code a maʻalahi ka mālama ʻana, ʻo ia ka pahuhopu nui o OOP. ʻAʻole pono ʻoe e hoʻohana i ka uniona, no ka mea, ʻaʻole e hāʻawi ka code like i ka hōʻoia me ka OrderId a me ka SSN.

Hoʻololi Hoʻopili

Ke ulu mau nei ka hapa nui o nā huahana lako polokalamu ʻoihana. ʻO ia ke ʻano o ka hoʻololi ʻana i ke code, pono e kākoʻo ʻia. Hiki iā ʻoe ke maʻalahi i kou ola me ka hoʻohana ʻana i ka encapsulation. E ʻae kēia iā ʻoe e hoʻāʻo maikaʻi a mālama i kāu kumu code i loaʻa. Eia kekahi laʻana.

Inā kākau ʻoe ma Java, a laila e hoʻokaʻawale i nā ʻano hana pilikino a me nā ʻano like ʻole.

Kūkākūkā wehe/pani

Hiki ke hoʻomanaʻo maʻalahi i kēia kumumanaʻo ma ka heluhelu ʻana i ka ʻōlelo aʻe: "E wehe ʻia nā hui polokalamu (nā papa, modules, functions, etc.) no ka hoʻonui ʻana, akā pani ʻia no ka hoʻololi ʻana." Ma ka hoʻomaʻamaʻa, ʻo ia ka mea hiki iā lākou ke ʻae i kā lākou ʻano e hoʻololi ʻia me ka ʻole o ka hoʻololi ʻana i ke code kumu.

He mea koʻikoʻi ke kumu i ka wā e pono ai ka hoʻololi ʻana i ke code kumu i ka hoʻoponopono code, ka hoʻāʻo ʻana a me nā kaʻina hana ʻē aʻe. ʻAʻole loli ke code e pili ana i ke kumu wehe/pani i ka wā e hoʻolōʻihi ʻia ai, no laila ʻoi aku ka liʻiliʻi o nā pilikia me ia.

Eia kekahi laʻana o ke code e kūʻē i kēia kumu.

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

Inā pono ʻoe e hoʻololi i kekahi mea i loko, e lōʻihi ka manawa, no ka mea e hoʻololi ʻia nā ʻāpana āpau o ke code e pili ana i ka ʻāpana i makemake ʻia.

Ma ke ala, ʻo ka wehe ʻana-pani ʻia kekahi o nā loina o SOLID.

Kuʻuna Kuleana Hoʻokahi (SRP)

ʻO kekahi kumu mai ka SOLID set. Ua ʻōlelo ʻia "hoʻokahi wale nō kumu e hoʻololi ai i ka papa." Hoʻokahi pilikia wale nō ka papa. He nui paha nā ʻano hana, akā hoʻohana ʻia kēlā me kēia o lākou e hoʻoponopono i kahi pilikia maʻamau. Pono nā ʻano a me nā waiwai a pau e lawelawe i kēia wale nō.

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

ʻO ka waiwai o kēia kumumanaʻo, ʻo ia ka wehe ʻana i ka hoʻopili ʻana ma waena o kēlā me kēia ʻāpana polokalamu a me ke code. Inā hoʻohui ʻoe i nā hana ʻoi aku ma mua o hoʻokahi i kahi papa, hoʻolauna ia i kahi pilina ma waena o nā hana ʻelua. No laila, inā ʻoe e hoʻololi i kekahi o lākou, aia kahi manawa kiʻekiʻe e hōʻino i ka lua, i pili i ka mea mua. A ʻo ia hoʻi ka hoʻonui ʻana i nā pōʻai hoʻāʻo i mea e ʻike mua ai i nā pilikia āpau.

Ke Kumu Hoʻololi Pilipili (DIP)

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

Aia ma luna kahi hiʻohiʻona code kahi e hilinaʻi ai ʻo AppManager iā EventLogWriter, a pili pū me AppManager. Inā makemake ʻoe i kahi ala ʻē aʻe e hōʻike ai i kahi leka hoʻomaopopo, ʻo ia ka pana, SMS a i ʻole leka uila, pono ʻoe e hoʻololi i ka papa AppManager.

Hiki ke hoʻoponopono ʻia ka pilikia me ka hoʻohana ʻana i ka DIP. No laila, ma kahi o AppManager, noi mākou i kahi EventLogWriter, e hoʻokomo ʻia me ka hoʻohana ʻana i ka framework.

Hiki i ka DIP ke hoʻololi maʻalahi i nā modules me nā mea ʻē aʻe ma o ka hoʻololi ʻana i ka module dependency. Hiki i kēia ke hoʻololi i hoʻokahi module me ka hoʻopilikia ʻole i nā mea ʻē aʻe.

Ka haku mele ma kahi o ka hoʻoilina

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohalaʻElua mau ala nui e hoʻohana hou ai i ke code: hoʻoilina a me ka haku mele, aia nā mea ʻelua i kā lākou pono a me nā hemahema. ʻO ka maʻamau ka makemake ʻia ka lua no ka mea ʻoi aku ka maʻalahi.

Hāʻawi ka haku mele iā ʻoe i ka hiki ke hoʻololi i ke ʻano o kahi papa i ka wā holo ma ka hoʻonohonoho ʻana i kāna mau waiwai. I ka hoʻokō ʻana i nā interface, hoʻohana ʻia ka polymorphism, e hāʻawi ana i kahi hoʻokō maʻalahi.

ʻOiai ʻo Java Effective na Joshua Bloch e aʻo i ke koho ʻana i ka haku mele ma mua o ka hoʻoilina.

ʻO Barbara Liskov Kūkākūkā Hoʻololi (LSP)

ʻO kekahi kumu mai ka SOLID toolkit. Ua ʻōlelo ʻia e pono ke hoʻololi ʻia nā subtypes no ka supertype. ʻO ia hoʻi, nā ʻano a me nā hana e hana pū me kahi superclass e hiki ke hana me ka pilikia ʻole me kāna mau subclasses.

Hoʻopili ʻia ʻo LSP me ka loina kuleana hoʻokahi a me ka loina kuleana pili. Inā hāʻawi kahi papa i nā hana ʻoi aku ka nui ma mua o kahi subclass, a laila ʻaʻole kākoʻo ka mea hope i kekahi o nā hana, e uhai ana i kēia kumu.

Eia kekahi ʻāpana code e kūʻē i ka LSP.

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

ʻO ke ala (Rectangle r) ka helu ʻana i ka ʻāpana o kahi Rectangle. E hāʻule ka papahana ma hope o ka hoʻokō ʻana i ka Square no ka mea ʻaʻole ʻo Square he Rectangle ma aneʻi. Wahi a ka loina LSP, hiki i nā hana e hoʻohana i nā kuhikuhi i nā papa kumu ke hoʻohana i nā mea o nā papa i loaʻa me ka ʻole o nā ʻōlelo aʻoaʻo.

ʻO kēia kumumanaʻo, kahi wehewehe kikoʻī o kahi subtype, ua noi ʻia e Barbara Liskov i kahi kīʻaha kūkā o ka makahiki 1987 i kapa ʻia ʻo "Data Abstraction and Hierarchy," no laila kona inoa.

Ke Kumu Hoʻokaʻawale Interface (ISP)

ʻO kekahi kumu SOLID. Wahi a ia, ʻaʻole pono e hoʻokō ʻia kahi interface i hoʻohana ʻole ʻia. ʻO ka hahai ʻana i kēia kumumanaʻo e kōkua i ka ʻōnaehana e maʻalahi a kūpono no ka refactoring ke hana ʻia nā loli i ka loiloi hana.

ʻO ka pinepine, hiki i kēia kūlana ke loaʻa i ka interface kekahi mau hana i ka manawa hoʻokahi, a pono ka mea kūʻai aku i hoʻokahi o lākou.

No ka mea he hana paʻakikī ke kākau ʻana i kahi interface, he paʻakikī ka hoʻololi ʻana ma hope o ka pau ʻana o ka hana me ka ʻole o ka haki ʻana i kekahi mea.

ʻO ka maikaʻi o ka loina ISP ma Java, pono e hoʻokō mua ʻia nā ala āpau, a laila hiki ke hoʻohana ʻia e nā papa. No laila, hiki i ke kumukānāwai ke ho'ēmi i ka helu o nāʻano.

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

Ka papahana no ka interface, ʻaʻole ka hoʻokō

Ua maopopo nā mea a pau ma ke poʻo inoa. ʻO ka hoʻohana ʻana i kēia kumumanaʻo e alakaʻi i ka hana ʻana i nā code maʻalahi e hiki ke hana me kekahi hoʻokō hou o ka interface.

Pono ʻoe e hoʻohana i ke ʻano interface no nā mea hoʻololi, nā ʻano hoʻihoʻi, a i ʻole ke ʻano kumu hoʻopaʻapaʻa. Ke hoʻohana nei kekahi laʻana iā SuperClass ma mua o SubClass.

O ia:

Helu helu = getNumbers();

ʻAʻole naʻe:

Nā helu ArrayList = getNumbers();

Eia ka hoʻokō pono o ka mea i kūkākūkā ʻia ma luna.

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

Kumu o ka elele

ʻO kahi laʻana maʻamau ka like () a me ka hashCode () nā ala ma Java. Ke hoʻohālikelike ʻia nā mea ʻelua, hāʻawi ʻia kēia hana i ka papa kūpono ma mua o ka mea kūʻai aku.

ʻO ka pōmaikaʻi o ka loina, ʻaʻohe kope kope a maʻalahi ke hoʻololi i ke ʻano. E pili pū ana i ka ʻelele hanana.

10 Nā Ku'una Papahana Ho'ona'auao Pono e 'ike i kēlā me kēia mea ho'omohala

ʻO kēia mau loina a pau e ʻae iā ʻoe e kākau i nā code ʻoi aku ka maʻalahi, nani a hilinaʻi me ka cohesion kiʻekiʻe a me ka hoʻohui haʻahaʻa. ʻOiaʻiʻo, maikaʻi ke kumumanaʻo, akā no ka mea hoʻomohala e hoʻohana maoli i ka ʻike i loaʻa, pono e hoʻomaʻamaʻa. Ke aʻo ʻoe i nā loina OOP, ʻo kāu hana aʻe paha ke aʻo ʻana i nā kumu hoʻolālā e hoʻonā i nā pilikia hoʻomohala polokalamu maʻamau.

Manaʻo ʻo Skillbox:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka