ගෝලීය රාජ්‍යය මෙතරම් නපුරු වන්නේ ඇයි?


354

අපි මෙය ආරම්භ කිරීමට පෙර, වියුක්තකරණය සහ පරායත්ත එන්නත් පිළිබඳ සංකල්ප මම හොඳින් දනිමි. මගේ ඇස් මෙහි විවෘත කිරීම මට අවශ්‍ය නැත.

හොඳයි, අප බොහෝ දෙනා පවසන්නේ, “ගෝලීය විචල්‍යයන් භාවිතා නොකරන්න” හෝ “සිංගල්ටෝන ගෝලීය බැවින් ඒවා නපුරු ය” යන්න සැබවින්ම තේරුම් නොගෙන (බොහෝ විට). නමුත් ඇත්තටම වන්නේ පෙලඹුමෙන් ගෝලීය තත්වය ගැන ඒ තරම් නරක?

මගේ යෙදුම සඳහා ගෝලීය වින්‍යාසයක් අවශ්‍ය යැයි කියමු, උදාහරණයක් ලෙස පද්ධති ෆෝල්ඩර මාර්ග, හෝ යෙදුම් පුළුල් දත්ත සමුදා අක්තපත්‍ර.

එවැනි අවස්ථාවක, මෙම සැකසුම් කිසියම් ගෝලීය අවකාශයක සැපයීම හැර වෙනත් හොඳ විසඳුමක් මා දකින්නේ නැත, එය සමස්ත යෙදුමටම පොදු වේ.

මම එය නරක කියලා අතවර එය, නමුත් ගෝලීය අවකාශය ඇත්තටම ඒක විශ්වාස නපුරු? එය එසේ නම්, එහි ඇති හොඳ විකල්ප මොනවාද?


7
ඔබට එම සැකසුම් වලට ප්‍රවේශය හසුරුවන වින්‍යාස පන්තියක් භාවිතා කළ හැකිය. වින්‍යාස සැකසුම් වින්‍යාස ගොනු සහ / හෝ දත්ත සමුදායන්ගෙන් කියවන එකම ස්ථානයක් තිබීම හොඳ පුරුද්දක් වන අතර අනෙක් වස්තූන් ඒවා වින්‍යාසගත දේවලින් ලබා ගනී. එමඟින් ඔබේ සැලසුම වඩාත් පිරිසිදු හා පුරෝකථනය කළ හැකිය.
හජෝ

27
ගෝලීයයක් භාවිතා කිරීමේ වෙනස කොහිද? ඔබගේ "එකම එක ස්ථානයක්" ඉතා සැක සහිත ලෙස සිංගල්ටන් එකක් මෙන් පෙනේ.
මදාරාගේ අවතාරය

139
එකම සැබෑ නපුර වන්නේ ධර්මයයි.
පීටර් බී

39
ඔබේ සෙසු ක්‍රමලේඛකයන් සමඟ ගෝලීය තත්වය භාවිතා කිරීම හරියට ඔබේ මිතුරන් සමඟ එකම දත් බුරුසුවක් භාවිතා කිරීම හා සමානයි - ඔබට එය කළ හැකිය, නමුත් යමෙකු එය ඔහුගේ පපුවට තල්ලු කිරීමට තීරණය කරන්නේ කවදාදැයි ඔබ දන්නේ නැත.
ziGi

7
යක්ෂයා නපුරු ය. ගෝලීය රාජ්‍යය නපුරක් හෝ යහපත් දෙයක් නොවේ. ඔබ එය භාවිතා කරන ආකාරය අනුව එය ඉතා ප්‍රයෝජනවත් හෝ හානිකර විය හැකිය. අන් අයට ඇහුම්කන් නොදී නිසි ලෙස ක්‍රමලේඛනය කරන්නේ කෙසේදැයි ඉගෙන ගන්න.
කරදරකාරී_විශ්වාසය

Answers:


299

ඉතා කෙටියෙන්, එය වැඩසටහන් තත්වය අනපේක්ෂිත කරයි.

විස්තාරනය කිරීම සඳහා, ඔබට එකම ගෝලීය විචල්‍යය භාවිතා කරන වස්තු කිහිපයක් ඇතැයි සිතන්න. ඔබ මොඩියුලය තුළ කොතැනකවත් අහඹු ලෙස ප්‍රභවයක් භාවිතා නොකරන්නේ යැයි උපකල්පනය කරන්න, එවිට ඔබ ක්‍රමවේදය ක්‍රියාත්මක කිරීමට පෙර පද්ධතියේ තත්වය දැනගත හොත් යම් ක්‍රමයක ප්‍රතිදානය පුරෝකථනය කළ හැකිය (එබැවින් පරීක්ෂා කරනු ලැබේ).

කෙසේ වෙතත්, එක් වස්තුවක ක්‍රමයක් හවුල් ගෝලීය රාජ්‍යයේ වටිනාකම වෙනස් කරන අතුරු ආබාධයක් අවුලුවන්නේ නම්, ඔබ අනෙක් වස්තුව තුළ ක්‍රමයක් ක්‍රියාත්මක කරන විට ආරම්භක තත්වය කුමක්දැයි ඔබ තවදුරටත් නොදනී. ඔබ ක්‍රමවේදය ක්‍රියාත්මක කරන විට ඔබට ලැබෙන ප්‍රතිදානය කුමක්දැයි දැන් ඔබට අනාවැකි කිව නොහැක, එබැවින් ඔබට එය පරීක්ෂා කළ නොහැක.

ශාස්ත්‍රීය මට්ටමින් මෙය එතරම් බැරෑරුම් ලෙස පෙනෙන්නට නොතිබුණද, පරීක්ෂණ කේතය ඒකක කිරීමට හැකිවීම එහි නිරවද්‍යතාවය ඔප්පු කිරීමේ ක්‍රියාවලියේ ප්‍රධාන පියවරකි (හෝ අවම වශයෙන් අරමුණු සඳහා යෝග්‍යතාවය).

සැබෑ ලෝකයේ මෙය ඉතා බරපතල ප්‍රතිවිපාක ගෙන දිය හැකිය. ඔබට ගෝලීය දත්ත ව්‍යුහයක් ජනනය කරන එක් පන්තියක් සහ එම දත්ත ව්‍යුහයේ දත්ත පරිභෝජනය කරන, එහි තත්වය වෙනස් කිරීම හෝ ක්‍රියාවලියේදී එය විනාශ කරන වෙනත් පන්තියක් ඇතැයි සිතමු. ප්‍රොසෙසර් පංතිය ජනප්‍රිය පන්තිය සිදු කිරීමට පෙර ක්‍රමවේදයක් ක්‍රියාත්මක කරන්නේ නම්, එහි ප්‍රති result ලය වනුයේ ප්‍රොසෙසර පන්තියට සැකසීමට අසම්පූර්ණ දත්ත තිබිය හැකි අතර, ජනගහණ පන්තිය වැඩ කරමින් සිටි දත්ත ව්‍යුහය දූෂිත හෝ විනාශ විය හැකිය. මෙම තත්වයන් තුළ වැඩසටහන් හැසිරීම සම්පූර්ණයෙන්ම අනාවැකි කිව නොහැකි වන අතර එය බොහෝ විට එපික් පාඩු වලට තුඩු දෙනු ඇත.

තවද, ඔබගේ කේතය කියවීමේ හැකියාව ගෝලීය තත්වය රිදවයි. ඔබේ කේතයට බාහිරව යැපීමක් තිබේ නම් එය කේතයට පැහැදිලිව හඳුන්වා දී නොමැති නම් ඔබේ කේතය නඩත්තු කිරීමේ කාර්යය ලබා ගන්නා ඕනෑම කෙනෙකුට එය පැමිණියේ කොහෙන්දැයි සොයා බැලීමට එය සෙවිය යුතුය.

පවතින විකල්පයන් සම්බන්ධයෙන් ගත් කල, ගෝලීය රාජ්‍යයක් තිබීම කිසිසේත් කළ නොහැකි ය, නමුත් ප්‍රායෝගිකව සාමාන්‍යයෙන් අනෙක් සියල්ල ආවරණය කරන තනි වස්තුවකට ගෝලීය රාජ්‍යය සීමා කළ හැකි අතර, ඒවා කිසි විටෙකත් විෂය පථ නීති මත රඳා සිටීමෙන් සඳහන් නොකළ යුතුය. ඔබ භාවිතා කරන භාෂාවේ කිසියම් වස්තුවකට නිශ්චිත තත්වයක් අවශ්‍ය නම්, එය පැහැදිලිවම එය ඉල්ලා සිටිය යුත්තේ එය එහි ඉදිකිරීම්කරුට තර්කයක් ලෙස සම්මත කිරීමෙන් හෝ සැකසුම් ක්‍රමයක් මගිනි. මෙය යැපුම් එන්නත් ලෙස හැඳින්වේ.

