نرم افزار مهندسی باید تغییر را پیش بینی کند - سخت افزار جدید، استانداردهای به روز شده، روش های شبیه سازی در حال تحول و تغییر الزامات ادغام. الگوی کارخانه انتزاعی یک راه ساختار یافته برای ساخت چنین سیستم هایی را فراهم می کند، امکان گسترش ماژولار بدون بازنویسی منطق هسته ای را فراهم می کند.این مقاله به بررسی الگوی عمیق، کاربرد آن در سراسر حوزه های مهندسی و استراتژی های عملی برای مقابله با معماری آینده است.

الگوی کارخانه انتزاعی چیست؟

الگوی کارخانه انتزاعی یک الگوی طراحی آفرینشی است که ابتدا در Gang از چهار [ فهرست شده است [FLT3] [نسخه3] الگوهای طراحی مرتبط یا اشیاء بدون مشخص کردن کلاس های کاربردی و یا نرم افزار مشخص شده توسط سیستم انتزاعی، به جای آن، می تواند یک رابط کاربری جدید را تغییر دهد.

در زمینه های مهندسی، یک خانواده ممکن است تمام اجزای مورد نیاز برای یک پلت فرم سخت افزاری خاص (به عنوان مثال، سنسورها، محرک ها، پروتکل های ارتباطی) یا تمام اشیاء مورد نیاز برای یک محیط شبیه سازی خاص (به عنوان مثال، ژنراتور محتوا، حل کننده، پس از پردازنده).

شرکت کنندگان اصلی

  • [[۱] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰]] [۱]]] [۱]] [۱]] [۱]] [۱]] [۱]] [۱]] [۱]]] [۱]] [۱] [۱]] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱] [۱]]] [۱] [۱]]] [۱] [۱] [۱] [۱]]] [۱]]]] [۱]]]] [۱] [۱] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [۱]]]]]]] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱]]] [۱] [۱]]] [۱] [۱
  • ConcrFactory [FLT 1] - پیاده سازی روش های ایجاد برای تولید محصولات بتونی که متعلق به یک خانواده خاص است.
  • [[۱] [۱۰] [[۱۰]] [[۱۰]]] [[۱]]]] [[۳]]]] [[۳]]]] [۱]]] [[۳]]]] [۱]]] [[۱]]]]] [[۳]]]] [۳] [۳] [۳] [۱] [۱] [۱] [۱] [۳] [۳] [۱] [۱] [۳] [۳] [۳] [۱] [۱] [۱] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۱] [۱]]]]] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۱] [۱]] [۳] [۳] [۳] [۳] [۱] [۳] [۳] [۱] [۱] [۱] [۱] [۳] [۳] [۳] [۱] [۱] [۳] [۳] [۱] [۳] [۳] [۳]
  • محصول دفع تعریف یک شی محصول توسط کارخانه بتن مربوطه؛ پیاده سازی رابط محصول انتزاعی.
  • Client - تنها از رابط های مولد و انتزاعی محصول استفاده می کند، که مستقل از پیاده سازی های بتنی باقی مانده است.

این برشینگ چیزی است که باعث می شود الگویی که برای گسترش ماژولار بسیار قدرتمند است، اضافه کردن یک تنظیمات سخت افزاری جدید به معنی نوشتن یک کارخانه جدید و پشتیبانی از محصولات Concrete است - کد مشتری تغییر نمی کند.

چرا نرم افزار مهندسی به این الگو نیاز دارد

نرم افزار مهندسی اغلب دامنه های چندگانه را شامل می شود، هر کدام با محدودیت های منحصر به فرد و تغییرات سریع تکنولوژیکی. الگوی کارخانه انتزاعی چندین نقطه درد تکراری را شامل می شود:

اجزای می توانند به طور مستقل توسعه یابند، آزمایش شوند و حفظ شوند.برای مثال، یک تجزیه و تحلیل عنصر محدود (FEA) می تواند خانواده های کارخانه ای جداگانه برای انواع مختلف عنصر (2D، 3D، پوسته) یا backend های مختلف (مستقیم، آنریک) هر کارخانه را در منطق ایجاد خود قرار دهد، بنابراین اصلاح یک خانواده حل کننده بر دیگران تأثیر نمی گذارد.

مقیاس پذیری

