با سلام خدمت همکاران امروز قصد داریم در مورد نوع کارهای آماده سازی که باید قبل از شروع برنامه نویسی وحشیانه انجام دهید صحبت کنیم. به طور خاص، در مورد برنامه ریزی و ایجاد معماری برنامه. اما از کجا شروع کنیم؟ چگونه این معماری را بسازیم؟ مانند همه چیز، شما باید از ابتدا شروع کنید. یعنی - با IDEA. ایده پروژه ما ایجاد یک ربات تلگرام مفید با قابلیت های اولیه بود. اجازه دهید دقیقاً همان چیزی را تکرار کنیم: "من به عنوان یک کاربر میخواهم زمانی که مقالههای جدیدی در آن گروههایی در JavaRush منتشر میشوند، اعلانها را دریافت کنم. با پیروی از اصل YAGNI، ما برنامه خود را خواهیم ساخت. این بدان معنی است که ما فقط آنچه را که نیاز داریم می گیریم. ما عملکردی را از قبل و در رزرو ایجاد نمی کنیم فقط به این دلیل که می خواهیم و روزی ممکن است واقعاً مفید باشد. بله، ما یک برنامه کاربردی خوانا و قابل توسعه ایجاد خواهیم کرد، اما این بدان معنا نیست که یک طرح پایگاه داده "برای رشد" ایجاد خواهیم کرد. برای اینکه از این "رشد" حمایت نکنم، تصمیم گرفتم که بهتر است آن را به کلی کنار بگذارم. این به ما کمک می کند از پشتیبانی غیر ضروری در طول توسعه و آزمایش های غیر ضروری جلوگیری کنیم. بعداً، وقتی پروژه ما به مرحله تولید برسد (باز هم یک Anglicism، از مخفف prod - production)، ما قادر خواهیم بود کارهای بیشتری انجام دهیم. وقتی در مورد یک ایده تصمیم گرفتید، باید کمی شیطنت کنید و نقاشی بکشید. چه چیزی را ترسیم کنیم؟ ما به توانایی ذخیره دادهها در اشتراکهای گروههایی از کاربران مختلف نیاز داریم. می دانم که می توانید از یوزر آیدی به صورت آیدی چت در تلگرام استفاده کنید. و ایده ای در مورد چگونگی انجام جستجوی مقالات جدید وجود دارد: ما در همه گروه هایی که اشتراک مقالات جدید دارند جستجو می کنیم و آنها را به چت می فرستیم. بر این اساس، به عنوان اولین تقریب، موارد زیر را دریافت می کنیم (در اینجا توسعه بدون تزئین است): من امیدوارم که دستخط من را درک کنید: می خواهم دقیقاً نشان دهم که توسعه چگونه و از کجا شروع می شود. مرحله اول تکمیل شده است: ما به نوعی تصمیم گرفته ایم که چه اتفاقی خواهد افتاد. مدل ها/جدول ها در پایگاه داده در بالا توضیح داده شده اند. اما این یک پیشنویس است: میتوان و باید آن را جلا داد و به شکلی خواناتر آورد. در حین صیقل دادن، به یاد آوردم که میخواهم آماری از کار ربات به دست بیاورم. این را اضافه کرد. در این نقاشی مشخص است که چی و چگونه چیده خواهد شد. یعنی چه جداول و فیلدهایی در آنها خواهد بود، چه نام نهادی برای جداول خواهد بود. تصمیم گرفته شد که چندین مورد از آنها وجود داشته باشد:
- کاربر - اطلاعات کاربری تلگرامی که از ربات ما استفاده خواهد کرد. همانطور که می بینید، ما فقط شناسه چت و پرچم را ذخیره می کنیم که آیا کاربر فعال است یا نه. چرا؟ زیرا هدف ما جمع آوری اطلاعات در مورد کاربران نیست، بلکه سود بردن آنهاست.
- GroupSub - در اینجا اطلاعاتی در مورد گروهی که در آن اشتراک دارید و آخرین مقاله ای که برای مشترکین ارسال شده است وجود دارد.
- آمار - من طرحی برای آن ایجاد نکرده ام - ما بعداً این کار را انجام خواهیم داد. این هدف اصلی در MVP پروژه نیست.
یک مخزن برای کار ایجاد کنید
در نهایت می توانید یک مخزن برای کار با ربات تلگرام ایجاد کنید.- مواردی را که قبلاً برای ما آشنا هستند - نام مخزن، شرح مختصر آن را پر می کنیم.
- یک مجوز اضافه کنید - Apache 2.0 (شما می توانید مجوز را به صلاحدید خود انتخاب کنید).
- پروژه ما اکنون در دسترس است - این لینک به آن است: JavaRush Telegrambot .
یک پروژه در مخزن ایجاد کنید
برای کار با پروژه، خوب است از ابزارهای GitHub مانند پروژه استفاده کنید. آن چیست؟ این مکانی است که می توانید وظایفی را ایجاد کنید، تکمیل آنها را پیگیری کنید و وضعیت کار را ذخیره کنید. تعیین کنید چه کسی آنها را اجرا خواهد کرد و بیشتر. برای انجام این کار، در پروژه ایجاد شده، دکمه Projects را پیدا می کنیم ، و در آنجا یک مورد جدید ایجاد می کنیم: همانطور که می بینید، در اینجا نام پروژه را مشخص کردم، آن را شرح دادم و قالبی را انتخاب کردم که روی آن کار خواهیم کرد - کانبان خودکار اکنون برای ما مهم نیست که این به چه معناست. نکته اصلی این است که ما یک تابلو با وظایف خواهیم داشت که به ستون هایی تقسیم شده است که در آن هر ستون وضعیت کار را نشان می دهد:- برای انجام - تمام وظایفی که برای انجام برنامه ریزی شده است.
- در حال انجام - وظایفی که در حال حاضر روی آنها کار می شود.
- انجام شده - کارهایی که قبلاً در این پروژه تکمیل شده اند.
ما مسائل (مسائل) را برای پروژه می نویسیم
برای درک اینکه چه وظایفی باید بنویسیم، بیایید تصمیم بگیریم که در پروژه چه خواهیم داشت. ما به برنامه ای نیاز داریم که به راحتی و سریع راه اندازی شود تا بتوانیم به پایگاه داده دسترسی داشته باشیم تا بتوانیم طرحواره پایگاه داده را مدیریت و تغییر دهیم تا بتوانیم درخواست های REST را در JavaRush برای به دست آوردن داده های مقالات انجام دهیم. بر این اساس، می توانید فناوری های زیر را انتخاب کنید:- SpringBoot - به عنوان چارچوبی برای برنامه ما،
- Spring Data - برای کار با پایگاه داده،
- Flyway - برای کار با انتقال پایگاه داده،
- MySQL - به عنوان پایگاه داده برای پروژه،
- Telegrambot StringBoot starter - کتابخانه ای برای کار با ربات تلگرام،
- Unirest یک کتابخانه برای کار با درخواست های REST است.
الگوی ایجاد کار
ما وظایف را با استفاده از الگوی زیر ایجاد خواهیم کرد:- نام کار به این شکل خواهد بود: JRTB-{IssueNumber}:{IssueDescription} ، که در آن:
- {IssueNumber} شماره سریال شماره است. بیایید آن را یکی دیگر از مشکل آخر در نظر بگیریم.
- {IssueDescription} - شرح مختصری از موضوع.
- در متن کار، شرح مفصل تری از آن خواهیم داشت (گاهی اوقات ممکن است با توضیحات در نام کار مطابقت داشته باشد).
- معیارهای پذیرش لیستی از الزامات است که پس از آن می توان کار را تکمیل شده در نظر گرفت. بنابراین، معیارهای پذیرش تکلیف. با استفاده از آنها، یک بازبین (از انگلیسی Reviewer - Reviewer - شخصی که به نحوه تکمیل یک کار نگاه می کند) می تواند بفهمد که آیا کار به طور کامل انجام شده است یا خیر.
- [ویژگی] JRTB-0: پروژه بوت Skeleton Spring را ایجاد کنید - همه چیز در اینجا واضح است: شما باید قسمت اول کاری را که در مقاله قبلی انجام دادیم انجام دهید.
- [ویژگی] JRTB-2: ربات تلگرام را به پروژه اضافه کنید - یک ربات خالی اضافه کنید که به سادگی پاسخ دهد و بگوید که زنده و سالم است.
- [ویژگی] JRTB-3: اجرای الگوی فرمان برای ربات تلگرام - بیایید روش صحیح کار با دستورات را در ربات تلگرام تنظیم کنیم. تا الان برای چند تیم.
- [ویژگی] JRTB-1: اضافه کردن لایه مخزن - این یکی از بزرگترین وظایف است - همه چیزهایی را که برای کار با پایگاه داده باید انجام شود ترکیب می کند.
- [ویژگی] JRTB-5: به عنوان یک کاربر، میخواهم گروه را به اشتراک اضافه کنم - این اولین داستان کاربر در درک Agile است. این یک مزیت واقعی برای کاربران ما خواهد بود: اضافه کردن اشتراک های گروهی به ربات امکان پذیر خواهد بود.
- [ویژگی] JRTB-12: اجرای زمانبندی برای ارسال اعلان در مورد مقالات جدید - در اینجا اجرای جستجوی مقالات جدید در صورتی که برای هر یک از گروهها منتشر شده و برای همه کاربرانی که در گروهها مشترک هستند ارسال شود، انجام میشود.
- [ویژگی] JRTB-6: به عنوان یک کاربر، میخواهم فهرست اشتراکهای گروه خود را ببینم - همه چیز در اینجا ساده است: ما دستوری را اضافه میکنیم که فهرستی از همه گروههایی را که کاربر در آنها مشترک است را نشان میدهد.
- [ویژگی] JRTB-7: به عنوان یک کاربر، میخواهم اشتراک گروهی را از اشتراکهایم حذف کنم - در اینجا باید اشتراک کاربر برای بهروزرسانیهای گروه را حذف کنید.
- [ویژگی] JRTB-8: به عنوان یک کاربر، میخواهم با استفاده از ربات غیرفعال را تنظیم کنم - توقف ربات را پیادهسازی کنید. یعنی هر کاری که باید در سیستم ما انجام شود تا کار متوقف شود. دستور /stop را به پردازش اضافه کنید.
- [ویژگی] JRTB-9: به عنوان یک کاربر، میخواهم با ربات یا مجموعه فعال شروع به کار کنم اگر قبلاً از آن استفاده میکردم - پردازش دستور /start را اضافه کنید. دقیقاً همانطور که ما می خواهیم.
- [ویژگی] JRTB-10: به عنوان یک مدیر، من می خواهم آمار ربات را ببینم - مجموعه ای از آمار ربات ها را ایجاد می کنم. افزودن قابلیت های مدیر
- [ویژگی] JRTB-11: به عنوان یک کاربر، میخواهم مستندات این ربات تلگرام را ببینم - مستندات نوشتن. بله، بله، دوستان، شما نمی توانید بدون آن زندگی کنید، و هر چه زودتر یاد بگیرید این کار را انجام دهید، برای شما بهتر خواهد بود))
پر کردن مخزن
قبل از شروع کدنویسی چه کارهای دیگری باید انجام دهیم؟ - نویسنده چند تا از این پاراگراف ها رو می تونی اضافه کنی از ورطه بیرون می کشی؟؟ - خیر، کیفیت کار در جزئیات نشان داده شده است. و آنها کسانی هستند که منطقی هستند. پس بیایید یک جزئیات بیشتر اضافه کنیم. برای اینکه این پروژه برای سایر توسعه دهندگان محبوب و قابل درک شود، باید آن را پر کنید. چی اضافه کنم؟ من فهرست کاملی از کارهایی که میتوان انجام داد را در مقاله بهینهسازی کار با پروژههای شما در GitHub شرح دادم: آشنایی با مخزن قالب Github . خواندن آن را به شدت توصیه می کنم. برای ما مهم است که نسخهسازی واضح داشته باشیم، درک روشنی از کاری که انجام میدهیم. بنابراین، من یک فایل RELEASE_NOTES اضافه کردم که در آن تغییرات پروژه ما ثبت می شود. به عنوان مثال، میتوانید به RELEASE_NOTES پروژه من نگاه کنید (بله، چرا انرژی و خلاقیتم را در چه چیزی به کار میبرم) نشان ندهم. تغییرات هر نسخه جدید در آنجا توضیح داده شده است. من همچنین قالب هایی برای ایجاد وظایف جدید اضافه کردم که دارای 4 گزینه هستند:- گزارش اشکال کاری است که توسط کاربران/تستکنندههایی ایجاد میشود که اشکالی را در کار خود پیدا میکنند. این یک چیز بسیار مهم است: به مدیریت رفع اشکال کمک می کند.
- درخواست ویژگی وظیفه ای برای افزودن عملکرد جدید است. همه اولین وظایف در پروژه، وظایف درخواست ویژگی هستند.
- درخواست بهبود - وظیفه ای برای بهبود عملکرد برنامه. به عنوان مثال، برای تغییر پاسخ های تست هنگام کار با یک ربات. من یک نویسنده فنی نیستم و می توانم به پاسخ های نه کاملاً صحیح برسم. پس اگر میل و توانایی داری پیشنهاد بده :)
- سوال یک سوال برای توسعه دهندگان در مورد عملکرد برنامه است. یک چیز بسیار مفید فرض کنید درکی از کار وجود ندارد یا در مورد سؤالی شک و شبهه وجود دارد - می توانید از این طریق یک سؤال بپرسید و از دست اول پاسخ بگیرید.
GO TO FULL VERSION