ඔබ භාවිතා කරන ඕනෑම භාෂාවක විෂය පථ නීතිරීති නිසා ඔබට දැනටමත් ප්‍රවේශ විය හැකි රාජ්‍යයක් තුළට යාම මෝඩකමක් සේ පෙනේ, නමුත් වාසි අතිමහත් ය. දැන් යමෙකු කේතය හුදකලාව බැලුවහොත්, එය අවශ්‍ය වන්නේ කුමන තත්වයෙන්ද සහ එය පැමිණෙන්නේ කොහෙන්ද යන්න පැහැදිලිය. ඔබේ කේත මොඩියුලයේ නම්‍යශීලීභාවය පිළිබඳව ද එය විශාල ප්‍රතිලාභ ලබා ඇති අතර එම නිසා විවිධ සන්දර්භයන්හි එය නැවත භාවිතා කිරීමේ අවස්ථා ද ඇත. රාජ්යය සම්මත වී ඇති අතර රාජ්යයේ වෙනස්කම් කේත වාරණයට දේශීය නම්, එවිට ඔබට කැමති ඕනෑම රාජ්යයකින් සමත් විය හැකිය (එය නිවැරදි දත්ත වර්ගය නම්) සහ ඔබේ කේත ක්රියාවලිය එය සකසා ගන්න. මෙම ශෛලිය තුළ ලියා ඇති කේතය පහසුවෙන් හුවමාරු කර ගත හැකි ලිහිල් සම්බන්ධිත සංරචක එකතුවක පෙනුම ඇති කරයි. මොඩියුලයක කේතය රාජ්‍යය පැමිණෙන්නේ කොතැනින්ද, එය සකසන ආකාරය ගැන සැලකිලිමත් නොවිය යුතුය.

ගෝලීය රාජ්‍යය මත යැපීමට වඩා රාජ්‍යය පසුකර යෑමට වඩා උසස් වීමට තවත් බොහෝ හේතු තිබේ. මෙම පිළිතුර කිසිසේත් පුළුල් නොවේ. ගෝලීය තත්වය නරක වන්නේ මන්ද යන්න පිළිබඳව ඔබට සම්පූර්ණ පොතක් ලිවිය හැකිය.


65
මූලික වශයෙන්, ඕනෑම කෙනෙකුට රාජ්‍යය වෙනස් කළ හැකි බැවින් ඔබට එය මත විශ්වාසය තැබිය නොහැක.
Oded

23
සත්‍යය විකල්පය? යැපුම් එන්නත් කිරීම .
rdlowrey

12
වින්‍යාසය නිරූපණය කරන වස්තුවක් වැනි read ලදායී ලෙස කියවීමට පමණක් ඇති දෙයකට ඔබේ ප්‍රධාන තර්කය සැබවින්ම අදාළ නොවේ.
frankc

58
ගෝලීය විචල්‍යයන් කියවීමට පමණක් නරක වන්නේ මන්දැයි ඒ කිසිවක් පැහැදිලි නොකරයි . එය වෙනත් ආකාරයකින් හොඳ පිළිතුරකි, ඔහු වෙනත් කරුණක් පැහැදිලිව ආමන්ත්‍රණය කළ විට OP එය “පිළිගත්” ලෙස සලකුණු කිරීම ගැන මම පුදුම වෙමි.
කොන්රාඩ් රුඩොල්ෆ්

25
being able to unit test code is a major step in the process of proving its correctness (or at least fitness for purpose). නැත එය එසේ නොවේ. "වැඩසටහන් පරීක්ෂාව මඟින් දෝෂ ඇති බව ඒත්තු ගැන්විය හැකි නමුත් ඒවා නොමැති බව කිසි විටෙකත් නිරූපණය කළ නොහැකි බව පෙන්වා දී දැන් දශක දෙකකට පසුව ඇත. හොඳින් ප්‍රචාරය වූ මෙම ප්‍රකාශය භක්තිමත් ලෙස උපුටා දැක්වීමෙන් පසුව, මෘදුකාංග ඉංජිනේරුවරයා දවසේ පිළිවෙලට නැවත පැමිණේ ඔහුගේ ක්‍රයිසොකොස්මික් පවිත්‍රකරණය අඛණ්ඩව පිරිපහදු කළ පැරණි රසායන විද්‍යා like යා මෙන් ඔහුගේ පරීක්ෂණ ක්‍රමෝපායන් පිරිපහදු කිරීමට. - ජික්ස්ට්‍රා, 1988. (එය දැන් දශක 4.5 ක් බවට පත් කරයි ...)
මේසන් වීලර්

145

විකෘති ගෝලීය රාජ්‍යය බොහෝ හේතු නිසා නපුරු ය:

  • විකෘති ගෝලීය තත්වයෙන් ඇති දෝෂ - බොහෝ උපක්‍රමශීලී දෝෂ ඇතිවන්නේ විකෘතිතාව නිසාය. වැඩසටහනේ ඕනෑම තැනක සිට විකෘති වීම නිසා ඇතිවිය හැකි දෝෂ පවා උපක්‍රමශීලී ය, මන්දයත් බොහෝ විට නිශ්චිත හේතුව සොයා ගැනීම දුෂ්කර ය
  • දුර්වල පරීක්ෂණ හැකියාව - ඔබට විකෘති ගෝලීය තත්වයක් තිබේ නම්, ඔබ ලියන ඕනෑම පරීක්ෂණයක් සඳහා එය වින්‍යාස කිරීමට අවශ්‍ය වේ. මෙය පරීක්ෂා කිරීම දුෂ්කර කරයි (සහ මිනිසුන් වන බැවින් මිනිසුන් එය කිරීමට ඇති ඉඩකඩ අඩුය!). උදා: යෙදුම් පුළුල් දත්ත සමුදා අක්තපත්‍ර සම්බන්ධයෙන්, එක් පරීක්ෂණයකට අනෙක් සියල්ලට වඩා වෙනස් විශේෂිත පරීක්ෂණ දත්ත ගබඩාවකට ප්‍රවේශ වීමට අවශ්‍ය නම් කුමක් කළ යුතුද?
  • නම්‍යශීලී බව - කේතයේ එක් කොටසකට ගෝලීය තත්වය තුළ එක් අගයක් අවශ්‍ය නම්, නමුත් තවත් කොටසකට තවත් අගයක් අවශ්‍ය නම් (උදා: ගනුදෙනුවක් අතරතුර තාවකාලික අගයක්)? ඔබ හදිසියේම ඔබේ අත්වල අපිරිසිදු ප්‍රතිනිර්මාණයක් ඇති කරයි
  • ක්‍රියාකාරී අපිරිසිදුකම - “පිරිසිදු” ශ්‍රිත (එනම් ප්‍රති result ලය ආදාන පරාමිතීන් මත පමණක් රඳා පවතින අතර අතුරු ආබාධ නොමැති) තර්ක කිරීම සහ විශාල වැඩසටහන් තැනීම සඳහා රචනා කිරීම පහසුය. විකෘති ගෝලීය තත්වය කියවන හෝ හැසිරවීමේ කාර්යයන් සහජයෙන්ම අපිරිසිදු ය.
  • කේත අවබෝධය - විකෘති ගෝලීය විචල්‍යයන් රාශියක් මත රඳා පවතින කේත හැසිරීම තේරුම් ගැනීමට බොහෝ උපක්‍රමශීලී ය - කේතයේ හැසිරීම පිළිබඳව තර්ක කිරීමට පෙර ගෝලීය විචල්‍යය සමඟ ඇති විය හැකි අන්තර්ක්‍රියා වල පරාසය ඔබ තේරුම් ගත යුතුය. සමහර අවස්ථාවන්හිදී, මෙම ගැටළුව නොවැළැක්විය හැකිය.
  • සමගාමී ගැටළු - විකෘති ගෝලීය රාජ්‍යයට සමගාමී තත්වයක් තුළ භාවිතා කරන විට සාමාන්‍යයෙන් යම් ආකාරයක අගුලු දැමීමක් අවශ්‍ය වේ. මෙය නිවැරදිව ලබා ගැනීම ඉතා අසීරු ය (දෝෂ වලට හේතුවකි) සහ ඔබේ කේතයට සැලකිය යුතු ලෙස සංකීර්ණතාවයක් එක් කරයි (නඩත්තු කිරීමට අපහසු / මිල අධික).
  • කාර්ය සාධනය - එකම ගෝලීය තත්වය මත දිගින් දිගටම පහර දීම හැඹිලි මතභේදයට තුඩු දෙන අතර සමස්තයක් ලෙස ඔබේ පද්ධතිය මන්දගාමී වේ.

