نقشه راه توسعه دهنده قسمت سوم

توسط mrbardia72
زمان خواندن 2 دقیقه
نقشه راه توسعه دهنده قسمت سوم

در این مقاله که سری سوم و نهایی از مسیری در جهت تبدیل شدن به یک توسعه دهنده گولنگ را نشان می دهد. که یک توسعه دهنده گولنگ باید چه چیز های یاد بگیرد. پس با ما همراه باشید.

سرفصل بخش اول شامل موارد زیر هست

Testing

Task Scheduling

MicroServices

Design Patterns

۱. ابزار های Testing

قبل اینکه با ابزار ها آشنا بشیم یه توضیح بدم که در واقع تست نویسی یکی از اصول مهم در برنامه نویسی هست که اکثر برنامه نویس های ایرانی ازش فراری هستن خوب در واقع تست نویسی این اطمینان را حاصل می کند که عملکرد مناسبی از برنامه تولید شود . این موضوع یکی از مهم ترین مراحل در در فرآیند تولید یک محصول است.به هیچ وجه نمی توان بدون تست یک محصول رو به بازار فرستاد.

چرا باید تست بنویسیم؟

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

موفقیت هر محصول با کیفیت و قابلیت اطمینان مشتری در مورد آن محصول ارزیابی می شود.

برای ارائه نرم افزارهایی با کیفیت بالا، تست مناسب لازم و ضروری است.

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

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

با کمک تست می توان امنیت کلی نرم افزار را بهبود بخشید.

انواع تست ها در برنامه نویسی

البته نوع های مختلف دیگه ای هم هست اما ن توی این مقاله چندتا رو توضیح میدم که توی پکیج های گولنگ مورد استفاده قرار می گیرند.

تست unit

این تست قطعه کوچکی از کد که نیازمند به کد ها و یا ابجکت های زیادی نیست , مثل یک متد و یا یک کلاس برای تست که نیازمند آبجکت ها و یا کلاس های دیگر و یا توابع دیگر نیستند , دقت کنید که گفتیم زیاد نه اینکه یک کلاس وابسته به کلاس دیگری برای ران شدن باشد و ما این را یونیت تست صدا نزنیم , نه! این اشتباه است ما قطعه کوچک را باید در نظر بگیریم و اگر کد بزرگی داشتیم قطعا از متد های دیگر استفاده خواهیم کرد .

تست integration

تستی که در برگیرنده چند واحد کد است و منظورمان چند کلاس و متد و… است . و معمولا بیشتر از یونیت تستینگ وقت گیر است چراکه complexity برنامه بالا رفته است و شما باید چند واحد را تست کنید و قطعا مشخص است که یونیت تستینگ وقت کمتری را خواهد گرفت .

تست behavior

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

معرفی ابزار های تست Unit, Behavior, Integration

ابزار GoMock

این ابزار یک چارچوب mocking برای زبان برنامه نویسی Go است. که با بسته داخلی Go ساخته شده است.

ابزار Testify

بی شک در این لیست این ابزار یکی از بهترین ابزار ها هست که متد های مختلفی و میتونید رو کد خودتون تست کنید.

ویژگی ها:

Easy assertions

Mocking

Testing suite interfaces and functions

ابزار GinkGo

یک نوع تست برای تست های BDD محصوب می شود.

ابزار GoMega

یک نوع تست برای تست های BDD محصوب می شود.

ابزار GoDog

یک نوع تست برای تست های BDD محصوب می شود

ابزار GoConvey

یک نوع تست که به صورت محیط ui تست های شمارو نشون میده. اینم لینک ویدیو

ویژگی ها:

Directly integrates with go test

Fully-automatic web UI (works with native Go tests, too)

Huge suite of regression tests

Shows test coverage (Go 1.2+)

Readable, colorized console output (understandable by any manager, IT or not)

Test code generator

Desktop notifications (optional)

Immediately open problem lines in Sublime Text (some assembly required)

۲. ابزارهای Task Scheduling

این ابزار ها که از اسمشان پیداست وظیفه مدیریت و زمانبدی وظابف رو دارن

ابزار Gron

کرون جاب ها در گولنگ می باشد.

ویژگی ها:

Minimalist APIs for scheduling jobs.

Thread safety.

Customizable Job Type.

Customizable Schedule.

ابزار JobRunner

این ابزار چارچوبی برای انجام کار به صورت غیر همزمان می باشد.و برنامه ریزی و صف بندی توابع برای پردازش در زمان مشخص با Cron همراه میسازد.

۳. ابزار های MicroServices

ابزار های Message-Broker

ابزار RabbitMQ

این ابزار یک نرم افزار صف بندی پیام به نام واسطه‌ی پیام یا مدیریت صف است. بطور ساده، نرم افزاری است که در آن صف‌ها می‌توانند تعریف شوند، برنامه‌ها ممکن است به صف متصل شده و یک پیام به آن انتقال دهند.

ابزار Apache Kafka

کافکا برای مواجهه با انبوهی از داده ها که بی وقفه در حال ارسال هستند و شما فرصت کافی برای پردازش و ذخیره سازی آنها نداشته باشید تولید شده است.کافکا برای استفاده در پروژه های زمان واقعی (real-time) به منظور فراهم آوردن خط لوله داده ها و جریان برنامه های استفاده می شود. کافکا به صورت افقی مقیاس پذیر، مقاوم در برابر خطاو بسیار سریع است. و در تولیدات هزاران شرکت استفاده می شود.

ابزار ActiveMQ

