ඇස්තමේන්තුගත කියවීමේ කාලය: 6 මිනුටි
සැලසුම් රටාවක් යනු අපට සම්මත කාර්යයන් හෝ පුස්තකාල සමඟ කළ හැකි පරිදි, අපගේ වැඩසටහනට පිටපත් කර ඇතුළු කළ හැකි කේතයක් නොවේ. සැලසුම් රටාව යනු විශේෂිත ගැටළුවක් විසඳීමට හැකියාව ඇති පොදු සංකල්පයකි. මූලික වශයෙන් අපට අපගේ වැඩසටහනේ යථාර්ථයට ගැලපෙන විසඳුමක් අනුගමනය කළ හැකි සහ ක්රියාත්මක කළ හැකි ආකෘතියක්.
ආකෘති බොහෝ විට ඇල්ගොරිතම සමඟ ව්යාකූල වේ, මන්ද සංකල්ප දෙකම සමහර දන්නා ගැටළු සඳහා සාමාන්ය විසඳුම් විස්තර කරයි. ඇල්ගොරිතමයක් අතරතුර defiනිශ්චිත ඉලක්කයක් සපුරා ගත හැකි පැහැදිලි ක්රියා මාලාවක් සෑම විටම තිබේ නම්, ආකෘතියක් යනු විසඳුමක් පිළිබඳ ඉහළ මට්ටමේ විස්තරයකි. විවිධ වැඩසටහන් දෙකකට අදාළ එකම ආකෘතියේ කේතය වෙනස් විය හැකිය.
ප්රතිසමයක් කිරීමට අවශ්ය නම්, අපට ඉවුම් පිහුම් වට්ටෝරුවක් ගැන සිතිය හැකිය: ඉලක්කයක් සපුරා ගැනීමට දෙදෙනාටම පැහැදිලි පියවර තිබේ. කෙසේ වෙතත්, ආකෘතියක් යනු ව්යාපෘතියක් වැනි ය, එහි ප්රති result ලය සහ එහි ලක්ෂණ මොනවාදැයි ඔබට දැක ගත හැකිය, නමුත් ක්රියාත්මක කිරීමේ නියම අනුපිළිවෙල රඳා පවතින්නේ කේතය ලියන අප මත ය.
බොහෝ රටා ඉතා විධිමත් ලෙස විස්තර කර ඇති අතර එමඟින් මිනිසුන්ට ඒවා බොහෝ සන්දර්භයන් තුළ ප්රතිනිෂ්පාදනය කළ හැකිය. ආකෘතියක් පිළිබඳ විස්තරයේ ඇති මූලද්රව්ය පහතින් බලමු:
ක්රමලේඛකයෙකුට නිර්මාණ රටා පවතින බව නොදැන මෘදුකාංග සංවර්ධනය කළ හැක. බොහෝ දෙනෙක් එසේ කරන අතර, මේ හේතුව නිසා ඔවුන් නොදැනුවත්වම සමහර යෝජනා ක්රම ක්රියාත්මක කරති. නමුත් අපි ඒවා ඉගෙන ගැනීමට කාලය ගත කළ යුත්තේ ඇයි?
සැලසුම් කරන ලද පද්ධතිය පුරාවටම සැලසුම් රටා සංකීර්ණත්වය, විස්තර මට්ටම සහ යෙදිය හැකි පරිමාණයෙන් වෙනස් වේ.
සාදෘශ්යයෙන්, අපට රථවාහන ලයිට් කිහිපයක් ස්ථාපනය කිරීමෙන් හෝ පදිකයින් සඳහා භූගත ඡේද සහිත සම්පූර්ණ බහු මට්ටමේ අන්තර් හුවමාරුවක් තැනීමෙන් මංසන්ධියක් ආරක්ෂිත කළ හැකිය.
වඩාත්ම මූලික, පහත් මට්ටමේ ආකෘති බොහෝ විට හැඳින්වේ ව්යවහාර . ඒවා සාමාන්යයෙන් අදාළ වන්නේ එක් ක්රමලේඛන භාෂාවකට පමණි.
වඩාත්ම විශ්වීය සහ ඉහළ මට්ටමේ ආකෘති වේ වාස්තුවිද්යාත්මක ආකෘති . සංවර්ධකයින්ට ඕනෑම භාෂාවකින් මෙම රටා ක්රියාත්මක කළ හැක. අනෙකුත් රටා මෙන් නොව, සම්පූර්ණ යෙදුමක ගෘහ නිර්මාණ ශිල්පය සැලසුම් කිරීමට ඒවා භාවිතා කළ හැකිය.
තවද, සියලුම මාදිලි ඔවුන්ගේ වර්ග අනුව වර්ග කළ හැකිය උත්සාහ කළා හෝ අරමුණ. ප්රධාන පන්ති තුන වන්නේ:
මුහුණත පුස්තකාලයකට, රාමුවකට හෝ වෙනත් සංකීර්ණ පන්ති සමූහයකට සරල කළ අතුරු මුහුණතක් සපයන ව්යුහාත්මක සැලසුම් රටාවකි.
සංකීර්ණ පුස්තකාලයකට හෝ රාමුවකට අයත් විශාල වස්තු සමූහයක් මත පදනම්ව, අපි මෘදුකාංග ක්රියා කිරීමට අවශ්ය යැයි සිතමු. සාමාන්යයෙන්, අපට මෙම සියලු වස්තූන් ආරම්භ කිරීමට, පරායත්තතා නිරීක්ෂණය කිරීමට, ක්රම නිවැරදි පිළිවෙලට ක්රියාත්මක කිරීමට සහ යනාදිය අවශ්ය වේ.
එහි ප්රතිඵලයක් වශයෙන්, පන්තිවල ව්යාපාරික තර්කය තෙවන පාර්ශවීය පන්තිවල ක්රියාත්මක කිරීමේ විස්තර සමඟ තදින් බැඳී ඇති අතර, ඒවා තේරුම් ගැනීමට සහ කළමනාකරණය කිරීමට අපහසු වේ.
Una facade
යනු බොහෝ චලනය වන කොටස් අඩංගු සංකීර්ණ උප පද්ධතියකට සරල අතුරු මුහුණතක් සපයන පන්තියකි. ඒ facade
උප පද්ධතිය සමඟ සෘජුව වැඩ කිරීමට සාපේක්ෂව සීමිත ක්රියාකාරිත්වයක් සැපයිය හැකිය. කෙසේ වෙතත්, එය පාරිභෝගිකයින් සැබවින්ම සැලකිලිමත් වන විශේෂාංග පමණක් ඇතුළත් වේ.
එකක් ගන්න facade
අපට විශේෂාංග දුසිම් ගණනක් ඇති නවීන පුස්තකාලයක් සමඟ යෙදුම ඒකාබද්ධ කිරීමට අවශ්ය වූ විට එය ප්රයෝජනවත් වේ, නමුත් අපට අවශ්ය වන්නේ එහි ක්රියාකාරීත්වයේ කුඩා කොටසක් පමණි.
උදාහරණයක් ලෙස, බළලුන් සමඟ කෙටි විනෝදජනක වීඩියෝ සමාජ මාධ්ය වෙත උඩුගත කරන යෙදුමකට වෘත්තීය වීඩියෝ පරිවර්තන පුස්තකාලයක් භාවිතා කළ හැකිය. කෙසේ වෙතත්, අපට සැබවින්ම අවශ්ය වන්නේ තනි ක්රමය සහිත පන්තියකි encode(filename, format)
. එවැනි පන්තියක් සාදා එය වීඩියෝ පරිවර්තන පුස්තකාලයට සම්බන්ධ කිරීමෙන් පසු, අපට අපගේ පළමු එක ලැබෙනු ඇත facade
.
උදාහරණයක් ලෙස, ඇමතුම් මධ්යස්ථානයක දුරකථන ක්රියාකරු අ facade
. ඇත්ත වශයෙන්ම, අපි දුරකථන ඇණවුමක් කිරීමට වෙළඳසැලක දුරකථන සේවාවට කතා කරන විට, ක්රියාකරු අපගේ වේ facade
ගබඩාවේ සියලුම සේවාවන් සහ දෙපාර්තමේන්තු වෙත. ක්රියාකරු විසින් ඇණවුම් පද්ධතිය, ගෙවීම් දොරටු සහ විවිධ බෙදාහැරීමේ සේවාවන් සඳහා සරල හඬ අතුරු මුහුණතක් සපයයි.
සිතා බලන්න මුහුණත සමහර සංකීර්ණ උප පද්ධති සඳහා සරල ඇඩප්ටරයක් ලෙස. 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
අතුරුමුහුණත් වෙන් කිරීමේ මූලධර්මය වස්තු-නැඹුරු නිර්මාණයේ SOLID මූලධර්ම පහෙන් එකකි. පන්තියක් තිබිය යුතුය ...
මයික්රොසොෆ්ට් එක්සෙල් යනු දත්ත විශ්ලේෂණය සඳහා යොමු මෙවලමයි, මන්ද එය දත්ත කට්ටල සංවිධානය කිරීම සඳහා බොහෝ විශේෂාංග ලබා දෙයි,…
2017 සිට නිශ්චල දේපල ක්රවුඩ් ෆන්ඩින් ක්ෂේත්රයේ යුරෝපයේ ප්රමුඛයන් අතර වොලියන්ස්, සිම් සහ වේදිකාව සම්පූර්ණ කිරීම නිවේදනය කරයි…
සූත්රිකාව යනු "වේගවත්" Laravel සංවර්ධන රාමුවක් වන අතර එය සම්පූර්ණ කොටස් කිහිපයක් සපයයි. එය ක්රියාවලිය සරල කිරීම සඳහා නිර්මාණය කර ඇත…
“මගේ පරිණාමය සම්පූර්ණ කිරීමට මා නැවත පැමිණිය යුතුය: මම පරිගණකය තුළ ප්රක්ෂේපණය කර පිරිසිදු ශක්තිය බවට පත් වෙමි. පදිංචි වූ පසු…
Google DeepMind සිය කෘතිම බුද්ධි ආකෘතියේ වැඩිදියුණු කළ අනුවාදයක් හඳුන්වා දෙයි. නව වැඩිදියුණු කළ ආකෘතිය සපයන්නේ පමණක් නොව…
එහි අලංකාර වාක්ය ඛණ්ඩය සහ ප්රබල අංගයන් සඳහා ප්රසිද්ධ Laravel, මොඩියුලර් ගෘහ නිර්මාණ ශිල්පය සඳහා ද ශක්තිමත් පදනමක් සපයයි. එතන…
Cisco සහ Splunk පාරිභෝගිකයින්ට අනාගතයේ ආරක්ෂක මෙහෙයුම් මධ්යස්ථානය (SOC) වෙත ඔවුන්ගේ ගමන වේගවත් කිරීමට උදවු කරයි…