විකෘති ගෝලීය රාජ්‍යයට විකල්ප:

  • ක්‍රියාකාරී පරාමිතීන් - බොහෝ විට නොසලකා හරින ලද නමුත් ඔබේ කාර්යයන් වඩා හොඳින් පරාමිතිකරණය කිරීම බොහෝ විට ගෝලීය තත්වය වළක්වා ගත හැකි හොඳම ක්‍රමය වේ. වැදගත් සංකල්පීය ප්‍රශ්නය විසඳීමට එය ඔබට බල කරයි: මෙම කාර්යයට එහි කාර්යය කිරීමට අවශ්‍ය තොරතුරු මොනවාද? සමහර විට "සන්දර්භය" නමින් දත්ත ව්‍යුහයක් තිබීම අර්ථවත් වන අතර එමඟින් අදාළ සියලු තොරතුරු ආවරණය වන පරිදි ක්‍රියා දාමයක් පසුකර යා හැකිය.
  • පරායත්ත එන්නත් කිරීම - ක්‍රියාකාරී පරාමිතීන් සඳහා මඳක් පෙර සිදු කරන ලදි (ශ්‍රිත ආයාචනයට වඩා වස්තු ඉදිකිරීමේදී). ඔබේ පරායත්තතාවයන් විකෘති වස්තූන් වුවද ප්‍රවේශම් වන්න, මෙය ඉක්මනින් විකෘති ගෝලීය රාජ්‍යයට සමාන ගැටළු ඇති කරයි .....
  • වෙනස් කළ නොහැකි ගෝලීය රාජ්‍යය බොහෝ දුරට හානිකර නොවේ - එය effectively ලදායී ලෙස නියතයකි. නමුත් එය සැබවින්ම නියතයක් බවට වග බලා ගන්න, පසුකාලීනව එය විකෘති ගෝලීය රාජ්‍යයක් බවට පත් කිරීමට ඔබ පෙළඹෙන්නේ නැත!
  • වෙනස් කළ නොහැකි තනි බොත්තම් - වෙනස් කළ නොහැකි ගෝලීය රාජ්‍යයට සමාන ය, ඒවා අවශ්‍ය වන තෙක් ක්ෂණිකව කල් දැමිය හැකිය. උදා: මිල අධික එක් වරක් ගණනය කිරීම අවශ්‍ය විශාල ස්ථාවර දත්ත ව්‍යුහයන් සඳහා ප්‍රයෝජනවත් වේ. විකෘති සිංගල්ටන් ඇත්ත වශයෙන්ම විකෘති ගෝලීය රාජ්‍යයට සමාන වන අතර එබැවින් ඒවා නපුරු ය :-)
  • ගතික බන්ධනය - පොදු ලිස්ප් / ක්ලෝජුර් වැනි සමහර භාෂා වලින් පමණක් ලබා ගත හැකි නමුත් මෙය වෙනත් නූල් වලට බල නොපානු ලබන පාලිත විෂය පථයක් තුළ (සාමාන්‍යයෙන් නූල්-දේශීය පදනමක් මත) අගයක් බැඳීමට effectively ලදායී ලෙස ඉඩ දෙයි. යම් තාක් දුරකට මෙය ගෝලීය විචල්‍යයකට සමාන බලපෑමක් ලබා ගැනීමේ “ආරක්ෂිත” ක්‍රමයකි, මන්දයත් දැනට ක්‍රියාත්මක වන නූල් වලට පමණක් එය බලපානු ඇති බව ඔබ දන්නා බැවිනි. නිදසුනක් ලෙස, එක් එක් ස්වාධීන ගනුදෙනු හසුරුවන ඔබට බහු නූල් ඇති අවස්ථාවක මෙය විශේෂයෙන් ප්‍රයෝජනවත් වේ.

12
මම හිතන්නේ සන්දර්භය වස්තුවක් ක්‍රියාකාරී පරාමිතිය හෝ පරායත්ත එන්නත් කිරීම මඟින් සන්දර්භය විකෘති නම් විකෘති ගෝලීය රාජ්‍යයක් භාවිතා කිරීම හා සමාන ගැටළුවක් ඇති කරයි.
ඇල්ෆ්‍රඩෝ ඔසෝරියෝ

1
සියලු හොඳ දේවල්, සහ ආමෙන්! නමුත් ප්‍රශ්නය වන්නේ වෙනස් කළ නොහැකි ගෝලීය රාජ්‍යය ගැන ය
මාර්ක් ජේ

Ff ඇල්ෆ්‍රෙඩෝ - ඇත්ත. ඒක නෙමේ නමුත් ලෙස අවම වශයෙන් විෂය පථය තරමක් පාලනය කළ හැකි නිසා නරක. නමුත් පොදුවේ ගත් කල, සන්දර්භය සහ පරායත්තයන් වෙනස් කළ නොහැකි ලෙස ගැටළුව විසඳීම පහසුය.
මිකෙරා

3
විකෘති / වෙනස් කළ නොහැකි සඳහා +1. වෙනස් කළ නොහැකි ගෝලීයයන් හරි. කම්මැලි බර පටවා ඇති නමුත් කිසි විටෙකත් වෙනස් නොවේ. ඇත්ත වශයෙන්ම, ගෝලීය විචල්යයන් නිරාවරණය නොකරන්න, නමුත් ගෝලීය අතුරුමුහුණතක් හෝ API.
ජෙස්

1
@giorgio ප්‍රශ්නයෙහි පැහැදිලි වන්නේ ප්‍රශ්නයේ විචල්‍යයන් ආරම්භයේදීම ඒවායේ අගයන් ලබා ගන්නා අතර වැඩසටහන් ක්‍රියාත්මක කිරීමේදී කිසි විටෙකත් වෙනස් නොවන බවයි (පද්ධති ෆෝල්ඩර, දත්ත සමුදා අක්තපත්‍ර). වෙනස් කළ නොහැකි, එය වටිනාකමක් ලබා දුන් පසු එය වෙනස් නොවේ. පුද්ගලිකව මම "රාජ්යය" යන වචනය භාවිතා කරන්නේ එය එක් ක්රියාත්මක කිරීමකට වඩා වෙනස් විය හැකි නිසා හෝ වෙනත් යන්ත්රයක විය හැකි බැවිනි. වඩා හොඳ වචන තිබිය හැකිය.
මාර්ක් ජේ

62
  1. ඔබගේ මුළු යෙදුමම එය භාවිතා කළ හැකි බැවින්, ඒවා නැවත පිටතට ගෙන ඒම සැමවිටම ඇදහිය නොහැකි තරම් දුෂ්කර ය. ඔබගේ ගෝලීය සමඟ සම්බන්ධ වීමට ඔබ කවදා හෝ යමක් වෙනස් කරන්නේ නම්, ඔබගේ සියලු කේත වෙනස් විය යුතුය. මෙය නඩත්තු හිසරදයකි - grepවර්ගයෙහි නම භාවිතා කරන්නේ කුමන කාර්යයන් දැයි සොයා ගැනීමට හැකිවීමට වඩා වැඩි ය.
  2. ඒවා නරක ය, මන්ද ඔවුන් සැඟවුණු පරායත්තතා හඳුන්වා දෙන අතර ඒවා බහු තෙරපුම බිඳ දමයි, එය වැඩි වැඩියෙන් යෙදුම් සඳහා අත්‍යවශ්‍ය වේ.
  3. ගෝලීය විචල්‍යයේ තත්වය සැමවිටම සම්පූර්ණයෙන්ම විශ්වාස කළ නොහැකි ය, මන්ද ඔබේ සියලු කේත එයට ඕනෑම දෙයක් කළ හැකි බැවිනි.
  4. ඒවා පරීක්ෂා කිරීම ඇත්තෙන්ම දුෂ්කර ය.
  5. ඔවුන් API ඇමතීම දුෂ්කර කරයි. "ඔබ API ඉල්ලා පෙර SET_MAGIC_VARIABLE () කැඳවීමට අප මතක තබා ගත යුතු" පමණක් ඇත සිඟමනේ කෙනෙක් එය කැඳවීමට අමතක සඳහා. එය API දෝෂ සහිත විය හැකි අතර දෝෂ සොයා ගැනීමට අපහසු වේ. එය සාමාන්‍ය පරාමිතියක් ලෙස භාවිතා කිරීමෙන්, ඔබ නිසි ලෙස වටිනාකමක් ලබා දෙන ලෙස අමතන්නාට බල කරයි.

අවශ්‍ය කාර්යයන් සඳහා යොමු කිරීමක් යවන්න. එය එතරම් අපහසු නැත.


3
හොඳයි, ඔබට ගෝලීය වින්‍යාස පංතියක් තිබිය හැකි අතර එය අගුලු දැමීම වටකර ඇති අතර හැකි සෑම විටම තත්වය වෙනස් කිරීමට සැලසුම් කර ඇත. කේතයේ ස්ථාන 1000x කින් වින්‍යාස පා readers කයින් ස්ථාපනය කිරීම හරහා මම මෙම ප්‍රවේශය තෝරා ගනිමි. නමුත් ඔව්, අනාවැකි නොකිරීම ඔවුන් ගැන ඇති නරකම දෙයයි.
කෝඩර්

6
@Coder: සටහන ගෝලීය කිරීමට සිහිකල්පනාව විකල්ප "කේතය ස්ථාන 1000x සිට config" යන වචන ආෙද්ශ, නමුත් නොවන බව එක් වූ config වස්තුව නිර්මාණය කරන config පාඨකයා, ක්රම පරාමිතිය ලෙස පිළිගැනීමට හැකි (-> සත්කාර එන්නත්).
sleske

3
නිට්පිකිං: ගෝලීයයකට වඩා වර්ගයක් සඳහා ග්‍රහණය කර ගැනීම පහසු වන්නේ ඇයි? ප්‍රශ්නය වන්නේ කියවීමට පමණි ග්ලෝබල් ගැන ය, එබැවින් 2 සහ 3 කරුණු අදාළ නොවේ
මාර්ක් ජේ

2
Ark මාක්ජේ: කිසිවෙකු කවදාවත් නමට සෙවනැලි නොකළේ යැයි මම බලාපොරොත්තු වෙමි.
DeadMG