هنگامی که انواع جدید محصول پدیدار می شوند – مثلاً یک نوع سنسور جدید LiDAR برای نرم افزار خودکار خودرو – این الگو به شما اجازه می دهد یک هاردی جدید بدون لمس کارخانه های موجود یا کد مشتری اضافه کنید، این به ویژه ارزشمند است که نرم افزار مهندسی باید از یک اکوسیستم در حال گسترش فروشندگان سخت افزار و استانداردها پشتیبانی کند.

انعطاف پذیری در سراسر Domains

رشته های مهندسی به طور گسترده ای متفاوت هستند: شبیه سازی مکانیکی، CAD الکتریکی، تجزیه و تحلیل ساختاری و بیشتر.یک کارخانه انتزاعی می تواند برای تولید اشیاء خاص دامنه طراحی شده باشد در حالی که منطق برنامه اصلی را عمومی نگه می دارد، به عنوان مثال، یک "کنترل کننده ساده سازی" عمومی می تواند با هر موتور شبیه سازی کار کند اگر هر موتور خود را برای ساخت اجزای شبیه سازی فراهم کند.

قابلیت نگهداری از طریق Isolation

تغییرات در یک خانواده کارخانه ای جدا شده است و یا یک راننده سخت افزاری را بالا می برد یا کتابخانه شخص ثالث را مبادله می کند که تنها در کارخانه بتن مربوطه تغییر می کند.این خطر بازگشت را کاهش می دهد و مدیریت نسخه را ساده می کند.

اجرای الگو: مثال عملی

یک برنامه طراحی کامپیوتری (CAD) را در نظر بگیرید که نیاز به پشتیبانی از چندین هسته هندسی (Parasolid، ACIS، Open CASCADE) دارد. هر کرنل دارای نمایندگی و عملیات خود برای منحنی ها، سطوح، جامدات و لبه ها بدون یک الگو است.

// Client code full of if-else chains
if (kernel == "Parasolid") {
 Curve c = new ParasolidCurve(...);
} else if (kernel == "ACIS") {
 Curve c = new AciSCurve(...);
}

با الگوی کارخانه انتزاعی، مشتری هرگز هسته ی بتنی را نمی داند:

// Abstract factory interface
public interface GeometryFactory {
 Curve createCurve(Point p1, Point p2);
 Surface createSurface(...);
 Solid createSolid(...);
}

// Concrete factories
public class ParasolidFactory implements GeometryFactory { ... }
public class AciSFactory implements GeometryFactory { ... }

// Client
GeometryFactory factory = getFactory(); // selected via config or runtime
Curve c = factory.createCurve(p1, p2);
Solid s = factory.createSolid(face);

مشتری به طور کامل از هسته جدا شده است و یک هسته سوم (به عنوان مثال، Open CASCADE) را اضافه می کند و فقط نیاز به اجرای رابط و مجموعه ای از محصولات بتنی دارد.

این مثال به هر حوزه مهندسی که در آن چندین "دبانی" یا پیاده سازی وجود دارد: رانندگان سنسور، backends، موتورهای تجسمی یا پایگاه های داده های مادی.

گسترش Horizons: Advanced Use Cases

فراتر از انتخاب راننده ساده، الگوی کارخانه انتزاعی، معماری های پیچیده را فراهم می کند:

افزونه های معماری

اجازه دهید تیم های خارجی ماژول های شخص ثالث را توسعه دهند.هر پلاگین کارخانه بتن خود را فراهم می کند، ثبت شده در زمان اجرا، برنامه میزبان کشف و فراخوان کارخانه برای اضافه کردن قابلیت های جدید - به عنوان مثال، مدل های مواد جدید و یا انواع تجزیه و تحلیل - بدون باز کردن هسته.

Multi-platform Deployment

نرم افزار مهندسی اغلب بر روی ویندوز، لینوکس و سیستم های جاسازی شده اجرا می شود.عاملات انتزاعی می توانند ایجاد پلت فرم خاص دسترسی به فایل سیستم، threading یا اجزای UI را در خود جای دهند. Deploying به یک پلت فرم جدید به معنی پیاده سازی یک خانواده جدید از کارخانه های بتنی.

محیط های شبیه سازی با سطوح مختلف Fidelity

در دینامیک مایع یا شبیه سازی الکترومغناطیسی، کاربران ممکن است بین حل کنندگان سریع تقریبی و افراد با رضایت بالا تغییر کنند.یک کارخانه انتزاعی می تواند اشیاء مناسب حل کننده، شرایط مرزی و پیش پردازنده های پس از آن را برای هر سطح وفاداری ایجاد کند، و رابط های سازگار را در تمام سطوح تضمین کند.

