వ్యాసాలు

డిజైన్ నమూనాలు ఏమిటి: వాటిని ఎందుకు ఉపయోగించాలి, వర్గీకరణ, లాభాలు మరియు నష్టాలు

సాఫ్ట్‌వేర్ ఇంజనీరింగ్‌లో, సాఫ్ట్‌వేర్ రూపకల్పనలో సాధారణంగా సంభవించే సమస్యలకు డిజైన్ నమూనాలు సరైన పరిష్కారాలు.

అవి ప్రీ ప్రాజెక్ట్స్ లాంటివిdefiమీ కోడ్‌లో పునరావృతమయ్యే డిజైన్ సమస్యను పరిష్కరించడానికి మీరు అనుకూలీకరించగల రాత్రి, ప్రయత్నించిన మరియు పరీక్షించబడిన సాధనాలు.

అంచనా పఠన సమయం: 6 నిమిషాల

డిజైన్ ప్యాటర్న్ అంటే ఏమిటి

డిజైన్ నమూనా అనేది ప్రామాణిక ఫంక్షన్‌లు లేదా లైబ్రరీలతో మనం చేయగలిగినట్లుగా, మన ప్రోగ్రామ్‌లో కాపీ చేసి ఇన్సర్ట్ చేయగల కోడ్ కాదు. డిజైన్ నమూనా అనేది ఒక నిర్దిష్ట సమస్యను పరిష్కరించగల సాధారణ భావన. ప్రాథమికంగా ఒక మోడల్, దీని వివరాలను మనం అనుసరించవచ్చు మరియు మా ప్రోగ్రామ్ యొక్క వాస్తవికతకు సరిపోయే పరిష్కారాన్ని అమలు చేయవచ్చు.

మోడల్‌లు తరచుగా అల్గారిథమ్‌లతో గందరగోళానికి గురవుతాయి, ఎందుకంటే రెండు భావనలు కొన్ని తెలిసిన సమస్యలకు సాధారణ పరిష్కారాలను వివరిస్తాయి. ఒక అల్గోరిథం అయితే defiఒక నిర్దిష్ట లక్ష్యాన్ని సాధించగల స్పష్టమైన చర్యల సమితి ఎల్లప్పుడూ ఉంటే, మోడల్ అనేది పరిష్కారం యొక్క ఉన్నత స్థాయి వివరణ. రెండు వేర్వేరు ప్రోగ్రామ్‌లకు వర్తించే ఒకే మోడల్ నుండి కోడ్ భిన్నంగా ఉండవచ్చు.

ఒక సారూప్యతను తయారు చేయాలనుకుంటే, మేము ఒక వంట వంటకం గురించి ఆలోచించవచ్చు: లక్ష్యాన్ని సాధించడానికి ఇద్దరికీ స్పష్టమైన దశలు ఉన్నాయి. అయితే, మోడల్ అనేది ప్రాజెక్ట్ లాగా ఉంటుంది, దాని ఫలితం మరియు దాని లక్షణాలు ఏమిటో మీరు చూడవచ్చు, కానీ అమలు యొక్క ఖచ్చితమైన క్రమం కోడ్‌ను వ్రాసే మనపై ఆధారపడి ఉంటుంది.

డిజైన్ నమూనా దేనితో తయారు చేయబడింది?

చాలా నమూనాలు చాలా అధికారికంగా వివరించబడ్డాయి, తద్వారా ప్రజలు వాటిని అనేక సందర్భాలలో పునరుత్పత్తి చేయగలరు. మోడల్ యొక్క వివరణలో ఉన్న అంశాలను క్రింద చూద్దాం:

  • ఉద్దేశం మోడల్ క్లుప్తంగా సమస్య మరియు పరిష్కారం రెండింటినీ వివరిస్తుంది.
  • ప్రేరణ మోడల్ సాధ్యం చేసే సమస్యను మరియు పరిష్కారాన్ని మరింత వివరిస్తుంది.
  • నిర్మాణం తరగతులు మోడల్ యొక్క ప్రతి భాగాన్ని చూపుతాయి మరియు అవి ఎలా సంబంధం కలిగి ఉన్నాయి.
  • కోడ్ ఉదాహరణ అత్యంత ప్రజాదరణ పొందిన ప్రోగ్రామింగ్ భాషలలో ఒకదానిలో మోడల్ వెనుక ఉన్న ఆలోచనను అర్థం చేసుకోవడం సులభం చేస్తుంది.