2
EadDeadMG, Re "..එය සැමවිටම සම්පූර්ණයෙන්ම විශ්වාස කළ නොහැකි ය ..", යැපුම් එන්නත් කිරීම සඳහා ද එයම වේ. ඔබ එය පරාමිතියක් කළ පමණින්, වස්තුව ස්ථාවර තත්වයක් ඇති බවට සහතික වී ඇති බවක් අදහස් නොවේ. ශ්‍රිතයේ කොතැනක හෝ පහළින් ඔබට වෙනත් ශ්‍රිතයකට ඇමතුමක් ලබා දිය හැකි අතර එය ඉහළින් එන්නත් කරන ලද විචල්‍යයේ තත්වය වෙනස් කරයි.
පැසීරියර්

34

ඔබ "රාජ්යය" යැයි කියන්නේ නම්, එය සාමාන්‍යයෙන් ගනු ලබන්නේ "විකෘති තත්වය" යන්නයි. ගෝලීය විකෘති රාජ්‍යය මුළුමනින්ම නපුරු ය, මන්ද එහි අර්ථය වන්නේ වැඩසටහනේ ඕනෑම කොටසකට වෙනත් ඕනෑම කොටසකට (ගෝලීය රාජ්‍යය වෙනස් කිරීමෙන්) බලපෑම් කළ හැකි බවයි.

නොදන්නා වැඩසටහනක් නිදොස් කිරීම ගැන සිතන්න: සමහර ආදාන පරාමිතීන් සඳහා A ශ්‍රිතය යම් ආකාරයකින් හැසිරෙන බව ඔබට පෙනේ, නමුත් සමහර විට එය එකම පරාමිතීන් සඳහා වෙනස් ලෙස ක්‍රියා කරයි. එය ගෝලීය විචල්‍යය x භාවිතා කරන බව ඔබට පෙනී යයි .

ඔබ x වෙනස් කරන ස්ථාන සොයන අතර එය වෙනස් කරන ස්ථාන පහක් ඇති බව සොයා ගන්න. දැන් වාසනාව A ක්‍රියා කරන්නේ කුමන අවස්ථා වලදීදැයි සොයා බැලීම ...


එතරම් වෙනස් නොවන ගෝලීය රාජ්‍යය එතරම් නපුරු නොවේ ද?
FrustratedWithFormsDesigner

51
වෙනස් කළ නොහැකි ගෝලීය රාජ්‍යය යනු නියතයන් ලෙස හැඳින්වෙන හොඳ පුරුද්ද බව මම කියමි.
ටෙලාස්ටින්

6
වෙනස් කළ නොහැකි ගෝලීය රාජ්‍යය නපුරක් නොවේ, එය නරක ය :-). එය හඳුන්වා දීම නිසා එය තවමත් ගැටළු සහගතය (වෙනස්කම් සිදු කරයි, නැවත භාවිතා කිරීම සහ ඒකක පරීක්ෂා කිරීම දුෂ්කර කරයි), නමුත් එය අඩු ගැටළු ඇති කරයි, එබැවින් සරල අවස්ථාවන්හිදී එය සාමාන්‍යයෙන් පිළිගත හැකිය.
sleske

2
IFF එකක් ගෝලීය විචල්‍යයන් භාවිතා කරන්නේ නම් එය වෙනස් කළ යුත්තේ එක් කේතයක් පමණි. ඉතිරි අයට එය කියවීමට නිදහස තිබේ. අනෙක් අය එය වෙනස් කිරීමේ ගැටළු සංසරණය හා ප්‍රවේශ කාර්යයන් සමඟ නොයනු ඇත. එම ඉදිකිරීම් සඳහා වන දේ නොවේ.
phkahler

1
Ac පැකේරියර්: ඔව්, ගෝලීය හෝ දේශීය විචල්‍යයක් ලෙස භාවිතා කළත්, පුළුල් ලෙස භාවිතා වන අතුරු මුහුණතක් වෙනස් කිරීම දුෂ්කර ය. කෙසේ වෙතත්, එය මගේ කරුණෙන් ස්වාධීන වේ, එනම් විවිධ කේත කොටස්වල අන්තර්ක්‍රියා ගෝලීය විචල්‍යයන් සමඟ තේරුම් ගැනීමට අපහසුය.
sleske

9

ඔබ ඔබේම ප්‍රශ්නයට පිළිතුරු දුන්නා. 'අපයෝජනය' කළ විට ඒවා කළමනාකරණය කිරීම අසීරු ය, නමුත් ඒවා නිසි ලෙස භාවිතා කරන විට ප්‍රයෝජනවත් සහ [තරමක්] පුරෝකථනය කළ හැකිය, ඒවා අඩංගු වන්නේ කෙසේදැයි දන්නා අයෙකුට. නඩත්තු කිරීම සහ ගෝලීය වෙනස්වීම් සාමාන්‍යයෙන් නපුරු සිහිනයක් වන අතර එය යෙදුමේ ප්‍රමාණය වැඩි වන විට වඩාත් නරක අතට හැරේ.

ඇති එකම විකල්පය ලෙස globals අතර වෙනස කියන්න, ඔවුන් පහසුවෙන් විසඳුමක් වීම කළ හැකි, අත්දැකීම් වැඩසටහන්කරුවන්, හැකි ඒවා භාවිතා අවම ගැටළු පැන නැගී ඇත. එහෙත් ඒවායේ භාවිතය සමඟ ඇතිවිය හැකි නිමක් නැති ගැටළු ඒවා භාවිතා කිරීමට එරෙහි උපදෙස් අවශ්‍ය වේ.

සංස්කරණය කරන්න: මා අදහස් කළේ කුමක්ද යන්න පැහැදිලි කිරීම සඳහා, ග්ලෝබල් ස්වභාවයෙන්ම අනපේක්ෂිත ය. අනපේක්ෂිත ඕනෑම දෙයක් මෙන් ඔබට අනාවැකි නොකිරීමට පියවර ගත හැකිය, නමුත් කළ හැකි දේට සෑම විටම සීමාවන් තිබේ. සාපේක්ෂව නොදන්නා විචල්‍යයන් සමඟ කටයුතු කිරීමට ව්‍යාපෘතියට සම්බන්ධ වන නව සංවර්ධකයින්ගේ කරදරය මෙයට අමතරව ගෝලීය භාවිතා කිරීමට එරෙහි නිර්දේශයන් තේරුම් ගත යුතුය.


9

සිංගල්ටන් සමඟ බොහෝ ගැටලු තිබේ - මෙන්න මගේ මනසෙහි ඇති ලොකුම ගැටළු දෙකයි.

  • එය ඒකක පරීක්ෂාව ගැටළු සහගත කරයි. එක් පරීක්ෂණයක සිට තවත් පරීක්ෂණයකට ගෝලීය රාජ්‍යය දූෂණය විය හැකිය

  • එය "එක හා එකම" දැඩි රීතිය බලාත්මක කරයි, එය වෙනස් කළ නොහැකි වුවද හදිසියේම සිදු වේ. ගෝලීයව ප්‍රවේශ විය හැකි වස්තුව භාවිතා කළ උපයෝගිතා කේත සමූහයක් වෙනස් කළ යුතුය.

බොහෝ පද්ධති වලට විශාල ගෝලීය වස්තු සඳහා යම් අවශ්‍යතාවයක් ඇති බව පැවසීමෙන් පසු. මේවා විශාල හා මිල අධික අයිතම වේ (උදා: දත්ත සමුදා සම්බන්ධතා කළමනාකරුවන්), හෝ පුළුල් රාජ්‍ය තොරතුරු රඳවා තබා ගන්න (නිදසුනක් ලෙස, තොරතුරු අගුළු දැමීම).

සිංගල්ටන් සඳහා විකල්පය නම් මෙම විශාල ගෝලීය වස්තු ආරම්භයේදීම නිර්මාණය කර තිබීම සහ මෙම වස්තුවට ප්‍රවේශය අවශ්‍ය සියලුම පන්ති හෝ ක්‍රම සඳහා පරාමිතීන් ලෙස සම්මත කිරීමයි.

මෙහි ඇති ගැටළුව නම් ඔබ "පාස්-පාර්සලය" විශාල ක්‍රීඩාවක් සමඟ අවසන් වීමයි. ඔබට සංරචක ප්‍රස්ථාරයක් සහ ඒවායේ පරායත්තතාවයන් ඇති අතර සමහර පංති වෙනත් පංති නිර්මාණය කරන අතර, එක් එක් පරායත්ත සංරචක රාශියක් රඳවා තබා ගත යුත්තේ ඒවායේ ඇතිවූ සංරචක (හෝ බිහි වූ සංරචකවල සංරචක) අවශ්‍ය නිසාය.

ඔබ නව නඩත්තු ගැටළු වලට මුහුණ දෙයි. උදාහරණයක්: හදිසියේම ඔබේ "විජට් ෆැක්ටරි", ප්‍රස්ථාරයේ ගැඹුරු සං component ටකයට ඔබට සමච්චල් කිරීමට අවශ්‍ය ටයිමර් වස්තුවක් අවශ්‍ය වේ. කෙසේ වෙතත්, "WidgetFactory" නිර්මාණය කර ඇත්තේ "WidgetBuilder" වන අතර එය "WidgetCreationManager" හි කොටසක් වන අතර, මෙම කාලරාමු වස්තුව සත්‍ය වශයෙන්ම භාවිතා කළත් එය පිළිබඳව දැන ගැනීමට ඔබට පන්ති තුනක් තිබිය යුතුය. ඔබට අතහැර දමා නැවත සිංගල්ටන් වෙත ආපසු යාමට අවශ්‍ය බව ඔබට පෙනී යන අතර මෙම ටයිමර් වස්තුව ගෝලීයව ප්‍රවේශ විය හැකිය.

