អត្ថបទ

តើអ្វីជាគំរូរចនា៖ ហេតុអ្វីត្រូវប្រើពួកវា ចំណាត់ថ្នាក់ គុណសម្បត្តិ និងគុណវិបត្តិ

នៅក្នុងវិស្វកម្មផ្នែកទន់ គំរូនៃការរចនាគឺជាដំណោះស្រាយដ៏ប្រសើរបំផុតចំពោះបញ្ហាដែលកើតឡើងជាទូទៅនៅក្នុងការរចនាកម្មវិធី។

ពួកគេដូចជាគម្រោងមុន។defiឧបករណ៍ដែលបានសាកល្បង និងសាកល្បងដែលអ្នកអាចប្ដូរតាមបំណង ដើម្បីដោះស្រាយបញ្ហាការរចនាដែលកើតឡើងដដែលៗនៅក្នុងកូដរបស់អ្នក។

ពេលវេលាអានប៉ាន់ស្មាន៖ 6 មីទីតូ។

តើអ្វីជាគំរូរចនា

គំរូរចនាមិនមែនជាកូដដែលយើងអាចចម្លង និងបញ្ចូលទៅក្នុងកម្មវិធីរបស់យើង ដូចដែលយើងអាចធ្វើជាមួយមុខងារស្តង់ដារ ឬបណ្ណាល័យ។ គំរូរចនាគឺជាគំនិតទូទៅដែលមានសមត្ថភាពដោះស្រាយបញ្ហាជាក់លាក់ណាមួយ។ ជាទូទៅ គំរូដែលមានព័ត៌មានលម្អិតដែលយើងអាចអនុវត្តតាម និងអនុវត្តដំណោះស្រាយដែលសមនឹងការពិតនៃកម្មវិធីរបស់យើង។

ម៉ូដែលច្រើនតែច្រឡំជាមួយក្បួនដោះស្រាយ ព្រោះគំនិតទាំងពីរពណ៌នាអំពីដំណោះស្រាយធម្មតាចំពោះបញ្ហាដែលគេស្គាល់មួយចំនួន។ ខណៈពេលដែលក្បួនដោះស្រាយមួយ។ defiប្រសិនបើតែងតែមានសំណុំសកម្មភាពច្បាស់លាស់ដែលអាចសម្រេចបាននូវគោលដៅជាក់លាក់មួយ គំរូគឺជាការពិពណ៌នាកម្រិតខ្ពស់នៃដំណោះស្រាយ។ កូដពីគំរូដូចគ្នាដែលបានអនុវត្តចំពោះកម្មវិធីពីរផ្សេងគ្នាអាចខុសគ្នា។

ដោយចង់បង្កើតភាពស្រដៀងគ្នា យើងអាចគិតពីរូបមន្តធ្វើម្ហូប៖ ទាំងពីរមានជំហានច្បាស់លាស់ដើម្បីសម្រេចគោលដៅមួយ។ ទោះជាយ៉ាងណាក៏ដោយ គំរូមួយគឺដូចជាគម្រោងមួយ ដែលអ្នកអាចមើលឃើញពីលទ្ធផល និងលក្ខណៈរបស់វា ប៉ុន្តែលំដាប់ជាក់លាក់នៃការអនុវត្តគឺអាស្រ័យលើយើងដែលសរសេរកូដ។

តើ Design Pattern ធ្វើពីអ្វី?

គំរូភាគច្រើនត្រូវបានពិពណ៌នាជាផ្លូវការ ដូច្នេះមនុស្សអាចផលិតវាឡើងវិញក្នុងបរិបទជាច្រើន។ តោះមើលធាតុខាងក្រោមដែលមាននៅក្នុងការពិពណ៌នាអំពីគំរូ៖

  • ចេតនា នៃគំរូពិពណ៌នាសង្ខេបទាំងបញ្ហា និងដំណោះស្រាយ។
  • ការលើកទឹកចិត្ត ពន្យល់បន្ថែមអំពីបញ្ហា និងដំណោះស្រាយដែលគំរូធ្វើឱ្យអាចធ្វើទៅបាន។
  • រចនាសម្ព័ន្ធ នៃថ្នាក់បង្ហាញផ្នែកនីមួយៗនៃគំរូ និងរបៀបដែលវាទាក់ទងគ្នា។
  • ឧទាហរណ៍នៃកូដ នៅក្នុងភាសាសរសេរកម្មវិធីដ៏ពេញនិយមបំផុតមួយ ធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការយល់អំពីគំនិតនៅពីក្រោយគំរូ។

