Software Architecture vs Code • Simon Brown • GOTO 2014

خلاصه ای از ارائه انجام شده در اینجا بیان می‌کنیم. در این ویدئو سایمون تلاش می‌کند یک رابطه خوبی بین معماری و کد برقرار کند. یکی از اشتباهات رایج در درک معماری نرم افزار این است که بیشتر درباره چشم اندازه‌های دور صحبت می‌شود ولی این مورد باعث می‌شود ارتباط معماری با کد کاهش پیدا کند. در عوض سخنران می‌گوید باید به کمک نمودارها ارتباط موثر بین معماری و سطح کد ایجاد شود، او همچنین اهمیت همراستایی معماری نرم افزار با کد را مورد بحث قرار می دهد و مثالی از نحوه انجام این کار با استفاده از معماری لایه ای ارائه می دهد.باید در هنگام مستند سازی کاملا abstract بنویسید و درگیر جزئیات نشویدمعماری نرم افزار در واقع در مورد ساختار یک سیستم نرم افزاری است.معماری نرم افزار را می توان به طور موثر با استفاده از نمودارهای ساده ارتباط داد.معماری نرم افزار باید با کد هماهنگ باشد.روش های مختلفی برای تجزیه یک سیستم نرم افزاری وجود دارد.رویکردهای چابک در مورد گذشته نگر و بازرسی و تطبیق صحبت می کنند.اگر می‌خواهیم یک معماری چابک بسازیم، باید همین مانترا را در سیستم خود اعمال کنیم.اگر بدانید چه چیزی دارید و به کجا می خواهید برسید، بازسازی معماری سخت نیست.یک نگاشت صریح ساده بین نمودارها و کد واقعا کمک می کند.اگر کار با سیستم نرم افزاری شما سخت است، آن را تغییر دهید.استفاده از رویکرد C4 را پیشنهاد می‌دهد زیرا مانند یک نقشه عمل می‌کند و شما می‌توانید به راحتی به داخل هر بخش zoom کنید و مشخصات داخلی آن را مشاهده کنیدیکی از موضوعات مهم دیگری که در سخنرانی بحث می‌شود که من سعی کردم دقیق تر آن را توضیح دهم یعنی کمی بیشتر بسط دادم این موارد را.تفکیک نگرانی ها (SoC)جداسازی نگرانی ها (SoC) یک اصل اساسی طراحی نرم افزار است که از تقسیم یک سیستم نرم افزاری به ماژول ها یا اجزای مستقل و کاملاً تعریف شده حمایت می کند. هر ماژول یا جزء باید مسئولیت خاصی داشته باشد و نباید با ماژول ها یا اجزای دیگر فراتر از محدوده تعیین شده خود تعامل داشته باشد. این امر باعث ارتقای ماژولار بودن، کاهش پیچیدگی و افزایش قابلیت نگهداری با آسان‌تر کردن سیستم برای درک، اصلاح و اشکال‌زدایی می‌شود. از مزایای این رویکرد موارد زیر می‌باشد:1. مژولاریت: ماژول‌های جداگانه امکان توسعه، آزمایش و استقرار مستقل را فراهم می کند و سیستم را انعطاف پذیرتر و سازگارتر با تغییرات می کند.2.کاهش پیچیدگی: با تقسیم سیستم به واحدهای کوچکتر و قابل مدیریت، SoC ساختار کلی را ساده می‌کند و درک و پیمایش آن را آسان‌تر می‌کند.3. قابلیت نگهداری: قابلیت نگهداری بهبود می‌یابد و توانایی جداسازی و اصلاح اجزای خاص بدون تأثیر بر کل سیستم میسر می‌شود.4. آزمایش پذیری: ماژول های مجزا با فعال کردن تست متمرکز بر روی اجزای جداگانه و جداسازی مسائل احتمالی، قابلیت تست را افزایش می دهند.5.استفاده مجدد از کد: ماژول‌ها به خوبی تعریف شده این قابلیت را دارند که در پروژه‌های دیگه نیز استفاده شوندهمچنین چند نکته برای دستیابی به SOC را نیز بیان می‌کند:1.مرزهای ثابت را شناسایی کنید: مرزهای واضحی را بین ماژول ها تعریف کنید و اطمینان حاصل کنید که آنها فقط در حوزه های مربوطه خود تعامل دارند.2. استفاده از Encapulation: پیاده سازی تکنیک های encapsulation برای مخفی کردن جزئیات پیاده سازی داخلی، بسیار مهم است.3. انتزاع: از انتزاع برای ارائه رابط‌های سطح بالا برای ماژول‌ها استفاده کنید و پیچیدگی های اساسی آن‌ها را پنهان کنید.4.اصل جداسازی رابط: از واسط‌های یکپارچه که ماژول ها را مجبور به پیاده سازی روش های غیر ضروری می‌کنند، اجتناب کنید. رابط‌ها را به رابط‌های کوچکتر و خاص‌تر تقسیم کنید.5.تزریق وابستگی: از تزریق وابستگی برای از بین بردن نیاز به وابستگی های رمزگذاری شده استفاده کنید، که باعث اتصال شل و انعطاف پذیری می شود.6.سازمان کد: ساختارهای کد را به گونه ای سازماندهی کنید که منعکس کننده تفکیک نگرانی‌ها باشد، با استفاده از قراردادهای نامگذاری و ساختارهای دایرکتوری برای افزایش وضوح حتما استفاده کنید.7.مستندات: مستندسازی کامل ماژول ها و مسئولیت های آنها به حفظ درک ساختار و تعاملات سیستم کمک می کند.8.بازبینی مستمر: به طور منظم پایبندی سیستم به اصول SoC را بررسی و ارزیابی کنید و اطمینان حاصل کنید که ماژول‌ها به خوبی تعریف شده و مستقل باقی می‌مانند.با پیروی از این نکات، معماران و توسعه دهندگان نرم افزار می توانند به طور موثر جداسازی نگرانی ها را پیاده سازی کنند که منجر به سیستم های نرم افزاری قابل نگهداری، آزمایش پذیر و سازگارتر شود.به طور کلی، این ویدئو منبع ارزشمندی برای هر کسی است که می‌خواهد درباره معماری نرم‌افزار اطلاعات بیشتری کسب کند. به خوبی ارائه شده و آموزنده است و تعدادی نکته عملی را ارائه می دهد که می تواند در پروژه های دنیای واقعی اعمال شود.