වාසනාවකට මෙන්, මෙය හරියටම යැපුම් එන්නත් රාමුවක් මගින් විසඳනු ලබන ගැටළුවයි. රාමුවට එය නිර්මාණය කිරීමට අවශ්‍ය පංති මොනවාදැයි ඔබට සරලව පැවසිය හැකි අතර, එය ඔබ සඳහා පරායත්තතා ප්‍රස්තාරය හඳුනා ගැනීමට පරාවර්තනය භාවිතා කරයි, තවද අවශ්‍ය විටෙක එක් එක් වස්තුව ස්වයංක්‍රීයව සාදයි.

එබැවින් සාරාංශයක් ලෙස සිංගල්ටන් නරක වන අතර විකල්පය වන්නේ පරායත්ත එන්නත් කිරීමේ රාමුවක් භාවිතා කිරීමයි.

මම කාසල් වින්ඩ්සර් භාවිතා කිරීමට සිදුවේ, නමුත් ඔබ තේරීම සඳහා නරක් වී ඇත. පවතින රාමු ලැයිස්තුවක් සඳහා 2008 සිට මෙම පිටුව බලන්න .


9

පළමුවෙන්ම පරායත්ත එන්නත් කිරීම “රාජ්‍ය” වීමට නම්, ඔබට තනි බොත්තම් භාවිතා කිරීමට අවශ්‍ය වනු ඇත, එබැවින් මෙය කෙසේ හෝ විකල්පයක් යැයි පවසන අය වැරදියට වටහා ගනු ලැබේ. මිනිසුන් නිතරම ගෝලීය සන්දර්භ වස්තු භාවිතා කරයි ... නිදසුනක් ලෙස සැසි තත්වය පවා සාරභූතව ගෝලීය විචල්‍යයකි. යැපුම් එන්නත් කිරීම මගින් හෝ නොකිරීම සෑම දෙයක්ම පසු කිරීම සෑම විටම හොඳම විසඳුම නොවේ. මම දැනට වැඩ කරන්නේ ඉතා විශාල ගෝලීය සන්දර්භය වස්තු (IoC බහාලුමක් හරහා එන්නත් කරන ලද සිංගල්ටන්) භාවිතා කරන ඉතා විශාල යෙදුමක වන අතර එය කිසි විටෙකත් නිදොස් කිරීම ගැටලුවක් වී නොමැත. විශේෂයෙන් සිදුවීම් මත පදනම් වූ ගෘහ නිර්මාණ ශිල්පය සමඟ ගෝලීය සන්දර්භ වස්තු එදිරිව එදිරිව භාවිතා කිරීම වඩාත් සුදුසුය. ඔබ ඉල්ලන අය මත රඳා පවතී.

ඕනෑම දෙයක් අපයෝජනය කළ හැකි අතර එය යෙදුම් වර්ගය මත ද රඳා පවතී. වෙබ් යෙදුමක උදාහරණයක් ලෙස ස්ථිතික විචල්‍යයන් භාවිතා කිරීම ඩෙස්ක්ටොප් යෙදුමකට වඩා සම්පූර්ණයෙන්ම වෙනස් ය. ඔබට ගෝලීය විචල්‍යයන් වළක්වා ගත හැකි නම්, එසේ කරන්න, නමුත් සමහර විට ඒවායේ භාවිතයන් ඇත. අවම වශයෙන් ඔබගේ ගෝලීය දත්ත පැහැදිලි සන්දර්භීය වස්තුවක ඇති බවට වග බලා ගන්න. නිදොස්කරණය කරන තාක් දුරට, ඇමතුම් තොගයක් සහ සමහර කඩඉම් ලකුණු විසඳිය නොහැක.

ගෝලීය විචල්‍යයන් අන්ධ ලෙස භාවිතා කිරීම නරක අදහසක් බව අවධාරණය කිරීමට මට අවශ්‍යය. කාර්යයන් නැවත භාවිතා කළ හැකි අතර දත්ත පැමිණෙන්නේ කොතැනින්ද යන්න ගැන සැලකිලිමත් නොවිය යුතුය - ගෝලීය විචල්‍යයන් ගැන සඳහන් කරමින් නිශ්චිත දත්ත ආදානයක් සහිත ශ්‍රිත ජෝඩු. ඔබ තවමත් මධ්‍යගත සන්දර්භ ගබඩාවක් සමඟ (සිංගල්ටන් හරහා) ගනුදෙනු කළද, එය සම්මත කළ යුත්තේ ඇයි සහ පරායත්ත එන්නත් කිරීම ප්‍රයෝජනවත් වන්නේ එබැවිනි.

Btw ... සමහර අය සිතන්නේ ලින්ක් හි නිර්මාතෘ ද ඇතුළුව යැපුම් එන්නත් කිරීම නරක යැයි ය, නමුත් එය මා ද ඇතුළුව මිනිසුන් එය භාවිතා කිරීම වළක්වන්නේ නැත. අවසානයේ අත්දැකීම් ඔබේ හොඳම ගුරුවරයා වනු ඇත. නීති රීති අනුගමනය කළ යුතු අවස්ථා සහ ඒවා කඩ කිරීමට කාලය තිබේ.


5

මෙහි වෙනත් පිළිතුරු අතර වෙනස කරන්න පටන් mutable හා අණුවල පැවැත්ම ගෝලීය රාජ්ය, මම පද්ධතිය ඛණ්ඩනය වීම කැමති පවා මා තුලද ගෝලීය විචල්ය / සැකසුම් බොහෝ විට දැඩි නොසතුටට හේතුවක් වේ .

ප්රශ්නය සලකා බලන්න:

... මගේ යෙදුම සඳහා ගෝලීය වින්‍යාසයක් අවශ්‍ය යැයි කියමු, උදාහරණයක් ලෙස පද්ධති ෆෝල්ඩර මාර්ග හෝ යෙදුම් පුළුල් දත්ත සමුදා අක්තපත්‍ර. ...

හරි, කුඩා වැඩසටහනක් සඳහා, මෙය බොහෝ විට ගැටළුවක් නොවනු ඇත, නමුත් ඔබ තරමක් විශාල පද්ධතියක සංරචක සමඟ මෙය කළ විගස , ස්වයංක්‍රීය පරීක්ෂණ ලිවීම හදිසියේම දුෂ්කර වන්නේ සියලු පරීක්ෂණ (process එකම ක්‍රියාවලිය තුළ ක්‍රියාත්මක වීම) සමඟ ක්‍රියා කළ යුතු බැවිනි එකම ගෝලීය වින්‍යාස අගය.

සියලුම වින්‍යාස දත්ත පැහැදිලිව සම්මත කර ඇත්නම්, සංරචක පරීක්ෂා කිරීම වඩාත් පහසු වන අතර බහු පරීක්ෂණ සඳහා ගෝලීය වින්‍යාස අගයක් ආරම්භ කරන්නේ කෙසේදැයි ඔබ කිසි විටෙකත් කරදර විය යුතු නැත, සමහර විට සමාන්තරව පවා.


3

හොඳයි, එකක් සඳහා, ඔබට තනි බොත්තම් සමඟ කළ හැකි එකම ගැටලුව වෙත දිව යා හැකිය. අද මට පෙනෙන දේ "මට එකක් පමණක් අවශ්‍ය ගෝලීය දෙයක්" හදිසියේම ඔබට පාරට බැසීමට අවශ්‍ය යමක් වෙත හැරෙනු ඇත.

උදාහරණයක් ලෙස, අද ඔබ මෙම ගෝලීය වින්‍යාස පද්ධතිය නිර්මාණය කරන්නේ ඔබට සමස්ත පද්ධතියටම එක් ගෝලීය වින්‍යාසයක් අවශ්‍ය නිසාය. වසර කිහිපයකට පසු, ඔබ වෙනත් පද්ධතියකට පිවිසෙන අතර යමෙකු පවසන්නේ "ඒයි, ඔබ දන්නවා, එක් පොදු ගෝලීය වින්‍යාසයක් සහ එක් වේදිකා විශේෂිත වින්‍යාසයක් තිබුනේ නම් මෙය වඩා හොඳ වනු ඇත." හදිසියේම ඔබේ ගෝලීය ව්‍යුහයන් ගෝලීය නොවන බවට පත් කිරීම සඳහා ඔබට මේ සියලු කාර්යයන් ඇත, එබැවින් ඔබට බහු ඒවා තිබිය හැකිය.

(මෙය අහඹු උදාහරණයක් නොවේ ... මෙය සිදු වූයේ මා දැනට සිටින ව්‍යාපෘතියේ අපගේ වින්‍යාස පද්ධතිය සමඟ ය.)

ගෝලීය නොවන දෙයක් සෑදීමේ පිරිවැය සාමාන්‍යයෙන් ඉතා සුළු බව සලකන විට, එසේ කිරීම මෝඩකමකි. ඔබ අනාගත ගැටලු නිර්මාණය කරනවා.