ហេតុអ្វីត្រូវប្រើពួកវា?

អ្នកសរសេរកម្មវិធីអាចបង្កើតកម្មវិធីដោយមិនដឹងពីអត្ថិភាពនៃគំរូរចនា។ មនុស្សជាច្រើនធ្វើ ហើយសម្រាប់ហេតុផលនេះ ពួកគេអនុវត្តគ្រោងការណ៍មួយចំនួនដោយមិនដឹងខ្លួន។ ប៉ុន្តែ ហេតុ​អ្វី​បាន​ជា​យើង​គួរ​ចំណាយ​ពេល​រៀន​សូត្រ​ពី​គេ?

  • លំនាំនៃការរចនាគឺជាសំណុំនៃ សាកល្បង និងសាកល្បងដំណោះស្រាយ ចំពោះបញ្ហាទូទៅក្នុងការរចនាកម្មវិធី។ ទោះបីជាអ្នកមិនដែលជួបប្រទះបញ្ហាទាំងនេះក៏ដោយ ការដឹងពីគំរូនៅតែមានប្រយោជន៍ព្រោះវាបង្រៀនអ្នកពីរបៀបដោះស្រាយបញ្ហាគ្រប់ប្រភេទដោយប្រើគោលការណ៍រចនាទិសដៅវត្ថុ។
  • ម៉ូដែលរចនា defiពួកគេបង្កើតភាសាសាមញ្ញមួយដែលអ្នក និងក្រុមរបស់អ្នកអាចប្រើដើម្បីទំនាក់ទំនងកាន់តែមានប្រសិទ្ធភាព។ អ្នកអាចនិយាយថា "អូ គ្រាន់តែប្រើ Singleton ដើម្បីធ្វើរឿងនេះ" ហើយអ្នកគ្រប់គ្នានឹងយល់ពីគំនិតនៅពីក្រោយការស្នើរបស់អ្នក។ មិនចាំបាច់ពន្យល់ថា singleton ជាអ្វីទេ ប្រសិនបើអ្នកស្គាល់គំរូ និងឈ្មោះរបស់វា។

ចំណាត់ថ្នាក់នៃគំរូរចនា

គំរូនៃការរចនាមានភាពខុសប្លែកគ្នានៅក្នុងភាពស្មុគស្មាញ កម្រិតនៃព័ត៌មានលម្អិត និងទំហំនៃការអនុវត្តទូទាំងប្រព័ន្ធដែលបានរចនា។

ដោយភាពស្រដៀងគ្នា យើងអាចធ្វើឲ្យផ្លូវប្រសព្វមួយមានសុវត្ថិភាពជាងមុនដោយដំឡើងភ្លើងចរាចរណ៍ពីរបីកម្រិត ឬបង្កើតផ្លូវបំបែកពហុកម្រិតទាំងមូលជាមួយនឹងផ្លូវក្រោមដីសម្រាប់អ្នកថ្មើរជើង។

ម៉ូដែលកម្រិតទាបជាមូលដ្ឋានបំផុតត្រូវបានគេហៅថាជាញឹកញាប់ សព្វវចនាធិប្បាយ . ជាធម្មតាពួកវាអនុវត្តចំពោះភាសាសរសេរកម្មវិធីតែមួយប៉ុណ្ណោះ។

