Ìwé

Kini awọn ilana apẹrẹ: kilode ti o lo wọn, iyasọtọ, awọn anfani ati awọn konsi

Ninu imọ-ẹrọ sọfitiwia, awọn ilana apẹrẹ jẹ awọn solusan aipe si awọn iṣoro ti o waye nigbagbogbo ni apẹrẹ sọfitiwia.

Wọn dabi awọn iṣẹ akanṣe tẹlẹdefinite, awọn irinṣẹ idanwo ati idanwo ti o le ṣe akanṣe lati yanju iṣoro apẹrẹ loorekoore ninu koodu rẹ.

Iye akoko kika: 6 iṣẹju

Kini Apẹrẹ Apẹrẹ

Apẹrẹ apẹrẹ kii ṣe koodu ti a le daakọ ati fi sii sinu eto wa, bi a ṣe le ṣe pẹlu awọn iṣẹ boṣewa tabi awọn ile-ikawe. Apẹrẹ apẹrẹ jẹ imọran gbogbogbo ti o lagbara lati yanju iṣoro kan pato. Ni ipilẹ awoṣe ti awọn alaye ti a le tẹle ati imuse ojutu kan ti o baamu otitọ ti eto wa.

Awọn awoṣe nigbagbogbo ni idamu pẹlu awọn algoridimu, nitori awọn imọran mejeeji ṣe apejuwe awọn solusan aṣoju si diẹ ninu awọn iṣoro ti a mọ. Nigba ti ohun alugoridimu defiTi o ba jẹ pe awọn iṣe ti o han gbangba nigbagbogbo wa ti o le ṣaṣeyọri ibi-afẹde kan, awoṣe jẹ apejuwe ipele ti o ga julọ ti ojutu kan. Koodu lati awoṣe kanna ti a lo si awọn eto oriṣiriṣi meji le yatọ.

Nfẹ lati ṣe afiwe, a le ronu ohunelo sise: mejeeji ni awọn igbesẹ ti o han gbangba lati ṣaṣeyọri ibi-afẹde kan. Sibẹsibẹ, awoṣe jẹ diẹ sii bi iṣẹ akanṣe kan, eyiti o le rii kini abajade ati awọn abuda rẹ jẹ, ṣugbọn ilana imuse gangan da lori wa ti o kọ koodu naa.

Kini Apẹrẹ Oniru ti a ṣe?

Pupọ awọn ilana ni a ṣapejuwe ni deede ki awọn eniyan le ṣe ẹda wọn ni ọpọlọpọ awọn aaye. Jẹ ki a wo ni isalẹ awọn eroja ti o wa ninu apejuwe ti awoṣe:

  • Idi naa ti awoṣe ni ṣoki ṣapejuwe mejeeji iṣoro naa ati ojutu.
  • Iwuri siwaju sii ṣalaye iṣoro naa ati ojutu ti awoṣe jẹ ki o ṣeeṣe.
  • Ilana ti awọn kilasi fihan apakan kọọkan ti awoṣe ati bi wọn ṣe ni ibatan.
  • Apẹẹrẹ koodu ninu ọkan ninu awọn ede siseto olokiki julọ jẹ ki o rọrun lati ni oye imọran lẹhin awoṣe naa.

Kí nìdí lo wọn?

Olupilẹṣẹ le ṣe agbekalẹ sọfitiwia laisi mimọ aye ti awọn ilana apẹrẹ. Ọpọlọpọ ṣe, ati fun idi eyi wọn ṣe awọn eto diẹ laisi mimọ. Àmọ́, kí nìdí tó fi yẹ ká máa fi àkókò kọ́ wọn?

  • Awọn awoṣe apẹrẹ jẹ kit ti gbiyanju ati idanwo awọn solusan si awọn iṣoro ti o wọpọ ni apẹrẹ software. Paapaa ti o ko ba pade awọn iṣoro wọnyi rara, mimọ awọn ilana tun wulo nitori pe o kọ ọ bi o ṣe le yanju gbogbo iru awọn iṣoro nipa lilo awọn ipilẹ apẹrẹ ti ohun-elo.
  • Awọn awoṣe apẹrẹ defiWọn ṣẹda ede ti o wọpọ ti iwọ ati ẹgbẹ rẹ le lo lati baraẹnisọrọ daradara siwaju sii. O le sọ, "Oh, o kan lo Singleton lati ṣe eyi," ati pe gbogbo eniyan yoo loye imọran lẹhin aba rẹ. Ko si ye lati ṣalaye kini singleton jẹ ti o ba mọ apẹrẹ ati orukọ rẹ.

Iyasọtọ ti Awọn awoṣe Oniru

Awọn ilana apẹrẹ yatọ ni idiju, ipele ti alaye, ati iwọn lilo jakejado eto apẹrẹ.

Nipa afiwe, a le jẹ ki ikorita kan wa ni ailewu nipa fifi sori ẹrọ awọn ina opopona diẹ tabi kikọ odindipaṣipaarọ awọn ipele pupọ pẹlu awọn ọna ipamo fun awọn alarinkiri.

Awọn ipilẹ julọ, awọn awoṣe ipele kekere ni a npe ni nigbagbogbo idioms . Wọn maa n kan si ede siseto kan ṣoṣo.

Awọn awoṣe ti gbogbo agbaye ati giga julọ jẹ ayaworan si dede . Awọn olupilẹṣẹ le ṣe imuṣe awọn ilana wọnyi ni fere eyikeyi ede. Ko dabi awọn ilana miiran, wọn le ṣee lo lati ṣe apẹrẹ faaji ti ohun elo gbogbo.