ඔබේ උදාහරණය OP යන්නෙන් අදහස් නොකෙරේ. ඔබ පැහැදිලිවම කථා කරන්නේ වියුක්ත වින්‍යාසයන් (යෙදුම්-විශේෂිත මනාප යතුරු නොමැතිව වින්‍යාස කළමණාකරු දත්ත ව්‍යුහයක්) කිහිප වතාවක්ම ඔබේ වින්‍යාස කළමණාකරු පන්තියේ අවස්ථා කිහිපයකදීම ඔබේ වැඩසටහනේ ක්‍රියාකාරී අවස්ථාවකදී සියලු යතුරු බෙදීමට ඔබට අවශ්‍ය නිසාය. (උදාහරණයක් ලෙස, එවැනි සෑම අවස්ථාවකටම එක් වින්‍යාස ගොනුවක් හැසිරවිය හැකි බව පවසන්න).
ජෝ සෝ

3

අනෙක් ගැටළුව කුතුහලය දනවන කරුණ නම්, ඒවා යෙදුමක් “ගෝලීය” නොවන බැවින් ඒවා පරිමාණය කිරීම දුෂ්කර කිරීමයි. ගෝලීය විචල්‍යයක විෂය පථය නම් ක්‍රියාවලියයි.

බහුවිධ ක්‍රියාදාමයන් භාවිතා කිරීමෙන් හෝ බහු සේවාදායකයන් ධාවනය කිරීමෙන් ඔබේ යෙදුම පරිමාණය කිරීමට ඔබට අවශ්‍ය නම්. අවම වශයෙන් ඔබ සියලු ගෝලීය සාධක හඳුනාගෙන ඒවා වෙනත් යාන්ත්‍රණයක් මගින් ප්‍රතිස්ථාපනය කරන තුරු නොවේ.


3

ගෝලීය රාජ්‍යය මෙතරම් නපුරු වන්නේ ඇයි?

විකෘති ගෝලීය තත්වය නපුරු ය, මන්ද යත්, අපගේ මොළයට වරකට පරාමිති කිහිපයකට වඩා සැලකිල්ලට ගැනීම සහ ඒවා කාලෝචිත දෘෂ්ටිකෝණයකින් සහ වටිනාකමේ දෘෂ්ටිකෝණයකින් යම් දෙයකට බලපාන්නේ කෙසේද යන්න සොයා ගැනීම ඉතා අසීරු බැවිනි.

එමනිසා, වැඩසටහනක් ක්‍රියාත්මක කිරීමේදී වෙනස් කිරීමට බාහිර හේතු කිහිපයකට වඩා වැඩි හැසිරීමක් ඇති වස්තුවක් නිදොස් කිරීම හෝ පරීක්ෂා කිරීම අප ඉතා නරක ය. මෙම වස්තූන් දුසිම් ගණනක් එකට ගත් විට අපට තර්ක කිරීමට සිදු වූ විට පමණක් නොව.


3

ඕනෑම සැබෑ යෙදුමක රාජ්‍යය වැළැක්විය නොහැක. ඔබට කැමති ආකාරයට එය ඔතා තැබිය හැකිය, නමුත් පැතුරුම්පතක සෛල තුළ දත්ත අඩංගු විය යුතුය. ඔබට අතුරුමුහුණතක් ලෙස පමණක් ක්‍රියාකාරීත්වයෙන් සෛල වස්තු සෑදිය හැකිය, නමුත් එමඟින් සෛල ගණනාවකට ක්‍රමයට ඇමතුමක් ලබා දී දත්ත වෙනස් කළ හැකිය. කේතයේ අනෙක් කොටස් වලට නොහැකි වන පරිදි අතුරුමුහුණත් සැඟවීමට උත්සාහ කිරීම සඳහා ඔබ සම්පූර්ණ වස්තු ධූරාවලියක් සාදයිපෙරනිමියෙන් දත්ත වෙනස් කරන්න. එමඟින් අඩංගු වස්තුව අත්තනෝමතික ලෙස සම්ප්‍රේෂණය වීම වළක්වන්නේ නැත. ඒ කිසිවක් සමගාමී මුදල් ගැටළු තනිවම ඉවත් නොකරයි. දත්ත වලට ප්‍රවේශය වැඩි කිරීම එය දුෂ්කර කරයි, නමුත් එය ඇත්ත වශයෙන්ම ගෝලීයයන් සමඟ ඇති ගැටළු ඉවත් නොකරයි. යමෙකුට රාජ්‍ය කොටසක් වෙනස් කිරීමට අවශ්‍ය නම්, ඔවුන් එය ගෝලීය හෝ සංකීර්ණ API හරහා කාලගුණය සිදු කරනු ඇත (පසුකාලීනව අධෛර්යමත් වනු ඇත, වළක්වා නොගනී).

ගෝලීය ආචයනය භාවිතා නොකිරීමට සැබෑ හේතුව නම් ගැටුම් වළක්වා ගැනීමයි. එකම ගෝලීය නාමයක් ප්‍රකාශ කරන මොඩියුල කිහිපයක් ඔබ පටවන්නේ නම්, ඔබට නිර්වචනය නොකළ හැසිරීමක් ඇත (ඒකක පරීක්ෂණ සමත් වන බැවින් නිදොස්කරණය කිරීම ඉතා අසීරු ය) හෝ සම්බන්ධක දෝෂයක් (මම සිතන්නේ සී - ඔබේ සම්බන්ධකය මේ ගැන අනතුරු අඟවනවාද නැත්නම් අසමත් වේද?).

ඔබට කේතය නැවත භාවිතා කිරීමට අවශ්‍ය නම්, ඔබට වෙනත් ස්ථානයකින් මොඩියුලයක් උදුරා ගැනීමට හැකි විය යුතු අතර එය එකම නමකින් එකක් භාවිතා කළ නිසා එය අහම්බෙන් ඔබේ ගෝලීය පියවරට නොගනී. නැතහොත් ඔබ වාසනාවන්ත නම් සහ දෝෂයක් ඇති වුවහොත්, ision ට්ටනය වැළැක්වීම සඳහා කේතයේ එක් කොටසක ඇති සියලුම යොමු කිරීම් වෙනස් කිරීමට ඔබට අවශ්‍ය නැත.


3

ආරක්ෂිත සහ ශක්තිමත් පද්ධති සැලසුම් කිරීම සඳහා නිර්මාණය කර ඇති භාෂාවන් බොහෝ විට ගෝලීය විකෘති තත්වයෙන් මුළුමනින්ම ඉවත් වේ. (විවාදාත්මකව මෙයින් අදහස් කරන්නේ ගෝලීය නොවන බවයි. මන්දයත් වෙනස් කළ නොහැකි වස්තූන් කිසි විටෙකත් රාජ්‍ය සංක්‍රාන්තියක් නොමැති බැවින් ඒවා සැබවින්ම රාජ්‍ය නොවන බැවිනි.)

ජෝ-ඊ එක් උදාහරණයක් වන අතර ඩේවිඩ් වැග්නර් මෙසේ තීරණය කරයි:

ගෝලීය විචල්‍යයන් තුළ හැකියාවන් ගබඩා කර ඇති විට වස්තුවකට ප්‍රවේශය ඇත්තේ කාටද යන්න සහ අවම වරප්‍රසාදය පිළිබඳ මූලධර්මය දෙකම යටපත් කරනු ලබන අතර එමඟින් වැඩසටහනේ ඕනෑම කොටසකට කියවිය හැකිය. වස්තුවක් ගෝලීයව ලබා ගත් පසු, විශ්ලේෂණයේ විෂය පථය සීමා කිරීමට තවදුරටත් නොහැකි ය: වස්තුවට ප්‍රවේශ වීම වරප්‍රසාදයක් වන අතර එය වැඩසටහනේ කිසිදු කේතයකින් වළක්වා ගත නොහැක. ජෝ-ඊ මෙම ගැටළු මඟහරවා ගන්නේ ගෝලීය විෂය පථයට හැකියාවන් නොමැති බවත්, වෙනස් කළ නොහැකි දත්ත පමණක් බවත් තහවුරු කර ගැනීමෙනි.

එබැවින් ඒ ගැන සිතා බැලිය හැකි එක් ක්‍රමයක් වේ

  1. ක්‍රමලේඛනය යනු බෙදා හරින ලද තර්කානුකූල ගැටළුවකි. විශාල ව්‍යාපෘතිවල ක්‍රමලේඛකයන්ට මෙම වැඩසටහන කොටස් වලට බෙදිය යුතු අතර එය පුද්ගලයන්ට තර්ක කළ හැකිය.
  2. විෂය පථය කුඩා වන තරමට තර්ක කිරීම පහසුය. පද්ධතියක ගුණාංග සනාථ කිරීමට උත්සාහ කරන පුද්ගලයින් සහ ස්ථිතික විශ්ලේෂණ මෙවලම් සහ පද්ධතියක ගුණාංග පරීක්ෂා කිරීමට අවශ්‍ය පරීක්ෂණ යන දෙකින්ම මෙය සත්‍ය වේ.
  3. ගෝලීය වශයෙන් ලබා ගත හැකි සැලකිය යුතු අධිකාරී ප්‍රභවයන් මඟින් පද්ධතියේ ගුණාංග ගැන තර්ක කිරීම දුෂ්කර කරයි.

එබැවින් ගෝලීය වශයෙන් විකෘති තත්වයට පත්වීම දුෂ්කර කරයි

  1. ශක්තිමත් පද්ධති සැලසුම් කිරීම,
  2. පද්ධතියක ගුණාංග ඔප්පු කිරීමට අපහසු, සහ
  3. ඔබේ පරීක්ෂණ පරිසරය හා සමාන පරාසයකින් ඔබේ පරීක්ෂණ පරීක්ෂා කරන බවට සහතික වීම දුෂ්කර ය.