ម៉ូដែលសកលនិងកម្រិតខ្ពស់បំផុតគឺ គំរូស្ថាបត្យកម្ម . អ្នកអភិវឌ្ឍន៍អាចអនុវត្តលំនាំទាំងនេះជាភាសាស្ទើរតែទាំងអស់។ មិនដូចលំនាំផ្សេងទៀតទេ ពួកវាអាចត្រូវបានប្រើដើម្បីរចនាស្ថាបត្យកម្មនៃកម្មវិធីទាំងមូល។

ជាងនេះទៅទៀត ម៉ូដែលទាំងអស់អាចត្រូវបានចាត់ថ្នាក់តាមលក្ខណៈរបស់វា។ ព្យាយាម ឬគោលបំណង។ ថ្នាក់សំខាន់បីគឺ៖

ព្រឹត្តិប័ត្រព័ត៌មានច្នៃប្រឌិត
កុំខកខានព័ត៌មានសំខាន់បំផុតស្តីពីការច្នៃប្រឌិត។ ចុះឈ្មោះដើម្បីទទួលបានពួកគេតាមអ៊ីមែល។
  • គំរូច្នៃប្រឌិត ពួកគេផ្តល់នូវយន្តការបង្កើតវត្ថុដែលបង្កើនភាពបត់បែន និងការប្រើប្រាស់ឡើងវិញនូវកូដដែលមានស្រាប់។
  • គំរូរចនាសម្ព័ន្ធ ពួកគេពន្យល់ពីរបៀបប្រមូលផ្តុំវត្ថុ និងថ្នាក់ចូលទៅក្នុងរចនាសម្ព័ន្ធធំ ៗ ដោយរក្សារចនាសម្ព័ន្ធទាំងនេះឱ្យមានភាពបត់បែន និងមានប្រសិទ្ធភាព។
  • គំរូអាកប្បកិរិយា ពួកគេដោះស្រាយជាមួយនឹងការប្រាស្រ័យទាក់ទងប្រកបដោយប្រសិទ្ធភាព និងការចាត់តាំងការទទួលខុសត្រូវរវាងវត្ថុ។

ឧទាហរណ៍នៃការរចនាលំនាំនៅក្នុង Laravel: facade

Facade ។ គឺ​ជា​គំរូ​រចនា​រចនាសម្ព័ន្ធ​ដែល​ផ្ដល់​ចំណុចប្រទាក់​សាមញ្ញ​ទៅ​បណ្ណាល័យ ក្របខ័ណ្ឌ ឬ​សំណុំ​ថ្នាក់​ស្មុគស្មាញ​ផ្សេង​ទៀត។

បញ្ហា

ឧបមាថាយើងត្រូវការបង្កើតកម្មវិធី ដោយផ្អែកលើសំណុំវត្ថុដ៏ធំដែលជាកម្មសិទ្ធិរបស់បណ្ណាល័យ ឬក្របខ័ណ្ឌស្មុគ្រស្មាញ។ ជាធម្មតា យើងត្រូវចាប់ផ្តើមវត្ថុទាំងអស់នេះ តាមដានភាពអាស្រ័យ ប្រតិបត្តិវិធីតាមលំដាប់លំដោយត្រឹមត្រូវ។ល។

ជាលទ្ធផល តក្កវិជ្ជាធុរកិច្ចនៃថ្នាក់នឹងត្រូវបានភ្ជាប់យ៉ាងតឹងរ៉ឹងទៅនឹងព័ត៌មានលម្អិតនៃការអនុវត្តនៃថ្នាក់ភាគីទីបី ដែលធ្វើឲ្យពួកគេពិបាកយល់ និងគ្រប់គ្រង។

សូលុយស្យុង

