Go Developer(gopher-academy.ir)
Go Developer Roadmap part 3
در این مقاله که سری سوم و نهایی از مسیری در جهت تبدیل شدن به یک توسعه دهنده گولنگ را نشان می دهد. که یک توسعه دهنده گولنگ باید چه چیز های یاد بگیرد. پس با ما همراه باشید.
شما می توایند قسمت اول و قسمت دوم را از این جا بخوانید.
سرفصل بخش اول شامل موارد زیر هست
- Testing
- Task Scheduling
- MicroServices
- Design Patterns
خوشحال میشم اگه چیزی از قلم افتاده توی همین پست برام کامنت کنید.
و در ضمن ما رو توی گیت هاب دنبال کنید
۱. ابزار های Testing
قبل اینکه با ابزار ها آشنا بشیم یه توضیح بدم که در واقع تست نویسی یکی از اصول مهم در برنامه نویسی هست که اکثر برنامه نویس های ایرانی ازش فراری هستن خوب در واقع تست نویسی این اطمینان را حاصل می کند که عملکرد مناسبی از برنامه تولید شود . این موضوع یکی از مهم ترین مراحل در در فرآیند تولید یک محصول است.به هیچ وجه نمی توان بدون تست یک محصول رو به بازار فرستاد.
چرا باید تست بنویسیم؟
- تست باعث می شود نقص یا خطایی که ممکن است در مرحله توسعه ایجاد شود،شناسایی و برطرف گردد.
- موفقیت هر محصول با کیفیت و قابلیت اطمینان مشتری در مورد آن محصول ارزیابی می شود.
- برای ارائه نرم افزارهایی با کیفیت بالا، تست مناسب لازم و ضروری است.
- برای طراحی هر نرم افزاری هزینه های زیادی در مرحله توسعه ، بازاریابی و … شده است.بنابراین مهم است که یک برنامه نتایج مثبتی برای جلوگیری از هزینه های ناخواسته یا ناگهانی داشته باشد.اگر برنامه شما در بعضی قسمت ها مشکل داشته باشد باعث نارضایتی کاربر و ترک برنامه شما خواهد شد.
- برای تحکیم جایگاه خود در بازار ، عملکرد نرم افزار باید واقعاً خوب و بادوام باشد. این نوع اطمینان فقط با روشهای مناسب تست قابل دستیابی است.
- با کمک تست می توان امنیت کلی نرم افزار را بهبود بخشید.
انواع تست ها در برنامه نویسی
البته نوع های مختلف دیگه ای هم هست اما ن توی این مقاله چندتا رو توضیح میدم که توی پکیج های گولنگ مورد استفاده قرار می گیرند.
- تست unit
این تست قطعه کوچکی از کد که نیازمند به کد ها و یا ابجکت های زیادی نیست , مثل یک متد و یا یک کلاس برای تست که نیازمند آبجکت ها و یا کلاس های دیگر و یا توابع دیگر نیستند , دقت کنید که گفتیم زیاد نه اینکه یک کلاس وابسته به کلاس دیگری برای ران شدن باشد و ما این را یونیت تست صدا نزنیم , نه! این اشتباه است ما قطعه کوچک را باید در نظر بگیریم و اگر کد بزرگی داشتیم قطعا از متد های دیگر استفاده خواهیم کرد .
- تست integration
تستی که در برگیرنده چند واحد کد است و منظورمان چند کلاس و متد و… است . و معمولا بیشتر از یونیت تستینگ وقت گیر است چراکه complexity برنامه بالا رفته است و شما باید چند واحد را تست کنید و قطعا مشخص است که یونیت تستینگ وقت کمتری را خواهد گرفت .
- تست behavior
توسعه رفتار محور تکنیکها و قواعد اساسی، توسعه آزمون محور را با ایدههای طراحی دامنه محور و تجزیه و تحلیل و طراحی شی گرا ادغام میکند تا برای تیمهای توسعه و مدیریت نرمافزار، ابزارها و فرایندهای مشترکی برای همکاری در توسعه نرمافزار ارائه کند.
معرفی ابزار های تست Unit, Behavior, Integration
- ابزار GoMock
این ابزار یک چارچوب mocking برای زبان برنامه نویسی Go است. که با بسته داخلی Go ساخته شده است.
- ابزار Testify
بی شک در این لیست این ابزار یکی از بهترین ابزار ها هست که متد های مختلفی و میتونید رو کد خودتون تست کنید.
ویژگی ها:
یک نوع تست برای تست های 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 کار خود را به جلو ببرید.
اینکه چه زمانی از آنها استفاده کنیم و یا چه زمانی استفاده نکنیم به خودمان بستگی دارد. هر الگو درباره یک مشکل طراحی صحبت میکند و یک راه حل استاندارد برای آن ارائه می دهد. بنابراین قبل از استفاده از آنها کمی وقت برای تجزیه و تحلیل مسائل طراحی صرف کنید و سعی کنید آن را با توصیف های الگو تطبیق دهید.
به خاطر داشته باشید که نکته کلیدی در پیدا کردن الگوی صحیح، شناسایی و درک سناریویی است که هر الگویی سعی میکند به آن دست یابد.
به محض اینکه الگوی مناسب برای مسئله یا سناریوی خاص شما مشخص شد، می توانید از آن در طراحی نرم افزار خود استفاده کنید.
یه چندتا منابع مبزارم براتون برای کاری با الگو ها در گولنگ
مطلبی دیگر از این انتشارات
مفهوم Context در زبان Go
مطلبی دیگر از این انتشارات
ساخت پروژه با معماری مایکروسرویس، زبان گولنگ، اندپوینت رست، کوبرنتیز و... (قسمت اول)
مطلبی دیگر از این انتشارات
گولنگ: چرا باید گولنگ را در 1400 یاد بگیرید.