PrestaShop యొక్క గ్లోబల్ కాన్ఫిగరేషన్ టేబుల్ వల్ల, ఒక మాడ్యూల్ యొక్క అన్ఇన్స్టాల్ రూటీన్ (uninstall routine), పూర్తిగా సంబంధం లేని ఇతర ఎక్స్టెన్షన్లకు చెందిన సెట్టింగ్లను కూడా సులభంగా తొలగించే ప్రమాదం ఉంది. Configuration::deleteByName('width') అనే ఒకే ఒక్క కాల్, మరొక షాప్ యొక్క కస్టమ్ విడ్త్ (width) విలువను తుడిచివేసి, వ్యాపారిని అయోమయానికి గురిచేయవచ్చు మరియు ఆ మాడ్యూల్ ఏమీ చేయనట్లుగా కనిపిస్తుంది.
షేర్డ్ కాన్ఫిగరేషన్ టేబుల్ ఎందుకు ముఖ్యమైనది
PrestaShop ప్రతి మాడ్యూల్ యొక్క సెట్టింగ్లను కేవలం ఒక కీ (key) మరియు ఒక విలువను (value) మాత్రమే కలిగి ఉండే ఒకే ఒక టేబుల్లో నిల్వ చేస్తుంది. ఏ మాడ్యూల్ ఒక రో (row)ను సృష్టించిందో రికార్డ్ చేసే కాలమ్ ఈ టేబుల్లో ఉండదు మరియు ఇది ఎటువంటి నేమింగ్ కన్వెన్షన్ను (naming convention) అమలు చేయదు. దీని ఫలితంగా, ఒకే కీని—ఉదాహరణకు “width” లేదా “API_DATE_FROM”—ఉపయోగించే రెండు మాడ్యూల్స్, ఒకే డేటాబేస్ రోను చదువుతాయి మరియు రాస్తాయి. చివరిగా ఏది రాస్తే అదే సేవ్ అవుతుంది, మరియు తర్వాత జరిగే ఏదైనా డిలీట్ ఆ రోను ఇద్దరికీ తొలగిస్తుంది.
అన్ఇన్స్టాల్ కోడ్ డేటాను తుడిచివేసే సాధనంగా మారినప్పుడు
సాధారణ అన్ఇన్స్టాల్ మెథడ్ ఇలా ఉంటుంది:
public function uninstall()
{
return Configuration::deleteByName('width');
}
దీని ఉద్దేశ్యం మాడ్యూల్ యొక్క స్వంత కాన్ఫిగరేషన్ను క్లీన్ చేయడం, కానీ కీ నేమ్స్పేస్ (namespace) చేయబడకపోవడం వల్ల, ఆ స్టేట్మెంట్ “width” అని పిలువబడే ఏదైనా రోను తొలగిస్తుంది. ఎటువంటి హెచ్చరిక (warning) ఉండదు, ఎటువంటి ఎక్సెప్షన్ (exception) రాదు; ఆ రో కేవలం మాయమైపోతుంది. వ్యాపారి యొక్క ఇతర మాడ్యూల్ తన సెట్టింగ్ను నిశ్శబ్దంగా కోల్పోతుంది మరియు వింతగా ప్రవర్తించడం ప్రారంభించవచ్చు.
వెర్షన్ అప్గ్రేడ్ సమయంలో ఈ సమస్య మరింత తీవ్రమవుతుంది. వెర్షన్ 1.0 నుండి 2.0 కి మారే డెవలపర్, MY_MODULE_WIDTH వంటి ప్రిఫిక్స్ (prefix) ఉన్న కీ కింద విలువలను సేవ్ చేయడం ప్రారంభించవచ్చు. పాత, ప్రిఫిక్స్ లేని ఎంట్రీలను “క్లీన్ అప్” చేయడానికి, వారు కేవలం పాత డేటాను మాత్రమే తొలగిస్తున్నామని నమ్మి, అన్ఇన్స్టాల్ రూటీన్లో ఒక డిలీట్ కాల్ను జోడిస్తారు. వాస్తవానికి, వారు అదే జనరిక్ కీ కింద నిల్వ చేయబడిన ఇతర ఎక్స్టెన్షన్లను కూడా తొలగిస్తున్నారు.
ఆడిట్ ద్వారా వెల్లడైన అంశాలు
57 పబ్లిక్ మాడ్యూల్ రిపోజిటరీల ఆడిట్ ఒక పునరావృతమయ్యే నమూనాను (pattern) వెల్లడించింది:
- చాలా మాడ్యూల్స్ మాడ్యూల్ పేరు నుండి పొందిన ఎటువంటి ప్రి
సారాంశం
PrestaShop డిజైన్ కాన్ఫిగరేషన్ టేబుల్ను ఒక ఉమ్మడి వనరుగా మారుస్తుంది, కాబట్టి అజాగ్రత్తగా ఉండే అన్ఇన్స్టాల్ విధానం మరొక మాడ్యూల్ యొక్క సెట్టింగ్లను ఎటువంటి ఆధారాలు లేకుండా తుడిచివేసే ప్రమాదం ఉంది. కీలను నేమ్స్పేసింగ్ చేయడం, క్లీనప్ ప్రక్రియలో అతిగా వ్యవహరించకుండా ఉండటం మరియు ఇతర ఎంట్రీలను రక్షించే ఒక సాధారణ పరీక్షను జోడించడం ద్వారా, డెవలపర్లు నిశ్శబ్దంగా జరిగే డేటా నష్టాన్ని నివారించవచ్చు మరియు వ్యాపారుల షాపులను స్థిరంగా ఉంచవచ్చు. దీనికి అవసరమైన కృషి చాలా తక్కువ, కానీ ఒక సెట్టింగ్ కోల్పోవడం వల్ల కలిగే నష్టం—కస్టమర్ల ఫిర్యాదులు, సపోర్ట్ టికెట్లు మరియు దెబ్బతిన్న ప్రతిష్ట—చాలా ఎక్కువగా ఉండవచ్చు.