Pẹlupẹlu, gbogbo awọn awoṣe le wa ni ipin gẹgẹ bi wọn gbiyanju tabi idi. Awọn kilasi akọkọ mẹta ni:

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.
  • Awọn awoṣe ẹda wọn pese awọn ọna ṣiṣe ẹda ohun ti o mu irọrun ati ilotunlo koodu ti o wa tẹlẹ.
  • Awọn awoṣe igbekale wọn ṣe alaye bi o ṣe le ṣajọ awọn nkan ati awọn kilasi sinu awọn ẹya nla, titọju awọn ẹya wọnyi ni irọrun ati daradara.
  • Awọn awoṣe ihuwasi wọn ṣe pẹlu ibaraẹnisọrọ to munadoko ati iṣẹ iyansilẹ ti awọn ojuse laarin awọn nkan.

Apeere ti Apẹrẹ Apẹrẹ ni Laravel: Facade

Facade jẹ ilana apẹrẹ igbekalẹ ti o pese wiwo irọrun si ile-ikawe kan, ilana, tabi eyikeyi awọn kilasi eka miiran.

Isoro

Jẹ ki a ro pe a nilo lati jẹ ki sọfitiwia ṣiṣẹ, ti o da lori eto awọn nkan nla ti o jẹ ti ile-ikawe fafa tabi ilana. Ni deede, a yoo nilo lati pilẹṣẹ gbogbo awọn nkan wọnyi, tọju abala awọn igbẹkẹle, ṣiṣẹ awọn ọna ni ilana to pe, ati bẹbẹ lọ.

Bi abajade, imọ-ọrọ iṣowo ti awọn kilasi yoo di asopọ ni wiwọ si awọn alaye imuse ti awọn kilasi ẹni-kẹta, ṣiṣe wọn nira lati ni oye ati ṣakoso.

Ojutu

una facade ni a kilasi ti o pese kan ti o rọrun ni wiwo to a eka subsystem ti o ni ọpọlọpọ awọn gbigbe awọn ẹya ara. A facade le pese iṣẹ ṣiṣe to lopin akawe si ṣiṣẹ taara pẹlu eto-iṣẹ. Sibẹsibẹ, o nikan pẹlu awọn ẹya ara ẹrọ ti awọn onibara bikita gaan.

Ni ọkan facade o wulo nigba ti a nilo lati ṣepọ awọn app pẹlu kan fafa ìkàwé ti o ni dosinni ti awọn ẹya ara ẹrọ, sugbon a nilo nikan kan kekere apa ti awọn oniwe-iṣẹ.

Fun apẹẹrẹ, ohun elo kan ti o gbejade awọn fidio alarinrin kukuru pẹlu awọn ologbo si media awujọ le ṣee lo ile-ikawe iyipada fidio alamọdaju. Sibẹsibẹ, gbogbo ohun ti a nilo gaan ni kilasi pẹlu ọna ẹyọkan encode(filename, format). Lẹhin ṣiṣẹda iru kilasi kan ati so pọ si ile-ikawe iyipada fidio, a yoo ni akọkọ wa facade.

Fun apẹẹrẹ, oniṣẹ ẹrọ tẹlifoonu ti ile-iṣẹ ipe dabi a facade. Ni otitọ, nigba ti a ba pe iṣẹ tẹlifoonu ile itaja kan lati paṣẹ fun tẹlifoonu, oniṣẹ ẹrọ jẹ tiwa facade si gbogbo awọn iṣẹ ati awọn apa ti awọn itaja. Oniṣẹ n pese wiwo ohun ti o rọrun si eto aṣẹ, awọn ẹnu-ọna isanwo ati awọn iṣẹ ifijiṣẹ lọpọlọpọ.

Apeere gidi ni PHP

Ronu nipa Facade bi ohun ti nmu badọgba ti o rọrun fun diẹ ninu awọn eka subsystems. Facade ya sọtọ idiju laarin kilasi kan ati gba koodu ohun elo miiran laaye lati lo wiwo ti o rọrun.

Ninu apẹẹrẹ yii, Facade tọju idiju ti YouTube API ati ile-ikawe FFmpeg lati koodu alabara. Dipo ti ṣiṣẹ pẹlu awọn dosinni ti awọn kilasi, alabara lo ọna ti o rọrun lori 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

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Awọn iwe ti o ṣẹṣẹ

Veeam ṣe ẹya atilẹyin okeerẹ julọ fun ransomware, lati aabo si esi ati imularada

Coveware nipasẹ Veeam yoo tẹsiwaju lati pese awọn iṣẹ esi iṣẹlẹ ikọlu cyber. Coveware yoo funni ni awọn oniwadi ati awọn agbara atunṣe…

23 Kẹrin 2024

Alawọ ewe ati Iyika oni-nọmba: Bawo ni Itọju Asọtẹlẹ ti n Yipada Ile-iṣẹ Epo & Gaasi

Itọju isọtẹlẹ jẹ iyipada ti eka epo & gaasi, pẹlu imotuntun ati ọna imudani si iṣakoso ọgbin.…

22 Kẹrin 2024

Olutọsọna antitrust UK gbe itaniji BigTech soke lori GenAI

UK CMA ti ṣe ikilọ kan nipa ihuwasi Big Tech ni ọja itetisi atọwọda. Nibẹ…

18 Kẹrin 2024

Casa Green: Iyika agbara fun ọjọ iwaju alagbero ni Ilu Italia

Ilana “Case Green”, ti a ṣe agbekalẹ nipasẹ European Union lati jẹki imunadoko agbara ti awọn ile, ti pari ilana isofin rẹ pẹlu…

18 Kẹrin 2024