ផ្លាក facade គឺ​ជា​ថ្នាក់​ដែល​ផ្តល់​នូវ​ចំណុចប្រទាក់​សាមញ្ញ​ទៅ​ប្រព័ន្ធ​រង​ដ៏​ស្មុគស្មាញ​ដែល​មាន​ផ្នែក​ផ្លាស់ទី​ជា​ច្រើន។ ក facade អាចផ្តល់នូវមុខងារមានកម្រិតបើប្រៀបធៀបទៅនឹងការធ្វើការដោយផ្ទាល់ជាមួយប្រព័ន្ធរង។ ទោះយ៉ាងណាក៏ដោយ វារួមបញ្ចូលតែលក្ខណៈពិសេសដែលអតិថិជនពិតជាយកចិត្តទុកដាក់។

មានមួយ facade វាមានប្រយោជន៍នៅពេលដែលយើងត្រូវការបញ្ចូលកម្មវិធីជាមួយបណ្ណាល័យទំនើបដែលមានមុខងាររាប់សិប ប៉ុន្តែយើងត្រូវការតែផ្នែកតូចមួយនៃមុខងាររបស់វាប៉ុណ្ណោះ។

ជាឧទាហរណ៍ កម្មវិធីដែលបង្ហោះវីដេអូកំប្លែងខ្លីៗជាមួយឆ្មាទៅកាន់ប្រព័ន្ធផ្សព្វផ្សាយសង្គមអាចប្រើបណ្ណាល័យបំលែងវីដេអូប្រកបដោយវិជ្ជាជីវៈ។ ទោះយ៉ាងណាក៏ដោយ អ្វីដែលយើងពិតជាត្រូវការគឺថ្នាក់ដែលមានវិធីសាស្ត្រតែមួយ encode(filename, format). បន្ទាប់​ពី​បង្កើត​ថ្នាក់​បែប​នេះ ហើយ​ភ្ជាប់​វា​ទៅ​បណ្ណាល័យ​បម្លែង​វីដេអូ យើង​នឹង​មាន​ថ្នាក់​ដំបូង​របស់​យើង facade.

ឧទាហរណ៍ ប្រតិបត្តិករទូរស័ព្ទនៃមជ្ឈមណ្ឌលហៅទូរស័ព្ទគឺដូចជា ក facade. តាមពិតទៅ នៅពេលដែលយើងហៅទូរស័ព្ទទៅសេវាទូរស័ព្ទរបស់ហាងមួយ ដើម្បីធ្វើការបញ្ជាតាមទូរស័ព្ទ ប្រតិបត្តិករគឺជារបស់យើង facade ទៅកាន់សេវាកម្ម និងនាយកដ្ឋានទាំងអស់នៃហាង។ ប្រតិបត្តិករផ្តល់នូវចំណុចប្រទាក់សំឡេងសាមញ្ញមួយទៅកាន់ប្រព័ន្ធបញ្ជាទិញ ច្រកទូទាត់ និងសេវាកម្មដឹកជញ្ជូនផ្សេងៗ។

ឧទាហរណ៍ជាក់ស្តែងនៅក្នុង PHP

គិត​ពី Facade ។ ជាអាដាប់ទ័រសាមញ្ញសម្រាប់ប្រព័ន្ធរងស្មុគស្មាញមួយចំនួន។ Facade ញែកភាពស្មុគស្មាញក្នុងថ្នាក់តែមួយ និងអនុញ្ញាតឱ្យកូដកម្មវិធីផ្សេងទៀតប្រើចំណុចប្រទាក់សាមញ្ញ។

ក្នុងឧទាហរណ៍នេះ Facade លាក់ភាពស្មុគស្មាញនៃ YouTube API និងបណ្ណាល័យ FFmpeg ពីកូដអតិថិជន។ ជំនួសឱ្យការធ្វើការជាមួយថ្នាក់រាប់សិប អតិថិជនប្រើវិធីសាស្រ្តសាមញ្ញមួយនៅលើ Facade ។

<?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 បង្ហាញពីការគាំទ្រដ៏ទូលំទូលាយបំផុតសម្រាប់ ransomware ចាប់ពីការការពាររហូតដល់ការឆ្លើយតប និងការស្តារឡើងវិញ

