موضوع مقاله: چندمدلسازی دامنه‌محور | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # چندمدلسازی دامنه‌محور | مقدمه: مدل‌سازی چندوجهی خاص دامنه یک پارادایم توسعه نرم‌افزار است که در آن هر دیدگاه به‌طور صریح به‌عنوان یک زبان خاص دامنه (DSL) جداگانه بیان می‌شود. | ## بخش 1: چندمدلسازی دامنه‌محور | تحلیلگران کسب‌وکار، کارشناسان دامنه، طراحان تعامل، کارشناسان پایگاه داده، و توسعه‌دهندگانی با انواع تخصص‌های مختلف همگی در فرآیند ساخت چنین سیستمی مشارکت دارند. محصولات کاری مختلف آنها باید مدیریت، هماهنگ و یکپارچه شوند تا یک سیستم در حال اجرا تولید شود. هر مشارکت‌کننده در فرآیند توسعه یک زبان خاص برای حل مشکلات مربوط به دیدگاه خود در سیستم دارد. چالش در یکپارچه‌سازی این دیدگاه‌های مختلف و اجتناب از کافوفونی احتمالی زبان‌های مختلف، مشکل هماهنگی است. مدل‌سازی چندوجهی خاص دامنه زمانی امیدوارکننده است که با پارادایم‌های توسعه سنتی مانند برنامه‌نویسی با یک زبان واحد و مدل‌سازی چندمنظوره مقایسه شود. این مشکل همچنین به‌عنوان مشکل پراکندگی در زمینه مدیریت مدل‌های جهانی شناخته می‌شود. این یک روش سه مرحله‌ای است که برای غلبه بر موانع یکپارچه‌سازی دیدگاه‌های مختلف و هماهنگی زبان‌های مختلف ارائه شده است. این روش نحوه (1) شناسایی و (2) مشخص کردن ارجاعات میان مرزهای زبان‌ها، یعنی همپوشانی‌های بین زبان‌های مختلف را تجویز می‌کند. در نهایت، این روش پیشنهاد های مشخصی برای (3) اعمال این دانش در توسعه واقعی در قالب انطباق، ناوبری و راهنمایی ارائه می‌دهد. مثال تشویقی سیستم‌های سازمانی مبتنی بر زبان‌های خاص دامنه متعدد بسیار رایج هستند. زبان‌هایی که متامدل آن‌ها در زبان نشانه‌گذاری قابل گسترش (XML) تعریف شده است، به‌ویژه در حال گسترش هستند. این اجزا با ترکیبی از زبان‌های مبتنی بر XML و کدهای جاوا معمولی پیاده‌سازی شده‌اند. به عنوان یک مثال، ما بر روی بخش مدیریت محتوا تمرکز می‌کنیم، به‌ویژه یک مورد استفاده که در آن کاربر مدیریتی یک نظرسنجی آنلاین ایجاد می‌کند، همانطور که در اسکرین‌شات زیر نشان داده شده است. شکل یک اسکرین‌شات از رابط کاربری مدیریتی برنامه مدیریت محتوا در یک نمونه OFBiz در حال اجرا را نشان می‌دهد. برای ایجاد یک نظرسنجی، کاربر فیلدهای فرم ورودی را پر کرده و دکمه به‌روزرسانی را فشار می‌دهد. این عمل یک نظرسنجی جدید ایجاد می‌کند که می‌توان آن را ویرایش کرده و در نهایت در وب‌سایت جلویی OFBiz منتشر کرد. این سه زبان به طور تقریبی به ترتیب به مدل ساختاری، رفتار برنامه و نگرانی رابط کاربری در OFBiz اشاره دارند. زبان Entity برای توصیف مدل داده زیربنایی استفاده می‌شود و در نتیجه نحوه ذخیره‌سازی نظرسنجی ایجاد شده را تعیین می‌کند. زبان Service برای توصیف رابط سرویسی که وقتی کاربر دکمه به‌روزرسانی را فشار می‌دهد، فراخوانی می‌شود، استفاده می‌شود. اگرچه این سه زبان برای چیزهای مختلف طراحی شده‌اند، اما نمی‌توان آن‌ها را به‌طور کامل از هم جدا کرد. رابط کاربری منطق خاصی از برنامه را فراخوانی می‌کند و این منطق برنامه داده‌های برنامه را دستکاری می‌کند. زبان‌ها همپوشانی دارند زیرا نگرانی‌هایی که نمایندگی می‌کنند نمی‌توانند به طور کامل از هم جدا شوند. اکنون این سه زبان را به صورت پایین به بالا بررسی کرده و همپوشانی‌های آن‌ها را توضیح می‌دهیم. فهرست زیر تعریف موجودیت Survey را نشان می‌دهد که شیء تجاری است که نمایانگر مفهوم یک نظرسنجی است. کد در فهرست به وضوح قابل فهم است: موجودیتی به نام Survey با 10 فیلد تعریف شده است. سرویس‌های فردی می‌توانند به زبان جاوا، یک زبان اسکریپتی یا با استفاده از یک موتور قواعد پیاده‌سازی شوند. | ## بخش 2: چندمدلسازی دامنه‌محور | علاوه بر نام، عنصر سرویس مکان و دستور فراخوانی پیاده‌سازی این سرویس را مشخص می‌کند. به عنوان ورودی، سرویس ویژگی‌هایی را می‌پذیرد که مربوط به تمام فیلدهای غیرکلید اصلی (nonpk) موجودیت Survey هستند و این ویژگی‌ها اختیاری هستند. با این حال، این سه زبان ایده اصلی ساختن هر نگرانی به صورت ملموس را نشان می‌دهند. این مثال همچنین یک روش ساده برای کاهش تکرار با اجازه دادن به همپوشانی جزئی زبان‌ها را نشان می‌دهد. اغلب لازم است که قطعه‌کدهایی به زبان‌های عمومی مانند جاوا اضافه شوند تا عملکردهای خاصی که فراتر از دامنه زبان‌ها هستند پیاده‌سازی شوند. از آنجا که این روش در تنظیمات با زبان‌های متعدد به‌طور رایج استفاده می‌شود، آن را با ادامه مثال توضیح خواهیم داد. فرض کنید می‌خواهیم یک فایل PDF برای هر پاسخ نظرسنجی به نظرسنجی‌های آنلاین که کاربران ایجاد می‌کنند بسازیم. ساخت فایل PDF خارج از دامنه زبان‌های ما است، بنابراین باید کد جاوا بنویسیم که بتواند یک کتابخانه PDF شخص ثالث را فراخوانی کند تا این عملکرد خاص را انجام دهد. دو اثر لازم است: اولاً، یک مدل سرویس اضافی که در زیر آمده است، در Service DSL که رابط سرویس خاص را تعریف می‌کند تا بتوان آن را در سطح مدل دسترسی کرد. یک سرویس می‌تواند ورودی‌ها و خروجی‌های متعددی داشته باشد، بنابراین ورودی به متد جاوا یک نقشه است، که به آن context می‌گویند، از نام‌های آرگومان به مقادیر آرگومان و خروجی را به صورت یک نقشه دیگر به نام results برمی‌گرداند. مزیت در این مورد این است که می‌توان از یک کتابخانه جاوای شخص ثالث برای ساخت PDF بهره برد. یک کاربرد معمول دیگر این است که از قطعه‌کدهای جاوا برای فراخوانی وب‌سرویس‌های خارجی استفاده شده و نتایج را در قالب مناسب وارد کنیم. مشکل هماهنگی این مثال برخی از مزایای استفاده از زبان‌های مختلف در توسعه را نشان می‌دهد. این مشکلات ناشی از این است که هرچه تعداد بیشتری از مصنوعات را وارد فرآیند خود کنیم، نیاز به هماهنگی بیشتر بین تلاش‌های توسعه‌دهنده داریم. برای طراحی و هماهنگی صحیح مدل‌ها در زبان‌های مختلف، توسعه‌دهندگان باید درک کافی از نحوه تعامل زبان‌ها داشته باشند. ابزارها باید برای شناسایی ناسازگاری‌ها در زمان مدل‌سازی و کمک به توسعه‌دهندگان برای حل این ناسازگاری‌ها فراهم شوند. هماهنگی به‌عنوان یک چالش مفهومی اولین مشکلی که توسعه‌دهندگان هنگام شروع به توسعه با زبان‌های مختلف با آن روبه‌رو می‌شوند، کافوفونی زبان‌ها است. یادگیری زبان‌های مختلف و درک تعامل آنها برای درک ترکیب پیچیده مصنوعات ضروری است. به‌عنوان مثال، فریم‌ورک OFBiz هفده زبان مختلف دارد و بیش از 200,000 خط کد زبان خاص دامنه، بنابراین پیچیدگی می‌تواند بسیار زیاد باشد! در حال حاضر هیچ روش شناخته‌شده‌ای برای مشخص کردن زبان‌های مختلف وجود ندارد که توسعه‌دهندگان بتوانند به سرعت به درک عملیاتی دست یابند. ابزارها در اینجا به‌عنوان یک مکانیزم خودجوش برای یادگیری و کاوش اهمیت دارند زیرا توسعه‌دهندگان معمولاً از ابزارها برای یادگیری از طریق آزمایش‌ها استفاده می‌کنند. درک نحوه استفاده از زبان‌ها اولاً، درک یک زبان می‌تواند دشوار باشد و در مورد زبان‌های خاص دامنه مبتنی بر XML، یک اعتراض رایج و شهودی این است که «نحو اهمیت دارد». این استدلال می‌تواند به‌صورت زیر بیان شود: «زبان‌های مختلف سخت به‌فهم هستند و تنها باعث سردرگمی می‌شوند زیرا نحو مبتنی بر XML آن‌ها به‌ویژه پرجزئیات و غیرقابل‌فهم است. استفاده از یک زبان عمومی مانند جاوا بهتر خواهد بود زیرا در آن صورت توسعه‌دهندگان می‌توانند از نحو‌ای که قبلاً می‌شناسند استفاده کنند». XML یا یک فرمت مشابه ممکن است نحوی نباشد که توسعه‌دهندگان در واقع با آن کار می‌کنند. یکی از مزایای استفاده از زبان‌های خاص دامنه مبتنی بر XML این است که می‌توانیم ویرایشگرهای خاص دامنه ارائه دهیم. | ## بخش 3: چندمدلسازی دامنه‌محور | این ویرایشگر دامنه را به‌صورت ساده و جذاب بصری ارائه می‌دهد اما ممکن است از نمایش XML (و شاید یک پیکربندی طراحی) در پشت‌صحنه استفاده کند. دقیقاً همان‌طور که ممکن است شکایت کنیم که XML انتخاب بدی است، می‌توانیم اعتراض کنیم که زبان عمومی مانند جاوا برای برخی از وظایف انتخاب بدی است. علاوه بر این، توسعه‌دهندگان ممکن است کمتر از ویرایشگر در شکل نسبت به کد XML یا جاوا ترس داشته باشند. اگر قبول کنیم که نحو اهمیت دارد، استفاده از زبان‌های مختلف با ویرایشگرهای اختصاصی یک استراتژی منطقی می‌شود. سادگی ویرایشگر باعث می‌شود که زبان آسان‌تر درک شود و بنابراین راحت‌تر استفاده شود. به عبارت دیگر، اعتراض به اهمیت نحو ممکن است دقیقاً دلیلی باشد که ما به‌دنبال کاوش در زمینه زبان‌های خاص دامنه هستیم. سهولت ناوبری بین مصنوعات مختلف نرم‌افزاری یک معیار مهم برای ابزارها در محیط‌های توسعه سنتی است. اگرچه در این زمینه مطالعات تجربی انجام نداده‌ایم، اما فرض می‌کنیم که تسهیلات ناوبری مناسب بهره‌وری را افزایش می‌دهد. این ادعا با مشاهده‌ای که در حال حاضر تمام محیط‌های توسعه اصلی امکانات ناوبری پیشرفته‌ای مانند مرورگر سلسله‌مراتب نوع یا توانایی جستجو و پرش به ارجاعات به تعریف یک متد را ارائه می‌دهند، پشتیبانی می‌شود. محیط‌های توسعه می‌توانند این امکانات ناوبری را فراهم کنند زیرا آن‌ها یک مدل به‌روز از فایل‌های منبع را به‌صورت درخت نحو انتزاعی نگهداری می‌کنند. محیط‌های موجود برای تجزیه و نمایش مدل‌های DSL به‌صورت درخت نحو انتزاعی برای زبان‌های دلخواه و شاید حتی زبان‌های خاص‌برنامه مانند زبان‌های مثال قبلی طراحی نشده‌اند. علاوه بر این، بدون این نمایش داخلی، محیط‌های موجود نمی‌توانند ارجاعات درون‌زبان یا بین‌زبان را برای چنین زبان‌هایی حل کنند و بنابراین نمی‌توانند ناوبری مفیدی را فراهم کنند. این بدان معناست که توسعه‌دهندگان باید یک مدل مفهومی از نحوه ارتباط بخش‌های سیستم خود نگه دارند. از طرف دیگر، ابزارهای جدید با تسهیلات ناوبری که برای چندین زبان طراحی شده‌اند، در درک روابط بین زبان‌ها بسیار مفید خواهند بود. به‌عنوان مثال، این ابزارها باید روابط بین سه زبان را با استفاده از ارجاعات نرم به‌عنوان نقاط ناوبری نمایش دهند. سومین مورد، برای درک استفاده از زبان‌ها باید قادر باشیم عملیات ویرایش صحیح را از عملیات نادرست در محیط توسعه خود تمایز دهیم. محیط‌های توسعه سنتی مدت‌هاست که راهنمایی‌هایی در حین نوشتن برنامه ارائه داده‌اند. کامپایلر تدریجی به محیط اجازه می‌دهد تا پیشنهادات دقیقی به توسعه‌دهنده بدهد مانند اینکه چگونه یک عبارت را تکمیل کند. انواع دیگر راهنمایی‌های مداخله‌گر نیز وجود دارد مانند ویرایشگرهای مبتنی بر نحو که تنها ورودی‌هایی که با گرامر سازگار هستند را می‌توان وارد کرد. ویرایشگرهای متنی عمومی که می‌توانند با گرامر یک زبان پارامتریک شوند، مدت‌هاست که وجود دارند. ویرایشگرهای موجود هنگام ارائه راهنمایی، روابط سازگاری بین‌زبان‌ها را در نظر نمی‌گیرند. محیطی که می‌تواند درباره مصنوعات از زبان‌های مختلف استدلال کند، همچنین قادر خواهد بود به توسعه‌دهنده کمک کند تا وضعیت‌های برنامه‌ای را شناسایی کند که در آن تطابق محلی وجود دارد اما تطابق جهانی نه. چنین وضعیتی زمانی ایجاد می‌شود که یک مدل به‌خوبی شکل‌گرفته است و بنابراین محلی سازگار است، اما در عین حال یک قید بین‌زبان را نقض می‌کند. راهنمایی یا کمک هوشمندانه به‌صورت پیشنهادهایی درباره نحوه تکمیل مدل برای محیط‌های با زبان‌های متعدد و محدودیت‌های پیچیده انطباق مفید خواهد بود. | ## جمع‌بندی | عملیات ویرایشی که توسط ابزارها پیشنهاد می‌شود، می‌تواند فرآیند یادگیری نحوه استفاده از زبان‌ها را برای توسعه‌دهنده آسان‌تر کند.