موضوع مقاله: تفکیک دغدغه‌ها | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # تفکیک دغدغه‌ها | مقدمه: دغدغه، مجموعه اطلاعاتی است که کد یک برنامه‌ی کامپیوتری را تحت تأثیر قرار می‌دهد. | ## بخش 1: تفکیک دغدغه‌ها | این دغدغه ممکن است خیلی کلّی باشد مثلاً جزئیات سخت افزاری که کد برنامه را برای اجرا روی آن بهینه می‌کنیم، یا دغدغه ممکن است خیلی مشخص و جزئی باشد مثلاً نام کلاسی که از آن اشیاء ساخته می‌شوند. برنامه‌ای که تفکیک دغدغه‌ها را به کار می‌گیرد، برنامه‌ی پودمانی یا قطعه‌ای (Modular) می‌گویند. وقتی دغدغه‌ها به صورت مناست تفکیک شده باشند، هر بخش از برنامه را می‌توان به صورت کاملاً جداگانه در برنامه‌ی دیگر مورد استفاده قرار داد و همینطور، آن را توسعه داد و بروز رسانی کرد. یکی از فواید مهم تفکیک دغدغه‌ها این است که می‌توان بعد از پایان پروژه، بخش‌هایی از کد را بدون نیاز به دانستن جزئیات بخش‌های دیگر (بخش‌های وابسته) و بدون نیاز به اِعمال تغییرات متناظر در بخش‌های دیگر، اصلاح کرد یا آن‌ها را بهبود بخشید. پیاده‌سازی ساز و کار برنامه‌نویسی شی‌گرا یا برنامه‌نویسی پودمانی که یک زبان برنامه‌نویسی امکانش را فراهم می‌آورد، ساز و کارهایی هستند که به توسعه‌دهندگان، اجازهٔ برقراری تفکیک دغدغه‌ها را می‌دهند. برای مثال زبان‌های برنامه‌نویسی شئ گرا مانند سی‌شارپ یا سی‌پلاس‌پلاس یا دلفی، و جاوا می‌توانند دغدغه‌ها را به اشیاء تفکیک و تقسیم کنند و الگوهای طراحی معماری مانند MVC و MVP امکان تفکیک محتوا و نحوهٔ نمایش محتوا و همینطور تفکیک نحوهٔ نمایش محتوا از پردازش داده(مدل) را فراهم می‌آورند. برنامه‌نویسی رویه‌ای مانند زبان سی و پاسکال امکان تفکیک دغدغه‌ها به رویه‌ها یا توابع را فراهم می‌آورد. تفکیک دغدغه‌ها یک قاعدهٔ طراحی مهم در سایر حوزه‌ها مانند معماری و طراحی اطلاعات و نیز برنامه‌ریزی شهری به حساب می‌آید. | ## بخش 2: تفکیک دغدغه‌ها | هدف از تفکیک دغدغه‌ها، فهم بهتر طراحی و مدیریت سامانه‌های مسقل و پیچیده است تا عملکردها بدون وابستگی به عملکردهای دیگر ، قابل استفادهٔ مجدد و قابل بهینه‌سازی باشند. از مثال‌های رایج می‌توان به تفکیک فضای خانه به اتاق‌هایی به منظور جلوگیری از تداخل و تأثیر فعالیت‌هایی که در یک اتاق انجام می‌شود بر قسمت‌های دیگر خانه، اشاره کرد. این مثال، بر ویژگی کپسوله‌سازی تأکید می‌کند، که در آن اطلاعات یک اتاق مثلاً بهم ریختگی اتاق، از چشم اتاق‌های دیگر پنهان است و فقط از طریق رابط(interface) که همان در آن اتاق است می‌توان به این اطلاعات دست یافت. از دیگر مثال‌های مربوط به تفکیک دغدغه‌ها می‌توان به این موضوع اشاره کرد که مداری که اجاق گاز برقی روی آن قرار دارد و مداری که لامپ‌ها روی آن قرار دارند باید جداگانه باشد تا روشن شدن اجاق گاز برقی در کار لامپ‌ها تداخل ایجاد نکند. این مثال نیز بر جنبهٔ دیگری از تفکیک دغدغه‌ها تأکید می‌کند، و آن این است که فعالیت درون یک قطعه یا پودمان (module) (که در این مثال می‌توان هر مدار را یک قطعه در نظر گرفت)، فعالیت درون قطعه یا پودمان دیگر را تحت تأثیر خود قرار نمی‌دهد، بنابراین هر پودمان یا قطعه، درگیر آنچه که در پودمان یا قطعهٔ دیگر اتفاق می‌افتد نیست. مثال‌ها پشتهٔ پروتوکل اینترنت تفکیک دغدغه‌ها یکی از اساسی‌ترین مفاهیم در طراحی اینترنت می‌باشد. در مجموعهٔ پروتوکل اینترنت، تلاش‌های فراوانی در جهت تفکیک دغدغه‌ها به لایه‌های مختلف شده‌است. این موجب می‌شود تا طراحان پروتوکل‌ها فارغ از لایه‌های دیگر، بر روی دغدغه‌های مربوط به یک لایه، تمرکز کنند. | ## بخش 3: تفکیک دغدغه‌ها | به عنوان مثال SMTP که یک پروتوکل لایهٔ اپلیکیشن می‌باشد، درگیر تمام جزئیات مربوط به چگونگی ایجاد یک فرایند مربوط به ارسال رایانامه از طریق سرویس انتقال داده( معمولاً TCP) است، اما به هیچ وجه درگیر اینکه سرویس انتقال داده به چه نحو امنیت در ارسال را بر قرار می‌کند، نیست. به‌طور مشابه، TCP هم درگیر نحوهٔ مسیریابی پکت‌های داده‌ای، که در لایهٔ اینترنت انجام می‌گیرد، نیست. اچ‌تی‌ام‌ال و سی‌اس‌اس و جاوااسکریپت زنگام(HTML)، شیوه‌نامهٔ آبشاری(CSS) و جاوااسکریپت(JS) زبان‌های مکمل یکدیگر هستند، که در توسعهٔ تارنما مورد استفاده قرار می‌گیرند. زنگام برای ساختاردهی و سازماندهی محتوای صفحه وب، سی‌اس‌اس به منظور مشخص کردن سبک و شیوهٔ ارائه محتوا و جاوااسکریپت به منظور تعریف چگونگی رفتار و اثر متقابل محتوا و کاربر، مورد استفاده قرار می‌گیرند. پیش از اینکه سی‌اس‌اس به وجود بیاید، اچ‌تی‌ام‌ال هر دو دغدغه و وظیفهٔ تعریف محتوا و آرایش آن را بر عهده داشت. اما وقتی که یک برنامه طراحی می‌شود، می‌بایست امنیت آن از ابتدای کار در طراحی در نظر گرفته و پیاده شود، و همانند یک دغدغهٔ ثانوی با آن برخورد نشود. | ## جمع‌بندی | اِعمال امنیت در مراحل پایانی، معمولاً موجب ایجاد مدل‌های امنیتی ناکار آمد می‌شود که برنامه را در مقابل حملات احتمالی آینده آسیب‌پذیر می‌کند.