వాటిని ఎందుకు ఉపయోగించాలి?

ప్రోగ్రామర్ డిజైన్ నమూనాల ఉనికి తెలియకుండానే సాఫ్ట్‌వేర్‌ను అభివృద్ధి చేయవచ్చు. చాలామంది చేస్తారు, మరియు ఈ కారణంగా వారు తెలియకుండానే కొన్ని పథకాలను అమలు చేస్తారు. అయితే మనం వాటిని నేర్చుకోవడానికి ఎందుకు సమయం వెచ్చించాలి?

  • డిజైన్ నమూనాలు ఒక కిట్ ప్రయత్నించిన మరియు పరీక్షించిన పరిష్కారాలు సాఫ్ట్‌వేర్ రూపకల్పనలో సాధారణ సమస్యలకు. మీరు ఈ సమస్యలను ఎన్నడూ ఎదుర్కోకపోయినా, ఆబ్జెక్ట్-ఓరియెంటెడ్ డిజైన్ సూత్రాలను ఉపయోగించి అన్ని రకాల సమస్యలను ఎలా పరిష్కరించాలో ఇది మీకు నేర్పుతుంది కాబట్టి నమూనాలను తెలుసుకోవడం ఇప్పటికీ ఉపయోగకరంగా ఉంటుంది.
  • డిజైన్ నమూనాలు defiవారు మీరు మరియు మీ బృందం మరింత సమర్థవంతంగా కమ్యూనికేట్ చేయడానికి ఉపయోగించే ఒక సాధారణ భాషను సృష్టిస్తారు. మీరు ఇలా చెప్పవచ్చు, “ఓహ్, దీన్ని చేయడానికి సింగిల్‌టన్‌ని ఉపయోగించండి,” మరియు మీ సూచన వెనుక ఉన్న ఆలోచనను ప్రతి ఒక్కరూ అర్థం చేసుకుంటారు. మీకు నమూనా మరియు దాని పేరు తెలిస్తే సింగిల్‌టన్ అంటే ఏమిటో వివరించాల్సిన అవసరం లేదు.

డిజైన్ నమూనాల వర్గీకరణ

డిజైన్ నమూనాలు సంక్లిష్టత, వివరాల స్థాయి మరియు రూపొందించిన సిస్టమ్ అంతటా వర్తించే స్థాయిలో విభిన్నంగా ఉంటాయి.

సారూప్యత ద్వారా, మేము కొన్ని ట్రాఫిక్ లైట్లను ఇన్‌స్టాల్ చేయడం ద్వారా లేదా పాదచారుల కోసం భూగర్భ మార్గాలతో మొత్తం బహుళస్థాయి ఇంటర్‌చేంజ్‌ను నిర్మించడం ద్వారా కూడలిని సురక్షితంగా చేయవచ్చు.

అత్యంత ప్రాథమిక, తక్కువ-స్థాయి నమూనాలను తరచుగా పిలుస్తారు ఇడియమ్స్ . అవి సాధారణంగా ఒకే ప్రోగ్రామింగ్ భాషకు మాత్రమే వర్తిస్తాయి.

అత్యంత సార్వత్రిక మరియు ఉన్నత-స్థాయి నమూనాలు నిర్మాణ నమూనాలు . డెవలపర్‌లు ఈ నమూనాలను వాస్తవంగా ఏ భాషలోనైనా అమలు చేయగలరు. ఇతర నమూనాల మాదిరిగా కాకుండా, మొత్తం అప్లికేషన్ యొక్క నిర్మాణాన్ని రూపొందించడానికి వాటిని ఉపయోగించవచ్చు.