ගෝලීය විකෘති තත්වය ඩීඑල්එල් නිරයට සමානය . කාලයාගේ ඇවෑමෙන්, විශාල පද්ධතියක විවිධ කොටස් වලට විකෘති තත්වයේ හවුල් කොටස් වලින් සියුම් ලෙස වෙනස් හැසිරීම් අවශ්‍ය වේ. ඩීඑල්එල් නිරය සහ හවුල් විකෘති රාජ්‍ය නොගැලපීම් විසඳීම සඳහා අසමාන කණ්ඩායම් අතර මහා පරිමාණ සම්බන්ධීකරණයක් අවශ්‍ය වේ. ආරම්භ කිරීම සඳහා ගෝලීය රාජ්‍යය නිසි ලෙස පරිහරණය කර ඇත්නම් මෙම ගැටළු ඇති නොවනු ඇත.


2

ග්ලෝබල් එතරම් නරක නැත. තවත් පිළිතුරු කිහිපයක සඳහන් කර ඇති පරිදි, ඔවුන් සමඟ ඇති සැබෑ ගැටළුව නම්, අද, ඔබේ ගෝලීය ෆෝල්ඩර මාර්ගය, හෙට, කිහිපයකින් එකක් හෝ සිය ගණනක් විය හැකිය. ඔබ ඉක්මන්, එකවර වැඩසටහනක් ලියන්නේ නම්, එය පහසු නම් ග්ලෝබල් භාවිතා කරන්න. සාමාන්‍යයෙන්, ඔබට එකක් අවශ්‍ය යැයි ඔබ සිතන විට පවා ගුණ කිරීමට ඉඩ දීම යන්නට මාර්ගයයි. හදිසියේම දත්ත සමුදායන් දෙකක් සමඟ කතා කිරීමට අවශ්‍ය විශාල සංකීර්ණ වැඩසටහනක් ප්‍රතිව්‍යුහගත කිරීම සතුටක් නොවේ .

නමුත් ඔවුන් විශ්වසනීයත්වයට හානියක් නොකරයි. ඔබගේ වැඩසටහනේ බොහෝ ස්ථාන වලින් යොමු කර ඇති ඕනෑම දත්ත අනපේක්ෂිත ලෙස වෙනස් වුවහොත් ගැටළු ඇති විය හැක. ගණන් ගැනීමේ මැද ගණන් කිරීමේ දී ඔවුන් ගණනය කරන එකතුව වෙනස් වූ විට ගණන් ගන්නා අය හුස්ම හිර කරති. සිදුවීම් පෝලිම් සිදුවීම් එකිනෙකාට උපක්‍රම සෙල්ලම් කළ හැකිය. නූල් සෑම විටම විනාශය විනාශ කළ හැකිය. දේශීය විචල්‍ය හෝ වෙනස් කළ නොහැකි ක්ෂේත්‍රයක් නොවන ඕනෑම දෙයක් ගැටළුවකි. ග්ලෝබල් යනු මේ ආකාරයේ ගැටළුවක් වන නමුත් ඔබ ඒවා ගෝලීය නොවන බවට පත් කිරීමෙන් එය නිවැරදි කිරීමට යන්නේ නැත.

ඔබ ගොනුවකට ලිවීමට සූදානම් නම් සහ ෆෝල්ඩරයේ මාර්ගය වෙනස් වේ නම්, වෙනස් කිරීම සහ ලිවීම සමමුහුර්ත කිරීම අවශ්‍ය වේ. . ෆෝල්ඩරයේ මාර්ගය ගෝලීය හෝ වැඩසටහන දැනට භාවිතා කරන දහසෙන් එකකි.

පෝලිම්වල විවිධ සිදුවීම්, විවිධ මට්ටම්වල පුනරාවර්තන හෝ විවිධ නූල් මගින් ප්‍රවේශ විය හැකි ක්ෂේත්‍ර පිළිබඳ සැබෑ ගැටළුවක් ඇත. එය සරල කිරීමට (සහ සරල): දේශීය විචල්‍යයන් හොඳ වන අතර ක්ෂේත්‍ර නරක ය. නමුත් කලින් ගෝලීයයන් තවමත් ක්ෂේත්‍රයන් වනු ඇත, එබැවින් මෙම (කෙසේ වෙතත් විවේචනාත්මකව වැදගත්) ගැටළුව ගෝලීය ක්ෂේත්‍රවල යහපත් හෝ නපුරු තත්වයට අදාළ නොවේ .

එකතු කිරීම: බහු කියවීමේ ගැටළු:

(ඔබට සිදුවීම් පෝලිම් හෝ පුනරාවර්තන ඇමතුම් සමඟ සමාන ගැටළු ඇති විය හැකි බව සලකන්න, නමුත් බහු කියවීම බොහෝ දුරට නරකම ය.) පහත කේතය සලකා බලන්න:

if (filePath != null)  text = filePath.getName();

නම් filePathදේශීය විචල්ය හෝ නියත යම් ආකාරයක වේ, ඔබේ වැඩසටහන වේ නොහැකි නිසා ධාවනය විට අසමත් යන්නේ filePathශූන්ය වේ. චෙක්පත සෑම විටම ක්රියා කරයි. වෙනත් කිසිදු නූලකට එහි වටිනාකම වෙනස් කළ නොහැක. එසේ නොමැතිනම් කිසිදු සහතිකයක් නොමැත. මම ජාවා හි බහු තෙරපුම් වැඩසටහන් ලිවීමට පටන් ගත් විට, මට සෑම විටම මෙවැනි රේඛාවලින් NullPointerException ලැබුණි. කිසියම්වෙනත් නූල් වලට ඕනෑම වේලාවක අගය වෙනස් කළ හැකි අතර ඒවා බොහෝ විට සිදු වේ. තවත් පිළිතුරු කිහිපයක් පෙන්වා දෙන පරිදි, මෙය පරීක්ෂා කිරීම සඳහා බරපතල ගැටළු ඇති කරයි. ඉහත ප්‍රකාශයට බිලියනයක වාරයක් වැඩ කළ හැකි අතර එය පුළුල් හා සවිස්තරාත්මක පරීක්ෂණ මගින් ලබා ගත හැකි අතර පසුව නිෂ්පාදනයේ එක් වරක් පුපුරවා හැරිය හැකිය. පරිශීලකයින්ට ගැටලුව ප්‍රතිනිෂ්පාදනය කිරීමට නොහැකි වනු ඇති අතර, ඔවුන් දේවල් දකින බව අමතක කර එය අමතක කරන තුරු එය නැවත සිදු නොවේ.

ග්ලෝබල් වලට නියත වශයෙන්ම මෙම ගැටළුව ඇති අතර, ඔබට ඒවා සම්පූර්ණයෙන්ම තුරන් කිරීමට හෝ නියත හෝ දේශීය විචල්‍යයන් සමඟ ප්‍රතිස්ථාපනය කළ හැකි නම් එය ඉතා හොඳ දෙයකි. ඔබට වෙබ් සේවාදායකයක අස්ථායි කේතයක් තිබේ නම්, ඔබට බොහෝ විට එසේ කළ හැකිය. සාමාන්‍යයෙන්, ඔබේ සියලු බහුකාර්ය ගැටලු දත්ත සමුදායට ගත හැකිය.

නමුත් ඔබේ වැඩසටහනට එක් පරිශීලක ක්‍රියාවක සිට තවත් දෙයකට දේවල් මතක තබා ගත යුතු නම්, ඕනෑම ධාවන නූල් මඟින් ඔබට ප්‍රවේශ විය හැකි ක්ෂේත්‍ර තිබේ. ගෝලීය නොවන එවැනි ගෝලීය නොවන ක්ෂේත්‍රයකට මාරුවීම විශ්වසනීයත්වයට උපකාරී නොවේ.


1
මෙයින් ඔබ අදහස් කරන්නේ කුමක්ද යන්න පැහැදිලි කළ හැකිද?: "දේශීය විචල්ය හෝ unchangable ක්ෂේත්රයේ නොවන බව ඕනෑම දෙයක් ප්රශ්නයක්. Globals ප්රශ්නය මෙම වර්ග කිරීම, නමුත් ඔබ ඔවුන්-ගෝලීය නොවන කරමින් බව අදාල කරුණ නිවැරදි කිරීමට යන්නේ නෑ."
ඇන්ඩ්‍රස් එෆ්.

1
Nd ඇන්ඩ්‍රෙස්: මම මගේ පිළිතුර දිගු කළා. මම හිතන්නේ මම ඩෙස්ක්ටොප් ප්‍රවේශයක් ගනිමින් සිටින්නේ මෙම පිටුවේ බොහෝ පුද්ගලයින් දත්ත සමුදායක් සහිත සේවාදායක කේතයක් ඇති බවයි. “ගෝලීය” යන්නෙන් මෙම අවස්ථා වලදී වෙනස් දේ අදහස් විය හැකිය.
රැල්ෆ්චැපින්

1

