લેખ

ડિઝાઇન પેટર્ન શું છે: શા માટે તેનો ઉપયોગ કરો, વર્ગીકરણ, ગુણદોષ

સોફ્ટવેર એન્જિનિયરિંગમાં, ડિઝાઇન પેટર્ન એ સમસ્યાઓ માટે શ્રેષ્ઠ ઉકેલો છે જે સામાન્ય રીતે સોફ્ટવેર ડિઝાઇનમાં થાય છે.

તેઓ પૂર્વ પ્રોજેક્ટ જેવા છે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

ઇનોવેશન ન્યૂઝલેટર
નવીનતા પરના સૌથી મહત્વપૂર્ણ સમાચારને ચૂકશો નહીં. તેમને ઇમેઇલ દ્વારા પ્રાપ્ત કરવા માટે સાઇન અપ કરો.

તાજેતરના લેખો

Veeam રેન્સમવેર માટે સૌથી વધુ વ્યાપક સમર્થન આપે છે, સુરક્ષાથી લઈને પ્રતિસાદ અને પુનઃપ્રાપ્તિ સુધી

Veeam દ્વારા Coveware સાયબર ગેરવસૂલી ઘટના પ્રતિભાવ સેવાઓ પ્રદાન કરવાનું ચાલુ રાખશે. કોવવેર ફોરેન્સિક્સ અને ઉપચાર ક્ષમતાઓ પ્રદાન કરશે...

23 એપ્રિલ 2024

હરિયાળી અને ડિજિટલ ક્રાંતિ: કેવી રીતે અનુમાનિત જાળવણી તેલ અને ગેસ ઉદ્યોગને પરિવર્તિત કરી રહી છે

પ્લાન્ટ મેનેજમેન્ટ માટે નવીન અને સક્રિય અભિગમ સાથે, આગાહીયુક્ત જાળવણી તેલ અને ગેસ ક્ષેત્રમાં ક્રાંતિ લાવી રહી છે.…

22 એપ્રિલ 2024

UK એન્ટિટ્રસ્ટ રેગ્યુલેટરે GenAI પર BigTech એલાર્મ વધાર્યું

UK CMA એ આર્ટિફિશિયલ ઇન્ટેલિજન્સ માર્કેટમાં બિગ ટેકના વર્તન વિશે ચેતવણી જારી કરી છે. ત્યાં…

18 એપ્રિલ 2024

કાસા ગ્રીન: ઇટાલીમાં ટકાઉ ભવિષ્ય માટે ઊર્જા ક્રાંતિ

ઈમારતોની ઉર્જા કાર્યક્ષમતા વધારવા માટે યુરોપિયન યુનિયન દ્વારા ઘડવામાં આવેલ "ગ્રીન હાઉસીસ" હુકમનામું, તેની કાયદાકીય પ્રક્રિયાને પૂર્ણ કરી છે...

18 એપ્રિલ 2024

તમારી ભાષામાં ઇનોવેશન વાંચો

ઇનોવેશન ન્યૂઝલેટર
નવીનતા પરના સૌથી મહત્વપૂર્ણ સમાચારને ચૂકશો નહીં. તેમને ઇમેઇલ દ્વારા પ્રાપ્ત કરવા માટે સાઇન અપ કરો.

અમને અનુસરો