این نرم افزار محبوب و قدرتمند یک نرم افزار کدباز پیام رسانی و سرویس دهنده تجمیع کننده الگوها می باشد. این نرم افزار بسیار سریع بوده و بسیاری از زبانهای مبتنی بر ایستگاه کاری و پروتکل های مختلف را پشتیبانی می نماید. این نرم افزار به صورت بسیار کاربر پسند و حرفه ای، الگوهای تجاری را تجمیع می نماید. ActiveMQ قابلیت های پیشرفته ای در خود گنجانده است. همچنین نسخه جدید این نرم افزار ازJMS 1.1 و J2EE 1.4 پشتیبانی می نماید . این نرم افزار تحت مجوز Apache 2.0 License انتشار می نماید

ابزار Azure Service Bus

در واقع این ابزار ارتباطات ابری قابل‌اطمینان بین برنامه‌ها و پایگاه‌های داده را فراهم می‌کند و پیام را به عنوان یک سرویس (MaaS) ارایه می‌دهد.

ابزار Building message-driven

ابزار Watermillاین ابزار یک کتابخانه برای جریان های پیام می باشد. این ابزار برای ساخت برنامه های مبتنی بر رویدادها ، فعال کردن منابع برای رویدادها ، RPC از طریق پیام ها ،و هر چیز دیگری به ذهن شما خطور می کند. در ضمن شما می توانید با استفاده از ابزار های متداولی مانند کافکا یا RabbitMQ ، بلکه HTTP یا MySQL استفاده کنید.

ویژگی ها:

Easy to understand.

Universal - event-driven architecture, messaging, stream processing, CQRS - use it for whatever you need.

Fast (see Benchmarks).

Flexible with middlewares, plugins and Pub/Sub configurations.

Resilient - using proven technologies and passing stress tests (see Stability).

ابزار های Frameworks

ابزار GoKit

این فرم ورک برای ساخت برنامه های که مبتنی بر میکروسرویس می باشند عمل می کند.

ویژگی ها:

Operate in a heterogeneous SOA — expect to interact with mostly non-Go-kit services

RPC as the primary messaging pattern

Pluggable serialization and transport — not just JSON over HTTP

Operate within existing infrastructures — no mandates for specific tools or technologies

ابزار Micro

این فرم ورک برای ساخت برنامه های توزیع شده می باشد.

ویژگی ها:

Authentication

Dynamic Config

Data Storage

Service Discovery

Load Balancing

Message Encoding

gRPC Transport

Async Messaging

Synchronization

Pluggable Interfaces

ابزار rpcxیک چارچوب سریع برای میکرو سرویسهای دو طرفه چند زبانه

ویژگی ها:

Support raw Go functions. There's no need to define proto files.

Pluggable. Features can be extended such as service discovery, tracing.

Support TCP, HTTP, QUIC and KCP

Support multiple codecs such as JSON, Protobuf, MessagePack and raw bytes.

Service discovery. Support peer2peer, configured peers, zookeeper, etcd, consul and mDNS.

Fault tolerance:Failover, Failfast, Failtry.

Load banlancing:support Random, RoundRobin, Consistent hashing, Weighted, network quality and Geography.

Support Compression.

Support passing metadata.

Support Authorization.

Support heartbeat and one-way request.

Other features: metrics, log, timeout, alias, circuit breaker.

Support bidirectional communication.

Support access via HTTP so you can write clients in any programming languages.

Support API gateway.

Support backup request, forking and broadcast.

ابزار های RPC

ابزار Protocol Buffers

درمورد این ابزار و نحو کارکرد آن این مقاله آموزش صفر تا ۵۰ پروتوبافر رو بخونید.

ابزار gRPC-Go

درمورد این ابزار و نحو کارکرد آن این مقاله gRPC چیه و چطور کار میکنه؟ رو بخونید.

۴. الگو های طراحی

در واقع Design Patternها در زمان طراحی سیستم های نرم افزاری و یا فرایند تولید جواب بسیار مورد توجه قرار می گیرد. الگوها سر و صدای زیادی به پا کرده است. از طرفی ممکن است در استفاده از آن ها دچار سردرگمی بشویم. اساساً با سوالات زیر مواجه خواهیم بود:

در وافع Design Pattern چیه؟

چرا باید از Design Patternها استفاده کنیم اصلن؟

چه زمانی باید از Design Patternها استفاده کنیم؟

در واقع Design Pattern چیه؟

در واقع Design Patternها یکسری جواب های ثابت شده به مشکلات رایج در طراحی هستند. به وسیله آنها می توان یکسری راهکار برای حل مسائل بازگشتی در طراحی برنامه تعریف کرد.

به طور واضح، Design Patternها کدهای آماده ای نیستند که بتوان مستقیماً از آن ها استفاده کرد. اما یسکری رویکرد یا نظریه برای حل چالش های عادی طراحی ارائه می دهند.

چرا باید از Design Patternها استفاده کنیم؟

باید از design pattern ها برای طراحی و توسعه اجزاء (componentها) ای استفاده کنیم که مجدداً قابل استفاده و مقیاس پذیر بوده باشند و به تیم برنامه نویسی کمک کنند تا عملیات توسعه در زمان مقرر و با کیفیت بالاتری به انجام برسد.

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

چه زمانی باید از Design Patternها استفاده کنیم؟

استفاده از Design Patternها بدون ارزیابی صحیح باعث پیچیدگی غیر ضروری الگو می شود. در شرایطی که به آنها احتیاج ندارید می توانید با استفاده از اصول ساده طراحی OOP کار خود را به جلو ببرید.

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

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

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

یه چندتا منابع مبزارم براتون برای کاری با الگو ها در گولنگ

https://github.com/tmrts/go-patterns

https://golangbyexample.com/all-design-patterns-golang/