የሚገመተው የንባብ ጊዜ፡- 6 ደቂቃ
መደበኛ ተግባራትን ወይም ቤተ-መጻሕፍትን እንደምናደርገው የዲዛይን ንድፍ ቀድመን ወደ ፕሮግራማችን የምናስገባበት ኮድ አይደለም። የንድፍ ንድፍ አንድን ልዩ ችግር ለመፍታት የሚችል አጠቃላይ ጽንሰ-ሐሳብ ነው. በመሠረቱ ዝርዝሮቹን መከተል እና ከፕሮግራማችን እውነታ ጋር የሚስማማ መፍትሄን ተግባራዊ ማድረግ የምንችልበት ሞዴል.
ሞዴሎች ብዙውን ጊዜ ከአልጎሪዝም ጋር ይደባለቃሉ, ምክንያቱም ሁለቱም ጽንሰ-ሐሳቦች ለአንዳንድ ለሚታወቁ ችግሮች የተለመዱ መፍትሄዎችን ይገልጻሉ. ስልተ ቀመር ሳለ defiአንድ የተወሰነ ግብ ላይ ለመድረስ ሁልጊዜ ግልጽ የሆኑ የድርጊቶች ስብስብ ካለ, ሞዴል የመፍትሄው ከፍተኛ ደረጃ መግለጫ ነው. በሁለት የተለያዩ ፕሮግራሞች ላይ የሚተገበረው ተመሳሳይ ሞዴል ኮድ የተለየ ሊሆን ይችላል.
ተመሳሳይነት ለማድረግ ስለፈለግን የምግብ አዘገጃጀት መመሪያን ማሰብ እንችላለን-ሁለቱም ግቡን ለማሳካት ግልጽ እርምጃዎች አሏቸው. ይሁን እንጂ አንድ ሞዴል እንደ አንድ ፕሮጀክት የበለጠ ነው, ውጤቱም ምን እንደሆነ እና ባህሪያቱ ምን እንደሆነ ማየት ይችላሉ, ነገር ግን የአተገባበሩ ትክክለኛ ቅደም ተከተል ኮዱን በምንጽፈው ላይ ይወሰናል.
ሰዎች በብዙ አውድ ውስጥ እንደገና ማባዛት እንዲችሉ አብዛኛዎቹ ቅጦች በጣም በመደበኛነት ተገልጸዋል። በአምሳያው መግለጫ ውስጥ ያሉትን ንጥረ ነገሮች ከዚህ በታች እንይ ።
ፕሮግራመር የንድፍ ንድፎችን መኖሩን ሳያውቅ ሶፍትዌርን ማዘጋጀት ይችላል. ብዙዎቹ ያደርጉታል, እና በዚህ ምክንያት ሳያውቁት አንዳንድ እቅዶችን ይተገብራሉ. ግን ለምን እነሱን በመማር ጊዜ እናጠፋለን?
የንድፍ ቅጦች ውስብስብነት፣ የዝርዝሮች ደረጃ እና በተቀየሰው ስርዓት ውስጥ በተፈጻሚነት መጠን ይለያያሉ።
በተመሣሣይ ሁኔታ፣ ጥቂት የትራፊክ መብራቶችን በመትከል ወይም ሙሉ ባለ ብዙ ደረጃ ልውውጥን ለእግረኞች ከመሬት በታች መተላለፊያ በመገንባት መገናኛውን ደህንነቱ የተጠበቀ ማድረግ እንችላለን።
በጣም መሠረታዊ, ዝቅተኛ ደረጃ ሞዴሎች ብዙውን ጊዜ ይባላሉ ፈሊጦች . አብዛኛውን ጊዜ የሚተገበሩት ለአንድ የፕሮግራም አወጣጥ ቋንቋ ብቻ ነው።
በጣም ሁለንተናዊ እና ከፍተኛ ደረጃ ሞዴሎች ናቸው የሕንፃ ሞዴሎች . ገንቢዎች እነዚህን ቅጦች በማንኛውም ቋንቋ ሊተገበሩ ይችላሉ። እንደሌሎች ቅጦች በተለየ መልኩ የአንድን ሙሉ መተግበሪያ አርክቴክቸር ለመንደፍ ሊያገለግሉ ይችላሉ።
በተጨማሪም, ሁሉም ሞዴሎች እንደየራሳቸው ሊከፋፈሉ ይችላሉ ሞክሯል። ወይም ዓላማ. ሦስቱ ዋና ክፍሎች የሚከተሉት ናቸው-
ፊት ለፊት ለቤተ-መጻህፍት፣ ማዕቀፍ ወይም ለሌላ ውስብስብ የክፍል ስብስብ ቀለል ያለ በይነገጽ የሚሰጥ መዋቅራዊ ንድፍ ንድፍ ነው።
በተራቀቀ ቤተ-መጽሐፍት ወይም ማዕቀፍ ውስጥ ባሉ ብዙ ዕቃዎች ላይ በመመስረት ሶፍትዌሮችን መሥራት አለብን ብለን እናስብ። በመደበኛነት, እነዚህን ሁሉ ነገሮች ማስጀመር, ጥገኞችን መከታተል, ዘዴዎችን በትክክለኛው ቅደም ተከተል ማከናወን, ወዘተ.
በውጤቱም ፣ የክፍሎቹ የንግድ አመክንዮ ከሦስተኛ ወገን ክፍሎች ትግበራ ዝርዝሮች ጋር በጥብቅ ይጣመራል ፣ ይህም ለመረዳት እና ለማስተዳደር አስቸጋሪ ያደርጋቸዋል።
ዩነ facade
ብዙ ተንቀሳቃሽ ክፍሎችን ለያዘ ውስብስብ ንዑስ ስርዓት ቀላል በይነገጽ የሚሰጥ ክፍል ነው። ሀ facade
ከንዑስ ስርዓቱ ጋር በቀጥታ ከመሥራት ጋር ሲነፃፀር የተወሰነ ተግባር ሊሰጥ ይችላል። ነገር ግን፣ ደንበኞቻችን በእውነት የሚጨነቁባቸውን ባህሪያት ብቻ ያካትታል።
አንድ ይኑርዎት facade
መተግበሪያውን በደርዘን የሚቆጠሩ ባህሪያት ካለው ውስብስብ ቤተ-መጽሐፍት ጋር ማዋሃድ ሲያስፈልገን ጠቃሚ ነው፣ ነገር ግን የተግባርነቱ ትንሽ ክፍል ብቻ ነው የሚያስፈልገን።
ለምሳሌ፣ አጫጭር አስቂኝ ቪዲዮዎችን ከድመቶች ጋር ወደ ማህበራዊ ሚዲያ የሚሰቅል መተግበሪያ ፕሮፌሽናል የቪዲዮ ልወጣ ቤተ-መጽሐፍትን ሊጠቀም ይችላል። ሆኖም፣ እኛ በእርግጥ የሚያስፈልገን ነጠላ ዘዴ ያለው ክፍል ብቻ ነው። encode(filename, format)
. እንደዚህ አይነት ክፍል ከፈጠርን እና ከቪዲዮ መለወጫ ቤተ-መጽሐፍት ጋር ካገናኘን በኋላ, የመጀመሪያው ይኖረናል facade
.
ለምሳሌ የጥሪ ማእከል የስልክ ኦፕሬተር እንደ ሀ facade
. እንዲያውም የሱቅ ስልክ አገልግሎት ስንደውል ስልክ ለማዘዝ ኦፕሬተር የኛ ነው። facade
ወደ ሁሉም የመደብር አገልግሎቶች እና ክፍሎች. ኦፕሬተሩ ለትዕዛዝ ስርዓቱ፣ ለክፍያ መግቢያዎች እና ለተለያዩ የመላኪያ አገልግሎቶች ቀላል የድምጽ በይነገጽ ይሰጣል።
ስለሆነ ነገር ማሰብ ፊት ለፊት ለአንዳንድ ውስብስብ ንዑስ ስርዓቶች እንደ ቀላል አስማሚ። Facade
በነጠላ ክፍል ውስጥ ያለውን ውስብስብነት ይለያል እና ሌሎች የመተግበሪያ ኮድ ቀላሉን በይነገጽ እንዲጠቀሙ ይፈቅዳል።
በዚህ ምሳሌ እ.ኤ.አ. Facade
የዩቲዩብ ኤፒአይ እና 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
Coveware by Veeam የሳይበር ዘረፋ የአደጋ ምላሽ አገልግሎቶችን መስጠቱን ይቀጥላል። Coveware የፎረንሲክስ እና የማገገሚያ ችሎታዎችን ያቀርባል…
የመተንበይ ጥገና የዘይት እና ጋዝ ዘርፉን አብዮት እያደረገ ነው፣ ለዕፅዋት አስተዳደር ፈጠራ እና ንቁ አቀራረብ።…
የዩኬ ሲኤምኤ ስለ ቢግ ቴክ ባህሪ በአርቴፊሻል ኢንተለጀንስ ገበያ ላይ ማስጠንቀቂያ ሰጥቷል። እዚያ…
የሕንፃዎችን ኢነርጂ ውጤታማነት ለማሳደግ በአውሮፓ ህብረት የተቀረፀው የ"ኬዝ አረንጓዴ" ድንጋጌ የህግ አውጭ ሂደቱን በ…