ఇంకా, అన్ని నమూనాలను వాటి ప్రకారం వర్గీకరించవచ్చు ప్రయత్నించారు లేదా ప్రయోజనం. మూడు ప్రధాన తరగతులు:

ఇన్నోవేషన్ వార్తాలేఖ
ఆవిష్కరణకు సంబంధించిన అత్యంత ముఖ్యమైన వార్తలను మిస్ చేయవద్దు. ఇమెయిల్ ద్వారా వాటిని స్వీకరించడానికి సైన్ అప్ చేయండి.
  • సృజనాత్మక నమూనాలు అవి వశ్యతను పెంచే ఆబ్జెక్ట్ క్రియేషన్ మెకానిజమ్‌లను అందిస్తాయి మరియు ఇప్పటికే ఉన్న కోడ్ యొక్క పునర్వినియోగాన్ని అందిస్తాయి.
  • నిర్మాణ నమూనాలు వస్తువులు మరియు తరగతులను పెద్ద నిర్మాణాలుగా ఎలా సమీకరించాలో వారు వివరిస్తారు, ఈ నిర్మాణాలను సరళంగా మరియు సమర్థవంతంగా ఉంచుతారు.
  • ప్రవర్తనా నమూనాలు వారు వస్తువుల మధ్య సమర్థవంతమైన కమ్యూనికేషన్ మరియు బాధ్యతల కేటాయింపుతో వ్యవహరిస్తారు.

లారావెల్‌లో డిజైన్ నమూనా యొక్క ఉదాహరణ: ముఖభాగం

ప్రవేశద్వారం లైబ్రరీ, ఫ్రేమ్‌వర్క్ లేదా ఏదైనా ఇతర సంక్లిష్టమైన తరగతుల సెట్‌కు సరళీకృత ఇంటర్‌ఫేస్‌ను అందించే స్ట్రక్చరల్ డిజైన్ నమూనా.

సమస్య

అధునాతన లైబ్రరీ లేదా ఫ్రేమ్‌వర్క్‌కు చెందిన పెద్ద వస్తువుల సెట్‌పై ఆధారపడి మనం సాఫ్ట్‌వేర్ పని చేయాలని అనుకుందాం. సాధారణంగా, మేము ఈ వస్తువులన్నింటినీ ప్రారంభించాలి, డిపెండెన్సీలను ట్రాక్ చేయాలి, సరైన క్రమంలో పద్ధతులను అమలు చేయాలి మరియు మొదలైనవి.

తత్ఫలితంగా, తరగతుల వ్యాపార తర్కం థర్డ్-పార్టీ తరగతుల అమలు వివరాలతో గట్టిగా జతచేయబడుతుంది, వాటిని అర్థం చేసుకోవడం మరియు నిర్వహించడం కష్టమవుతుంది.

పరిష్కారం

ఉన facade అనేక కదిలే భాగాలను కలిగి ఉన్న సంక్లిష్ట ఉపవ్యవస్థకు సాధారణ ఇంటర్‌ఫేస్‌ను అందించే తరగతి. ఎ facade సబ్‌సిస్టమ్‌తో నేరుగా పని చేయడంతో పోలిస్తే పరిమిత కార్యాచరణను అందించవచ్చు. అయితే, ఇది కస్టమర్‌లు నిజంగా శ్రద్ధ వహించే ఫీచర్‌లను మాత్రమే కలిగి ఉంటుంది.

ఒకటి facade డజన్ల కొద్దీ ఫీచర్‌లను కలిగి ఉన్న అధునాతన లైబ్రరీతో అనువర్తనాన్ని అనుసంధానించాల్సిన అవసరం వచ్చినప్పుడు ఇది ఉపయోగకరంగా ఉంటుంది, కానీ దాని కార్యాచరణలో మాకు కొంత భాగం మాత్రమే అవసరం.

ఉదాహరణకు, పిల్లులతో కూడిన చిన్న ఫన్నీ వీడియోలను సోషల్ మీడియాకు అప్‌లోడ్ చేసే యాప్ ప్రొఫెషనల్ వీడియో కన్వర్షన్ లైబ్రరీని సమర్థవంతంగా ఉపయోగించుకోవచ్చు. అయితే, మనకు నిజంగా కావలసిందల్లా ఒకే పద్ధతితో కూడిన తరగతి encode(filename, format). అటువంటి తరగతిని సృష్టించి, దానిని వీడియో మార్పిడి లైబ్రరీకి కనెక్ట్ చేసిన తర్వాత, మేము మా మొదటిదాన్ని కలిగి ఉంటాము facade.

ఉదాహరణకు, కాల్ సెంటర్ యొక్క టెలిఫోన్ ఆపరేటర్ ఒక వంటిది facade. వాస్తవానికి, మేము టెలిఫోన్ ఆర్డర్ చేయడానికి స్టోర్ యొక్క టెలిఫోన్ సేవకు కాల్ చేసినప్పుడు, ఒక ఆపరేటర్ మాది facade స్టోర్ యొక్క అన్ని సేవలు మరియు విభాగాల వైపు. ఆపరేటర్ ఆర్డరింగ్ సిస్టమ్, చెల్లింపు గేట్‌వేలు మరియు వివిధ డెలివరీ సేవలకు సాధారణ వాయిస్ ఇంటర్‌ఫేస్‌ను అందిస్తుంది.

PHPలో నిజమైన ఉదాహరణ

గురించి ఆలోచించండి ప్రవేశద్వారం కొన్ని సంక్లిష్ట ఉపవ్యవస్థల కోసం సాధారణ అడాప్టర్‌గా. Facade ఒకే తరగతిలోని సంక్లిష్టతను వేరు చేస్తుంది మరియు సాధారణ ఇంటర్‌ఫేస్‌ని ఉపయోగించడానికి ఇతర అప్లికేషన్ కోడ్‌ని అనుమతిస్తుంది.

ఈ ఉదాహరణలో, Facade క్లయింట్ కోడ్ నుండి YouTube API మరియు FFmpeg లైబ్రరీ సంక్లిష్టతను దాచిపెడుతుంది. డజన్ల కొద్దీ తరగతులతో పనిచేయడానికి బదులుగా, క్లయింట్ ముఖభాగంలో ఒక సాధారణ పద్ధతిని ఉపయోగిస్తుంది.

<?php

namespace RefactoringGuru\Facade\RealWorld;

/**
 * The Facade provides a single method for downloading videos from YouTube. This
 * method hides all the complexity of the PHP network layer, YouTube API and the
 * video conversion library (FFmpeg).
 */
class YouTubeDownloader
{
    protected $youtube;
    protected $ffmpeg;

    /**
     * It is handy when the Facade can manage the lifecycle of the subsystem it
     * uses.
     */
    public function __construct(string $youtubeApiKey)
    {
        $this->youtube = new YouTube($youtubeApiKey);
        $this->ffmpeg = new FFMpeg();
    }

    /**
     * The Facade provides a simple method for downloading video and encoding it
     * to a target format (for the sake of simplicity, the real-world code is
     * commented-out).
     */
    public function downloadVideo(string $url): void
    {
        echo "Fetching video metadata from youtube...\n";
        // $title = $this->youtube->fetchVideo($url)->getTitle();
        echo "Saving video file to a temporary file...\n";
        // $this->youtube->saveAs($url, "video.mpg");

        echo "Processing source video...\n";
        // $video = $this->ffmpeg->open('video.mpg');
        echo "Normalizing and resizing the video to smaller dimensions...\n";
        // $video
        //     ->filters()
        //     ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
        //     ->synchronize();
        echo "Capturing preview image...\n";
        // $video
        //     ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
        //     ->save($title . 'frame.jpg');
        echo "Saving video in target formats...\n";
        // $video
        //     ->save(new FFMpeg\Format\Video\X264(), $title . '.mp4')
        //     ->save(new FFMpeg\Format\Video\WMV(), $title . '.wmv')
        //     ->save(new FFMpeg\Format\Video\WebM(), $title . '.webm');
        echo "Done!\n";
    }
}

/**
 * The YouTube API subsystem.
 */
class YouTube
{
    public function fetchVideo(): string { /* ... */ }