آینده با گسترش قراردادی

طراحی با الگوی کارخانه انتزاعی، نرم افزار مهندسی را برای فن آوری های نوظهور و تغییر نیازهای کسب و کار آماده می کند.

ادغام با IoT و Edge Computing

از آنجایی که دستگاه های مهندسی هوشمند تر می شوند، نرم افزار جاسازی شده آنها باید با سرویس های ابری، کنترل کننده های محلی و سایر دستگاه ها ارتباط برقرار کند.یک کارخانه انتزاعی می تواند پشته های ارتباطی مختلف (MQTT، CoAP، HTTP/2) و اشیاء قالب بندی داده (Protobuf، JSON، CBOR) را به سادگی ایجاد یک خانواده جدید کارخانه ساده کند.

پشتیبانی از AI و یادگیری ماشین

تجزیه و تحلیل مهندسی به طور فزاینده ای از مدل های ML برای مدل سازی، بهینه سازی یا تشخیص ناهنجاری استفاده می کند.یک کارخانه انتزاعی می تواند ایجاد لودرهای مدل، موتورهای استنتاج و خط لوله های داده های آموزشی را در بر گیرد.

معماری های Cloud-Native و Containerized Architectures

Microservices از فاکتورهای انتزاعی برای اجرای خدمات در محیط های مختلف (توسعه، تولید)، هر سرویس می تواند یک کارخانه انتزاعی برای دسترسی به پایگاه داده، تأیید و صف پیام تعریف کند.این به تیم ها اجازه می دهد تا معماری را بدون بازنویسی منطق خدمات تکامل دهند.

کاهش هزینه های نگهداری طولانی مدت

این الگو "اثر سریع" تغییر را کاهش می دهد.با توجه به مطالعه موسسه مهندسی نرم افزار، تغییرات سطح معماری 10 تا 100 برابر کمتر از زمان ساخته شده در اوایل چرخه عمر (3). با تجزیه و تحلیل شی از استفاده، کارخانه انتزاعی آن را ارزان تر می کند تا نرم افزار را با سخت افزار جدید یا استانداردهای سال پس از استقرار اولیه سازگار کند.

احتمال بروز قرص و چگونگی جلوگیری از آن

هیچ الگویی گلوله نقره ای نیست، کارخانه انتزاعی می تواند پیچیدگی های غیرضروری را در صورت استفاده بیش از حد از آن معرفی کند:

  • بسیاری از لایه های انتزاعی - ایجاد کارخانه برای هر گونه تغییرات جزئی منجر به سلسله مراتب عمیق است که سخت به اشکال زدایی استفاده از الگوی فقط برای خانواده های اشیاء که واقعا متفاوت است.
  • انتزاعهای انعطاف پذیر - اگر رابط محصول انتزاعی بسیار باریک باشد، اضافه کردن یک نوع جدید ممکن است نیاز به تغییر خود کارخانه انتزاعی داشته باشد.
  • تزریق وابستگی - کارخانه ها بهترین کار را می کنند زمانی که کارخانه بتن از طریق پیکربندی انتخاب می شود، نه سخت کد شده الگوی با ظروف DI یا locator های خدمات برای حداکثر انعطاف پذیری ترکیب می شود.

هنگامی که به طور معقولی استفاده می شود، الگوی کارخانه انتزاعی نرم افزار مهندسی را فراهم می کند که بدون به خطر انداختن وضوح نیاز به سازگاری دارد.

نتیجه گیری

الگوی کارخانه انتزاعی یک ابزار طراحی بی زمان برای ساخت نرم افزار مهندسی است که می تواند با فن آوری های جدید، استانداردها و دامنه ها رشد کند.با ایجاد شی پشت رابط های پایدار، آن را کمک می کند تا ماژولار، مقیاس پذیری و قابلیت نگهداری که سیستم های مهندسی مدرن می خواهند، چه شما در حال توسعه CAD، شبیه سازی، سیستم های کنترل، و یا MIDIware، اتخاذ این الگوی اولیه کار و آماده سازی کد خود را برای ادامه دادن.


[[ویرایش]

  1. گاما، E. Helm، R.، جانسون، R.، &؛ Vlissidessides، J. (1994) الگوهای طراحی: عناصر نرم افزار شی-Oriented . Addison-Wesley
  2. (Fowler, M. (2002). Patterns از معماری کاربردی شرکت , Addison-Wesley
  3. [۱] [۱۰] [۱] [۱۰] [۱] [۱] [۱] [۱۰] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [