# ساخت یک برنامه بانکی بخش ۱: قالب‌های HTML و مسیرها در یک برنامه وب ```mermaid journey title سفر توسعه اپلیکیشن بانکی شما section مبانی SPA درک برنامه‌های تک صفحه‌ای: 3: Student یادگیری مفاهیم قالب: 4: Student تسلط بر دستکاری DOM: 4: Student section سیستم‌های مسیردهی پیاده‌سازی مسیردهی سمت مشتری: 4: Student مدیریت تاریخچه مرورگر: 5: Student ایجاد سیستم‌های ناوبری: 5: Student section الگوهای حرفه‌ای ساخت معماری مدولار: 5: Student اعمال بهترین روش‌ها: 5: Student خلق تجربه‌های کاربری: 5: Student ``` وقتی رایانه هدایت آپولو ۱۱ در سال ۱۹۶۹ به ماه ناوبری می‌کرد، باید بدون راه‌اندازی مجدد کل سیستم بین برنامه‌های مختلف جابجا می‌شد. برنامه‌های وب مدرن به همین شکل کار می‌کنند – آنها آنچه را که می‌بینید بدون بارگذاری مجدد کامل تغییر می‌دهند. این تجربه‌ای روان و پاسخگو ایجاد می‌کند که کاربران امروزی انتظار دارند. برخلاف وب‌سایت‌های سنتی که برای هر تعامل کل صفحه را بارگذاری می‌کنند، برنامه‌های وب مدرن تنها بخش‌هایی را که نیاز به تغییر دارند به‌روزرسانی می‌کنند. این رویکرد، درست مانند اینکه مرکز کنترل مأموریت بین نمایش‌های مختلف جابجا می‌شود در حالی که ارتباط مداوم حفظ می‌شود، آن تجربه روانی را که ما انتظار داریم ایجاد می‌کند. در اینجا تفاوت به قدری چشمگیر است که: | برنامه‌های چندصفحه‌ای سنتی | برنامه‌های تک‌صفحه‌ای مدرن | |----------------------------|----------------------------| | **ناوبری** | بارگذاری کامل صفحه برای هر صفحه | تعویض فوری محتوا | | **عملکرد** | کندتر به دلیل بارگذاری کامل HTML | سریع‌تر با به‌روزرسانی‌های جزئی | | **تجربه کاربری** | چشمک‌های آزاردهنده صفحه | گذارهای نرم و شبه برنامه‌ای | | **اشتراک داده** | دشوار بین صفحات | مدیریت آسان حالت | | **توسعه** | چندین فایل HTML برای نگهداری | یک HTML با قالب‌های پویا | **درک تکامل:** - **برنامه‌های سنتی** نیاز به درخواست سرور برای هر عمل ناوبری دارند - **برنامه‌های مدرن تک‌صفحه‌ای** یک بار بارگذاری می‌شوند و محتوا را پویا با جاوااسکریپت به‌روزرسانی می‌کنند - **انتظارات کاربران** اکنون به تعاملات فوری و بدون درز گرایش دارد - **مزایای عملکردی** شامل کاهش پهنای باند و پاسخ سریع‌تر می‌شود در این درس، یک برنامه بانکی با چند صفحه خواهیم ساخت که به‌طور روان با هم جریان دارند. درست مانند اینکه دانشمندان از ابزارهای ماژولار استفاده می‌کنند که می‌توان آنها را برای آزمایش‌های مختلف پیکربندی مجدد کرد، ما از قالب‌های HTML به عنوان اجزای قابل استفاده مجدد استفاده خواهیم کرد که در صورت نیاز نمایش داده می‌شوند. شما با قالب‌های HTML (طرح‌های قابل استفاده مجدد برای صفحات مختلف)، مسیر‌یابی جاوااسکریپت (سیستمی که بین صفحات جابجا می‌شود) و رابط تاریخچه مرورگر (که دکمه بازگشت را به درستی کار می‌کند) کار خواهید کرد. این‌ها همان تکنیک‌های اساسی هستند که فریم‌ورک‌هایی مانند React، Vue و Angular استفاده می‌کنند. در پایان، یک برنامه بانکی عملی خواهید داشت که اصول برنامه‌های تک‌صفحه‌ای حرفه‌ای را نشان می‌دهد. ```mermaid mindmap root((برنامه‌های تک‌صفحه‌ای)) Architecture Template System Client-side Routing State Management Event Handling Templates Reusable Components Dynamic Content DOM Manipulation Content Switching Routing URL Management History API Navigation Logic Browser Integration User Experience ناوبری سریع انتقالات روان وضعیت یکدست تعاملات مدرن Performance کاهش درخواست‌های سرور انتقالات سریع‌تر صفحه استفادهٔ بهینه از منابع پاسخگویی بهتر ``` ## آزمون قبل از درس [آزمون قبل از درس](https://ff-quizzes.netlify.app/web/quiz/41) ### چیزی که نیاز خواهید داشت ما به یک سرور وب محلی برای آزمایش برنامه بانکی‌مان نیاز داریم – نگران نباشید، آسان‌تر از آن است که فکر می‌کنید! اگر قبلاً یکی ندارید، فقط [Node.js](https://nodejs.org) را نصب کنید و از پوشه پروژه خود `npx lite-server` را اجرا کنید. این فرمان مفید یک سرور محلی راه‌اندازی می‌کند و به‌طور خودکار برنامه شما را در مرورگر باز می‌کند. ### آماده‌سازی در کامپیوترتان، یک پوشه به نام `bank` بسازید و یک فایل با نام `index.html` داخل آن ایجاد کنید. ما از این [قالب اولیه](https://en.wikipedia.org/wiki/Boilerplate_code) HTML شروع خواهیم کرد: ```html Bank App ``` **این قالب اولیه چه چیزهایی فراهم می‌کند:** - **ساختار** سند HTML5 را با اعلان مناسب DOCTYPE برقرار می‌کند - **کدگذاری کاراکتر** را به UTF-8 برای پشتیبانی از متن‌های بین‌المللی تنظیم می‌کند - **طراحی ریسپانسیو** را با تگ متا viewport برای سازگاری موبایل فعال می‌کند - **عنوان توصیفی** که در تب مرورگر ظاهر می‌شود تنظیم می‌کند - **بخش بدنه** تمیزی ایجاد می‌کند که برای ساخت برنامه استفاده می‌شود > 📁 **پیش‌نمایش ساختار پروژه** > > **تا پایان این درس، پروژه شما شامل موارد زیر خواهد بود:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **وظایف فایل‌ها:** > - **index.html**: شامل همه قالب‌ها و ساختار برنامه > - **app.js**: مدیریت مسیرها، ناوبری و قالب‌ها > - **قالب‌ها**: تعریف رابط کاربری برای صفحه ورود، داشبورد و سایر صفحات --- ## قالب‌های HTML قالب‌ها یک مشکل اساسی در توسعه وب را حل می‌کنند. وقتی گوتنبرگ در دهه ۱۴۴۰ چاپ متحرک را اختراع کرد، متوجه شد به جای حکاکی کل صفحات، می‌تواند بلوک‌های قابل استفاده مجدد حروف بسازد و به صورت دلخواه بچیند. قالب‌های HTML بر همان اصل کار می‌کنند – به جای ایجاد فایل‌های HTML جداگانه برای هر صفحه، شما ساختارهای قابل استفاده مجددی تعریف می‌کنید که در صورت نیاز نمایش داده می‌شوند. ```mermaid flowchart TD A["📋 تعریف قالب"] --> B["💬 مخفی در DOM"] B --> C["🔍 جاوااسکریپت قالب را پیدا می‌کند"] C --> D["📋 کلون کردن محتوای قالب"] D --> E["🔗 الصاق به DOM قابل مشاهده"] E --> F["👁️ کاربر محتوا را می‌بیند"] G["قالب ورود"] --> A H["قالب داشبورد"] --> A I["قالب‌های آینده"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` قالب‌ها را مانند نقشه‌های یک طرح برای بخش‌های مختلف برنامه خود در نظر بگیرید. همان‌طور که یک معمار یک نقشه را می‌سازد و بارها استفاده می‌کند به جای اینکه اتاق‌های یکسان را دوباره ترسیم کند، ما نیز قالب‌ها را یک بار می‌سازیم و در صورت نیاز نمونه‌سازی می‌کنیم. مرورگر این قالب‌ها را مخفی نگه می‌دارد تا زمانی که جاوااسکریپت آنها را فعال کند. اگر می‌خواهید چند صفحه برای یک وب‌سایت بسازید، یک راه حل این است که برای هر صفحه یک فایل HTML جداگانه ایجاد کنید. اما این راه حل معایبی دارد: - باید هنگام جابجایی صفحه، کل HTML دوباره بارگذاری شود که ممکن است کند باشد. - به اشتراک گذاشتن داده بین صفحات مختلف دشوار است. رویکرد دیگر این است که تنها یک فایل HTML داشته باشید و چندین [قالب HTML](https://developer.mozilla.org/docs/Web/HTML/Element/template) با استفاده از عنصر `