    public function saveAs(string $path): void { /* ... */ }

    // ...more methods and classes...
}

/**
 * The FFmpeg subsystem (a complex video/audio conversion library).
 */
class FFMpeg
{
    public static function create(): FFMpeg { /* ... */ }

    public function open(string $video): void { /* ... */ }

    // ...more methods and classes... RU: ...дополнительные методы и классы...
}

class FFMpegVideo
{
    public function filters(): self { /* ... */ }

    public function resize(): self { /* ... */ }

    public function synchronize(): self { /* ... */ }

    public function frame(): self { /* ... */ }

    public function save(string $path): self { /* ... */ }

    // ...more methods and classes... RU: ...дополнительные методы и классы...
}


/**
 * The client code does not depend on any subsystem's classes. Any changes
 * inside the subsystem's code won't affect the client code. You will only need
 * to update the Facade.
 */
function clientCode(YouTubeDownloader $facade)
{
    // ...

    $facade->downloadVideo("https://www.youtube.com/watch?v=QH2-TGUlwu4");

    // ...
}

$facade = new YouTubeDownloader("APIKEY-XXXXXXXXX");
clientCode($facade);

Ercole Palmeri

ఇన్నోవేషన్ వార్తాలేఖ
ఆవిష్కరణకు సంబంధించిన అత్యంత ముఖ్యమైన వార్తలను మిస్ చేయవద్దు. ఇమెయిల్ ద్వారా వాటిని స్వీకరించడానికి సైన్ అప్ చేయండి.

ఇటీవల కథనాలు

వీమ్ రక్షణ నుండి ప్రతిస్పందన మరియు పునరుద్ధరణ వరకు ransomware కోసం అత్యంత సమగ్రమైన మద్దతును కలిగి ఉంది

Veeam ద్వారా Coveware సైబర్ దోపిడీ సంఘటన ప్రతిస్పందన సేవలను అందించడం కొనసాగిస్తుంది. Coveware ఫోరెన్సిక్స్ మరియు రెమిడియేషన్ సామర్థ్యాలను అందిస్తుంది…

ఏప్రిల్ 29 మంగళవారం

గ్రీన్ అండ్ డిజిటల్ రివల్యూషన్: ఎలా ప్రిడిక్టివ్ మెయింటెనెన్స్ ఆయిల్ & గ్యాస్ ఇండస్ట్రీని మారుస్తుంది

ప్లాంట్ నిర్వహణకు వినూత్నమైన మరియు చురుకైన విధానంతో ప్రిడిక్టివ్ మెయింటెనెన్స్ చమురు & గ్యాస్ రంగంలో విప్లవాత్మక మార్పులు చేస్తోంది.…

ఏప్రిల్ 29 మంగళవారం

UK యాంటీట్రస్ట్ రెగ్యులేటర్ GenAIపై బిగ్‌టెక్ అలారంను పెంచింది

ఆర్టిఫిషియల్ ఇంటెలిజెన్స్ మార్కెట్‌లో బిగ్ టెక్ ప్రవర్తన గురించి UK CMA హెచ్చరిక జారీ చేసింది. అక్కడ…

ఏప్రిల్ 29 మంగళవారం

కాసా గ్రీన్: ఇటలీలో స్థిరమైన భవిష్యత్తు కోసం శక్తి విప్లవం

భవనాల శక్తి సామర్థ్యాన్ని పెంపొందించడానికి యూరోపియన్ యూనియన్ రూపొందించిన "గ్రీన్ హౌస్" డిక్రీ, దాని శాసన ప్రక్రియను దీనితో ముగించింది...

ఏప్రిల్ 29 మంగళవారం

మీ భాషలో ఇన్నోవేషన్ చదవండి

ఇన్నోవేషన్ వార్తాలేఖ
ఆవిష్కరణకు సంబంధించిన అత్యంత ముఖ్యమైన వార్తలను మిస్ చేయవద్దు. ఇమెయిల్ ద్వారా వాటిని స్వీకరించడానికి సైన్ అప్ చేయండి.

మాకు అనుసరించండి