Table of Contents
مقدمه: چرا نرم افزار مهندسی مقیاس پذیر به الگوی کارخانه انتزاعی نیاز دارد
نرم افزار مهندسی باید تغییرات سریع در الزامات، سیستم عامل های سخت افزاری و خانواده های جزء را کنترل کند. [] آیا شما در حال ساخت ابزارهای تجزیه و تحلیل عنصر محدود، سیستم های CAD، یا سیستم عامل کنترل جاسازی شده هستید، معماری شما باید از ادغام یکپارچه سنسور های جدید، محرک ها، حل کنندگان و یا اجزای UI بدون بازنویسی منطق هسته ای، پشتیبانی کند. [FLT: 1) الگوی پیاده سازی طولانی، به دست آوردن یک سیستم عامل کد سازی ثابت شده توسط ابزارهای مهندسی بتن و ابزار ثابت شده توسط ابزارهای مهندسی اشیاء ثابت شده است.
در این مقاله، ما ساختار الگو را بررسی می کنیم، از طریق پیاده سازی واقعی در زمینه مهندسی قدم می زنیم و در مورد زمان اعمال آن بحث می کنیم (و زمانی که از مهندسی بیش از حد جلوگیری کنیم) خواهید دید که چگونه کارخانه انتزاعی به شما کمک می کند تا سیستم هایی را بسازید که با مشخصات در حال تحول سازگار شوند بدون تغییرات در سراسر کد پایه شما.
درک الگوی کارخانه Abstract
تعریف Core
الگوی کارخانه انتزاعی یک رابط برای ایجاد خانواده های اشیاء مرتبط یا وابسته بدون مشخص کردن کلاس های بتنی خود فراهم می کند، به انتزاع متکی است تا یک کارخانه واحد انواع مختلف محصول را تولید کند که برای کار با هم طراحی شده اند.این الگو شامل این شرکت کنندگان کلیدی است:
- [FLT 1] - مجموعه ای از روش های ایجاد، یکی برای هر عضو خانواده محصول را اعلام می کند.
- ConcrFactory – روش های ایجاد برای تولید محصولات بتونی برای یک تنوع خاص (به عنوان مثال، "نرم افزار سخت افزار A") را پیاده سازی می کند.
- محصول ، رابط کاربری را برای نوع محصول (به عنوان مثال، سنسور) اعلام می کند.
- محصول دفع تعریف محصول ساخته شده توسط بتن مربوطه.
- Client - فقط از رابط های تولیدی انتزاعی و انتزاعی استفاده می کند.
چگونه کار می کند
کد مشتری یک نمونه از AbstractFactory (که اغلب از طریق پیکربندی یا انتخاب زمان اجرا می شود) دریافت می کند.این به روش های ایجاد کارخانه بدون دانستن اینکه کدام کارخانه بتن آنها را تولید می کند، تضمین می شود که اشیاء بتنی بازگردانده می شوند سازگار باشند زیرا آنها از همان خانواده آمده اند، این به ویژه ارزشمند است که سیستم مهندسی شما دارای چندین نوع (به عنوان مثال، تجدید نظر های مختلف، شبیه سازی فیزیکی) است که باید ثابت داخلی باقی بمانند.
به عنوان مثال، در یک سیستم خرید داده مهندسی، یک "HighSpeedFactory" ممکن است هر دو سنسور با فرکانس بالا و یک محرک سریع متناظر تولید کند؛ یک "کم قدرت" یک سنسور کم فرکانس و یک محرک کم انرژی تولید می کند. مشتری هرگز نیازی به دانستن جزئیات ندارد - آن را فقط "FLT:0" و "FLT 1 می نامد.
مزایای مهندسی Software
الگوی کارخانه انتزاعی مزایای مختلفی را ارائه می دهد که به طور مستقیم به چالش های سیستم های مهندسی می پردازد:
- قابلیتlexibility : کل خانواده های اجزای با تغییر که در آن کارخانه برنامه خود را استفاده می کند، ایده آل برای حمایت از سیستم عامل های سخت افزاری متعدد، موتورهای شبیه سازی، یا ابزار UI بدون لمس منطق کسب و کار است.
- قابلیت های کالری : اضافه کردن یک خانواده جدید (به عنوان مثال، حمایت از یک نام تجاری سنسور جدید)، شما به سادگی پیاده سازی یک کارخانه بتن جدید و محصولات آن باقی مانده است کد موجود باقی مانده است un ⁇ , تبلیغ به Open / Closed اصل.
- قابلیت نگهداری ؛ منطق ایجاد اشیا متمرکز است، هنگامی که یک تغییر امضای سازنده، شما تنها کارخانه مربوطه را به روز می کنید، نه هر مکانی که کلاس را به سرعت تنظیم می کند.
- آزمون پذیری : در تست های واحد، شما می توانید یک کارخانه مسخره را که اجزای بستر را تولید می کند، فراهم کنید.کد مشتری بدون تغییر باقی می ماند، و تست ها را سریع تر و قابل اعتماد تر می کند.
- : نرم افزار مهندسی اغلب باید بر روی سیستم های مختلف عامل یا تنظیمات سخت افزاری اجرا شود.کارخانه انتزاعی به شما اجازه می دهد تا گفتمان های UI خاص پلت فرم، لایه های دسترسی فایل یا پشته های شبکه پشت یک رابط مشترک ایجاد کنید.
اجرای الگوی در عمل
پیاده سازی مرحله به مرحله
برای استفاده از الگوی کارخانه ای انتزاعی به نرم افزار مهندسی خود، این مراحل را دنبال کنید:
- خانواده های محصول را ارزیابی کنید، گروه هایی از اشیاء را که باید با هم استفاده شوند، در یک ابزار تجزیه و تحلیل ساختاری، شما ممکن است ، ، و به عنوان یک خانواده در هر دامنه فیزیکی (به عنوان مثال خطی، استاتیک در مقابل پویا).
- [[۱] [۱۰] [۱] [۱۰] [۱]] [۱]] [۱۰]] [۱]] [۱]] [۱]] [۱۰]] [۳] [۱]] [۱۰] [۱]]] [۱۰] [۳]] [۱]] [۱۰] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۱]] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۱] [۳] [۳] [۱] [۳] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۳] [۳] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱
- [[۱] [۱۰] [۱] [۱۰] [۱]] [۱]] [۱۰]] [۱] [۱۰] [۱]] [۱۰] [۱۰]] [۱۰] [۱] [۱۰] [۱۰] [۱۰] [۱۰] [۱]] [۱۰] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۱] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳]
- کارخانه های بتنی را برای هر خانواده (به عنوان مثال، ) و پیاده سازی های مشخص از این روش ها که کلاس های محصول بتن مناسب را باز می گردانند، فراهم می کند.
- مشتری را معرفی کنید – مشتری نمونه ای از کارخانه انتزاعی (از طریق وابستگی، تزریق، فایل پیکربندی یا یک تصمیم زمان اجرا ساده) را دریافت می کند.
مثال: خانواده های حل کننده
تصور کنید که شما یک پلت فرم تجزیه و تحلیل عناصر چند فیزیک را ایجاد می کنید.انواع مختلف تجزیه و تحلیل نیاز به حل کننده های مختلف و ابزارهای پیش پردازش دارند.با استفاده از کارخانه انتزاعی، می توانید کد خود را مانند این ساختار (pseudo-Code در سبک آگنوستیک زبان):
// Abstract products
interface ISolver {
void Solve();
}
interface IMeshGenerator {
Mesh Generate();
}
// Abstract factory
interface ISolverFactory {
IMeshGenerator CreateMeshGenerator();
ISolver CreateSolver();
}
// Concrete factory for linear static analysis
class LinearStaticFactory : ISolverFactory {
IMeshGenerator CreateMeshGenerator() => new LinearStaticMeshGen();
ISolver CreateSolver() => new DirectSolver();
}
// Concrete factory for nonlinear dynamic analysis
class NonlinearDynamicFactory : ISolverFactory {
IMeshGenerator CreateMeshGenerator() => new NonlinearMeshGen();
ISolver CreateSolver() => new IterativeSolver();
}
// Client code
class AnalysisEngine {
private ISolverFactory factory;
public AnalysisEngine(ISolverFactory factory) {
this.factory = factory;
}
public void Run() {
var mesh = factory.CreateMeshGenerator().Generate();
var solver = factory.CreateSolver();
solver.Solve();
}
}
حالا برای تغییر انواع تجزیه و تحلیل، شما به سادگی موتور را با یک کارخانه مختلف ایجاد می کنید - هیچ تغییر کد دیگری وجود ندارد.این الگو در بسیاری از بسته های تجاری FEA برای پشتیبانی از ماژول های مختلف فیزیک استفاده می شود.
سناریوی واقعی جهانی: انتزاع سخت افزار برای سیستم های جاسازی شده
یک تیم مهندسی در حال توسعه برای یک پهپاد مستقل در نظر بگیرید.کنترل کننده پرواز پهپاد باید از چندین سوئیت سنسور (GPS، IMU، Barometer) و انواع محرک ها (ESC، سروو) پشتیبانی کند و هر بازنگری سخت افزار از پروتکل های ارتباطی مختلف (I2C، اشپیگل، UART) استفاده کند.
کارخانه انتزاعی روش هایی مانند را تعریف می کند، ، کارخانه های بتنی مانند و تولید محصولات بتنی که با سخت افزار واقعی صحبت می کنند، کد کنترل کننده پرواز تنها به رابط های انتزاعی بستگی دارد.
چنین انتزاعاتی برای تست واحد نیز ارزشمند هستند – شما می توانید یک کارخانه مسخره را تزریق کنید که خواندن سنسور شبیه سازی شده را باز می گرداند و یکپارچگی مداوم را بدون سخت افزار فیزیکی امکان پذیر می کند.
مقایسه با الگوهای مرتبط
کارخانه های انتزاعی در مقابل روش کارخانه
الگوی از یک روش (اغلب مجازی) برای ایجاد یک نوع محصول استفاده می کند، ساده تر است، اما فقط برای یک محصول واحد کار می کند.
کارخانه های انتزاعی در مقابل سازنده
سازنده الگوی بر ساخت یک شی پیچیده با گام، اغلب با یک مدیر که کنترل فرایند ساخت و ساز ایده آل است زمانی که محصول نیاز به گام های متعدد (به عنوان مثال، مونتاژ یک مدل CAD) کارخانه انتزاعی به طور مستقیم، به طور معمول تکمیل می شود.
کارخانه های انتزاعی در مقابل تزریق وابستگی (DI)
ظروف DI (به عنوان مثال، بهار، .NET Core DI) اغلب از الگوی کارخانه انتزاعی تحت کاپوت استفاده می کنند.شما می توانید کارخانه های بتنی خود را در ظرف ثبت کنید و اجازه دهید ظرف خود را حل کند و الگوی خود را حفظ کند - DI فقط سیم کشی را خودکار می کند.
بهترین تمرین ها و قرص ها
هنگام استفاده از کارخانه های Abstract
- سیستم شما باید مستقل از چگونگی ایجاد، ساخت یا نمایندگی محصولات آن باشد.
- شما پیش بینی می کنید که چندین خانواده از محصولات که با هم استفاده می شوند.
- شما می خواهید سازگاری را در میان انواع محصولات اجرا کنید.
سقوط های معمول
- در کلاب انقراض [FLT 1]: اضافه کردن کارخانه ها برای هر تنوع کوچک منجر به پیچیدگی غیر ضروری می شود اگر شما واقعا خانواده های محصول چندگانه ای دارید که با هم تغییر می کنند.
- بسیاری از انواع محصول : اگر رابط کارخانه انتزاعی شما بزرگ رشد کند (به عنوان مثال، 10+ روش)، تقسیم به کارخانه های کوچکتر یا استفاده از یک روش ثبت نام در نظر بگیرید.
- سربار تعدیل : در سیستم های جاسازی شده با عملکرد، غیر مستقیم اضافی ممکن است مشکل ساز باشد.در چنین مواردی، استفاده از پلی مورفیسم زمان (templates /generics) اگر مجوز زبان، یا به دقت پروفایل.
نتیجه گیری
الگوی کارخانه انتزاعی یک راه اثبات شده برای ساخت نرم افزار مهندسی مقیاس پذیر و قابل نگهداری است که باید از خانواده های متعدد اجزای تشکیل شده پشتیبانی کند، شما الگوریتم های اصلی خود را از جزئیات خاص پلت فرم آزاد می کنید، امکان گسترش آسان، آزمایش و سازگاری را فراهم می کند که آیا شما در حال طراحی یک حل کننده شبیه سازی چند فیزیک هستید، یک لایه انتزاعی برای هواپیماهای بدون سرنشین، یا یک برنامه ماژولار، یک سیستم یکپارچه سازی دقیق برای مدیریت وسایل مهندسی و تمیز است که شما را با استفاده از وسایل نقلیه فنی ترکیب می کند.
برای مطالعه بیشتر، به راهنمای اصلی ویدزیت (FLT:1) مراجعه کنید، ، راهنمای استراتژیک Guru یا یک شیرجه عمیق به مارتین Fowler] کاتالوگ درخواست الگوی جوندگان و فردا آماده چالش های مهندسی شما خواهد بود.