Coveware ដោយ Veeam នឹងបន្តផ្តល់សេវាកម្មឆ្លើយតបឧប្បត្តិហេតុជំរិតទារប្រាក់តាមអ៊ីនធឺណិត។ Coveware នឹងផ្តល់ជូននូវសមត្ថភាពផ្នែកកោសល្យវិច្ច័យ និងដំណោះស្រាយ…

23 ខែមេសា 2024

បដិវត្តន៍បៃតង និងឌីជីថល៖ របៀបដែលការថែទាំព្យាករណ៍កំពុងផ្លាស់ប្តូរឧស្សាហកម្មប្រេង និងឧស្ម័ន

ការថែទាំតាមទស្សន៍ទាយកំពុងធ្វើបដិវត្តវិស័យប្រេង និងឧស្ម័ន ជាមួយនឹងវិធីសាស្រ្តប្រកបដោយភាពច្នៃប្រឌិត និងសកម្មចំពោះការគ្រប់គ្រងរោងចក្រ។…

22 ខែមេសា 2024

និយតករប្រឆាំងការទុកចិត្តរបស់ចក្រភពអង់គ្លេសបង្កើនការជូនដំណឹង BigTech លើ GenAI

CMA របស់ចក្រភពអង់គ្លេសបានចេញការព្រមានអំពីអាកប្បកិរិយារបស់ Big Tech នៅក្នុងទីផ្សារបញ្ញាសិប្បនិម្មិត។ នៅទីនោះ…

18 ខែមេសា 2024

Casa Green: បដិវត្តថាមពលសម្រាប់អនាគតប្រកបដោយនិរន្តរភាពនៅប្រទេសអ៊ីតាលី

ក្រឹត្យ "Case Green" ដែលបង្កើតដោយសហភាពអឺរ៉ុប ដើម្បីបង្កើនប្រសិទ្ធភាពថាមពលនៃអគារ បានបញ្ចប់ដំណើរការនីតិប្បញ្ញត្តិរបស់ខ្លួនជាមួយនឹង…

18 ខែមេសា 2024

អានការច្នៃប្រឌិតជាភាសារបស់អ្នក។

ព្រឹត្តិប័ត្រព័ត៌មានច្នៃប្រឌិត
កុំខកខានព័ត៌មានសំខាន់បំផុតស្តីពីការច្នៃប្រឌិត។ ចុះឈ្មោះដើម្បីទទួលបានពួកគេតាមអ៊ីមែល។

តាមយើង

ស្លាក

សោធនអាហារកិច្ច ការវាយប្រហារតាមអ៊ីនធឺណិត blockchain chatbot ។ ជជែក gpt cloud cloud computing ទីផ្សារមាតិកា ការវាយប្រហារតាមអ៊ីនធឺណិត សន្តិសុខ​តាម​ប្រព័ន្ធ​អ៊ីនធឺណិត សិទ្ធិអ្នកប្រើប្រាស់ eCommerce អេណា ព្រឹត្តិការណ៍ច្នៃប្រឌិត gianfranco fedele ហ្គូហ្គល ឥទ្ធិពល ការបង្កើតថ្មី ការច្នៃប្រឌិតហិរញ្ញវត្ថុ ការច្នៃប្រឌិតកើនឡើង។ ការច្នៃប្រឌិតផ្នែកវេជ្ជសាស្រ្ត និរន្តរភាពនៃការបង្កើតថ្មី។ ការច្នៃប្រឌិតបច្ចេកវិទ្យា។ ភាពវៃឆ្លាតសិប្បនិម្មិត។ IOT រៀនម៉ាស៊ីន metaverse ក្រុមហ៊ុន Microsoft nft គ្មានមនុស្សនៅក្នុងរង្វិលជុំ កម្មវិធី PHP ឆ្លើយតប មនុស្សយន្ត SEO SERP ផ្នែកទន់ ការរចនាសូហ្វវែរ ការអភិវឌ្ឍកម្មវិធី វិស្វកម្មកម្មវិធី និរន្តរភាព ចាប់ផ្តើម ថាលស៍ ឯកសារបង្រៀន VPN web3