සියලුම ගෝලීය රාජ්‍යය දැකීමට සහ ප්‍රවේශ වීමට පහසු වූ විට, ක්‍රමලේඛකයින් නිරන්තරයෙන් එසේ කිරීම අවසන් කරයි. ඔබට ලැබෙන්නේ නොකියන සහ පරායත්තයන් සොයා ගැනීමට අපහසුය (int blahblah යන්නෙන් අදහස් කරන්නේ අරාව foo වලංගු වේ. සෑම දෙයක්ම ස්වාධීනව දෙගුණ කළ හැකි බැවින් වැඩසටහන් වෙනස්වීම් පවත්වා ගැනීම අත්‍යවශ්‍යයෙන්ම එය කළ නොහැක්කකි. සමහරුන්ට වෙනත් ඉන්ට් අතර සම්බන්ධතාවයක් ඇත, එය කළමනාකරණය කිරීමට අපහසු වන අතර ඔබට ඕනෑම වේලාවක කෙලින්ම වෙනස් කළ හැකි දැයි ඔප්පු කිරීමට අපහසුය.

එයින් කියැවෙන්නේ එය කළ හැකි බවයි (සමහර පද්ධතිවල ඇති එකම ක්‍රමය එය වූ විට ආපසු), නමුත් එම කුසලතා නැති වී යයි. ඒවා බොහෝ දුරට කේතීකරණ හා නම් කිරීමේ සම්මුතීන් වටා භ්‍රමණය වේ - ක්ෂේත්‍රය හොඳ හේතුවක් නිසා ඉදිරියට ගොස් ඇත. ප්‍රධාන සැලැස්මක් සහ කියවීමේ ප්‍රභවයක් අනුගමනය කිරීම සඳහා මිනිසුන් මත යැපීමට වඩා ඔබේ සම්පාදකයා සහ සම්බන්ධකය පන්ති / මොඩියුලවල ආරක්ෂිත / පුද්ගලික දත්තවල ආක්‍රමණ පරීක්ෂා කිරීම වඩා හොඳ කාර්යයක් කරයි.


1
"නමුත් එම කුසලතා නැති වී ඇත" ... සම්පූර්ණයෙන්ම තවමත් නැත. මම මෑතකදී මෘදුකාංග නිවසක වැඩ කළේ "ක්ලැරියන්" නම් වූ කේත උත්පාදක මෙවලමක් වන අතර එය තමන්ගේම මූලික-සමාන භාෂාවක් ඇති අතර උප චර්යාවන්ට තර්ක ඉදිරිපත් කිරීම වැනි අංගයන් නොමැත ... වාඩි වී සිටින සංවර්ධකයින් කිසිදු යෝජනාවක් ගැන සතුටු නොවීය. "වෙනස් කිරීම" හෝ "නවීකරණය කිරීම", අවසානයේ මගේ අදහස් වලින් පෝෂණය වී මා ient න සහ අකාර්යක්ෂම ලෙස නිරූපණය කළේය. මට යන්නට සිදු විය ...
ලුවී සොමර්ස්

1

ගෝලීය විචල්‍යයන් හොඳ හෝ නරකදැයි මම නොකියමි, නමුත් මම සාකච්ඡාවට එක් කිරීමට යන්නේ ඔබ ගෝලීය රාජ්‍යය භාවිතා නොකරන්නේ නම්, ඔබ බොහෝ මතකය නාස්ති කරන බව පැවසීමයි. විශේෂයෙන් ඔබ ක්ෂේත‍්‍රයන්හි පරායත්තතාවයන් ගබඩා කිරීම සඳහා පන්ති භාවිතා කරන විට.

ගෝලීය රාජ්‍යය සඳහා, එවැනි ගැටළුවක් නොමැත, සියල්ල ගෝලීය ය.

උදාහරණයක් ලෙස: පහත දැක්වෙන අවස්ථාව ගැන සිතන්න: ඔබට 10x10 ජාලයක් ඇති අතර එය පන්තියේ "පුවරුව" සහ "ටයිල්" වලින් සාදා ඇත.

ඔබට එය OOP ආකාරයෙන් කිරීමට අවශ්‍ය නම්, ඔබ බොහෝ විට "පුවරු" වස්තුව එක් එක් "ටයිල්" වෙත යොමු කරනු ඇත. දැන් අපි කියමු "ටයිල්" හි ඛණ්ඩාංක ගබඩා කරන "බයිට්" වර්ගයේ ක්ෂේත්‍ර 2 ක් ඇත. එක් ටයිල් එකක් සඳහා 32bit යන්ත්‍රයක් සඳහා ගතවන මුළු මතකය (1 + 1 + 4 = 6) බයිට් වනු ඇත: x ඛණ්ඩාංක සඳහා 1, y ඛණ්ඩාංක සඳහා 1 සහ පුවරුවට දර්ශකයක් සඳහා 4. උළු 10x10 සැකසීම සඳහා මෙය බයිට් 600 ක් ලබා දෙයි

දැන් මණ්ඩලය ගෝලීය විෂය පථයට අනුව, එක් ටයිල් එකකට ප්‍රවේශ විය හැකි එක් වස්තුවක් ඔබට ලබා ගත යුත්තේ එක් ටයිල් එකකට මතක බයිට් 2 ක් පමණි, එය x සහ y ඛණ්ඩාංක බයිට් වේ. මෙය ලබා දෙන්නේ බයිට් 200 ක් පමණි.

එබැවින් මෙම අවස්ථාවේදී ඔබට මතක ශක්තියෙන් 1/3 ක් ලැබෙන්නේ ඔබ ගෝලීය තත්වය පමණක් භාවිතා කරන්නේ නම් පමණි.

මෙය, වෙනත් දේ හැරුණු විට, ගෝලීය විෂය පථය තවමත් C ++ වැනි (සාපේක්ෂව) පහත් මට්ටමේ භාෂාවල පැවතීමට හේතුවක් යැයි මම සිතමි


1
එය භාෂාව මත බෙහෙවින් රඳා පවතී. වැඩසටහන් නොනවත්වා ක්‍රියාත්මක වන භාෂාවල, බොහෝ පංති ස්ථාපනය කිරීම වෙනුවට ගෝලීය අවකාශය සහ සිංගල්ටන් භාවිතා කිරීමෙන් ඔබට මතකය සුරැකිය හැකි බව සත්‍ය විය හැකි නමුත් එම තර්කය පවා දෙදරුම් කයි. ඒ සියල්ල ප්‍රමුඛතා ගැන ය. PHP වැනි භාෂාවල (ඉල්ලීමකට වරක් ක්‍රියාත්මක වන අතර වස්තූන් නොනැසී පවතී), එම තර්කය පවා වැදගත් වේ.
මදාරාගේ අවතාරය

1
AdMadaraUchiha නැත, මෙම තර්කය කිසිදු ආකාරයකින් නොසන්සුන් නොවේ. සමහර වීඑම් හෝ වෙනත් සම්පාදනය කරන ලද භාෂාවක් මේ ආකාරයේ ගැටළුවක් සමඟ දෘඩ කේත ප්‍රශස්තිකරණය නොකරන්නේ නම් එය වෛෂයික කරුණු වේ. එසේ නොමැති නම් එය තවමත් අදාළ ය. "එක් පහරක්" ලෙස භාවිතා කරන සේවාදායක පාර්ශවීය වැඩසටහන් සමඟ වුවද මතකය ක්‍රියාත්මක වන කාලය තුළ වෙන් කර ඇත. අධික බර සේවාදායකයක් සමඟ මෙය තීරණාත්මක ලක්ෂ්‍යයක් විය හැකිය.
luke1985

0

ගෝලීය රාජ්‍යය සමඟ සලකා බැලිය යුතු සාධක කිහිපයක් තිබේ:

  1. ක්‍රමලේඛක මතක අවකාශය
  2. වෙනස් කළ නොහැකි ගෝලීය / වරක් ගෝලීය ලෙස ලියන්න.
  3. විකෘති ග්ලෝබල්
  4. ගෝලීය මත යැපීම.

ඔබට වැඩි ගෝලීය ප්‍රමාණයක් ඇති විට, අනුපිටපත් හඳුන්වාදීමේ අවස්ථාව වැඩි වන අතර අනුපිටපත් සමමුහුර්තතාවයෙන් ඉවත් වන විට ඒවා බිඳ දමයි. ඔබගේ වැරදිසහගත මිනිස් මතකයේ ඇති සියලුම ගෝලීයයන් තබා ගැනීම අත්‍යවශ්‍ය මෙන්ම වේදනාකාරී වේ.

වෙනස් කළ නොහැකි / වරක් ලිවීම සාමාන්‍යයෙන් හරි, නමුත් ආරම්භක අනුක්‍රමික දෝෂ ගැන විමසිල්ලෙන් සිටින්න.

විකෘති ග්ලෝබල් බොහෝ විට වෙනස් නොවන ග්ලෝබල් ලෙස වරදවා වටහා ගනු ලැබේ…

ග්ලෝබල් භාවිතා කරන ශ්‍රිතයකට අතිරේක “සැඟවුණු” පරාමිතීන් ඇති අතර එය ප්‍රතිචක්‍රීකරණය කිරීම දුෂ්කර කරයි.

ගෝලීය රාජ්‍යය නපුරු නොවේ, නමුත් එය නිශ්චිත පිරිවැයකට පැමිණේ - ප්‍රතිලාභ පිරිවැය ඉක්මවා ගිය විට එය භාවිතා කරන්න.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.