تفکیک دغدغه‌ها

پیاده‌سازی

ساز و کار برنامه‌نویسی شی‌گرا یا برنامه‌نویسی پودمانی که یک زبان برنامه‌نویسی امکانش را فراهم می‌آورد، ساز و کارهایی هستند که به توسعه‌دهندگان، اجازهٔ برقراری تفکیک دغدغه‌ها را می‌دهند. برای مثال زبان‌های برنامه‌نویسی شئ گرا مانند سی‌شارپ یا سی‌پلاس‌پلاس یا دلفی، و جاوا می‌توانند دغدغه‌ها را به اشیاء تفکیک و تقسیم کنند و الگوهای طراحی معماری مانند MVC و MVP امکان تفکیک محتوا و نحوهٔ نمایش محتوا و همینطور تفکیک نحوهٔ نمایش محتوا از پردازش داده(مدل) را فراهم می‌آورند. طراحی مبتنی بر سرویس امکان جداسازی دغدغه‌ها به سرویس‌ها را فراهم می‌کند. برنامه‌نویسی رویه‌ای مانند زبان سی و پاسکال امکان تفکیک دغدغه‌ها به رویه‌ها یا توابع را فراهم می‌آورد. برنامه‌نویسی جنبه‌گرا، امکان تفکیک دغدغه‌ها به جنبه‌ها و اشیاء را فراهم می‌کند.
تفکیک دغدغه‌ها یک قاعدهٔ طراحی مهم در سایر حوزه‌ها مانند معماری و طراحی اطلاعات و نیز برنامه‌ریزی شهری به حساب می‌آید. هدف از تفکیک دغدغه‌ها، فهم بهتر طراحی و مدیریت سامانه‌های مسقل و پیچیده است تا عملکردها بدون وابستگی به عملکردهای دیگر ، قابل استفادهٔ مجدد و قابل بهینه‌سازی باشند.
از مثال‌های رایج می‌توان به تفکیک فضای خانه به اتاق‌هایی به منظور جلوگیری از تداخل و تأثیر فعالیت‌هایی که در یک اتاق انجام می‌شود بر قسمت‌های دیگر خانه، اشاره کرد. این مثال، بر ویژگی کپسوله‌سازی تأکید می‌کند، که در آن اطلاعات یک اتاق مثلاً بهم ریختگی اتاق، از چشم اتاق‌های دیگر پنهان است و فقط از طریق رابط(interface) که همان در آن اتاق است می‌توان به این اطلاعات دست یافت.
از دیگر مثال‌های مربوط به تفکیک دغدغه‌ها می‌توان به این موضوع اشاره کرد که مداری که اجاق گاز برقی روی آن قرار دارد و مداری که لامپ‌ها روی آن قرار دارند باید جداگانه باشد تا روشن شدن اجاق گاز برقی در کار لامپ‌ها تداخل ایجاد نکند. این مثال نیز بر جنبهٔ دیگری از تفکیک دغدغه‌ها تأکید می‌کند، و آن این است که فعالیت درون یک قطعه یا پودمان (module) (که در این مثال می‌توان هر مدار را یک قطعه در نظر گرفت)، فعالیت درون قطعه یا پودمان دیگر را تحت تأثیر خود قرار نمی‌دهد، بنابراین هر پودمان یا قطعه، درگیر آنچه که در پودمان یا قطعهٔ دیگر اتفاق می‌افتد نیست.

پشتهٔ پروتوکل اینترنت

تفکیک دغدغه‌ها یکی از اساسی‌ترین مفاهیم در طراحی اینترنت می‌باشد. در مجموعهٔ پروتوکل اینترنت، تلاش‌های فراوانی در جهت تفکیک دغدغه‌ها به لایه‌های مختلف شده‌است. این موجب می‌شود تا طراحان پروتوکل‌ها فارغ از لایه‌های دیگر، بر روی دغدغه‌های مربوط به یک لایه، تمرکز کنند. به عنوان مثال SMTP که یک پروتوکل لایهٔ اپلیکیشن می‌باشد، درگیر تمام جزئیات مربوط به چگونگی ایجاد یک فرایند مربوط به ارسال رایانامه از طریق سرویس انتقال داده( معمولاً TCP) است، اما به هیچ وجه درگیر اینکه سرویس انتقال داده به چه نحو امنیت در ارسال را بر قرار می‌کند، نیست. به‌طور مشابه، TCP هم درگیر نحوهٔ مسیریابی پکت‌های داده‌ای، که در لایهٔ اینترنت انجام می‌گیرد، نیست.

اچ‌تی‌ام‌ال و سی‌اس‌اس و جاوااسکریپت

زنگام(HTML)، شیوه‌نامهٔ آبشاری(CSS) و جاوااسکریپت(JS) زبان‌های مکمل یکدیگر هستند، که در توسعهٔ تارنما مورد استفاده قرار می‌گیرند. زنگام برای ساختاردهی و سازماندهی محتوای صفحه وب، سی‌اس‌اس به منظور مشخص کردن سبک و شیوهٔ ارائه محتوا و جاوااسکریپت به منظور تعریف چگونگی رفتار و اثر متقابل محتوا و کاربر، مورد استفاده قرار می‌گیرند. پیش از اینکه سی‌اس‌اس به وجود بیاید، اچ‌تی‌ام‌ال هر دو دغدغه و وظیفهٔ تعریف محتوا و آرایش آن را بر عهده داشت.

برنامه‌نویسی جنبه‌گرا

برنامه‌نویسی جنبه‌گرا، دغدغه‌های مشترک‌الحوزه (cross-cutting) را به عنوان دغدغه‌های ثانوی ارائه می‌کند. مثلاً بسیاری از برنامه‌ها نیاز به شکلی از امنیت(security) و لاگینگ(logging) دارند. امنیت و لاگینگ معمولاً دغدغه‌های ثانوی محسوب می‌شوند، در حالی که دغدغه‌های اصلی معمولاً مربوط به اهداف کاری(business goals) هستند. اما وقتی که یک برنامه طراحی می‌شود، می‌بایست امنیت آن از ابتدای کار در طراحی در نظر گرفته و پیاده شود، و همانند یک دغدغهٔ ثانوی با آن برخورد نشود. اِعمال امنیت در مراحل پایانی، معمولاً موجب ایجاد مدل‌های امنیتی ناکار آمد می‌شود که برنامه را در مقابل حملات احتمالی آینده آسیب‌پذیر می‌کند.

تفکیک دغدغه‌ها از طریق کلاس‌های تکه تکه(Partial Classes)

تفکیک دغدغه‌ها را می‌توان با استفاده از کلاس‌های تکه‌تکه پیاده‌سازی و اِعمال کرد.