فصل 3.5.
جداسازی مسیرهای برنامه (Isolating Application Routes)
در حالی که در حال بازسازی کد خود هستیم، یک تغییر دیگر هم ارزش انجام دادن دارد.
تابع main() ما شروع به شلوغ شدن کرده است، بنابراین برای اینکه آن را واضح و متمرکز نگه داریم، میخواهم اعلانهای مسیر برای برنامه را به یک فایل مستقل routes.go منتقل کنم، به این صورت:
$ touch cmd/web/routes.go
package main import "net/http" // The routes() method returns a servemux containing our application routes. func (app *application) routes() *http.ServeMux { mux := http.NewServeMux() fileServer := http.FileServer(http.Dir("./ui/static/")) mux.Handle("GET /static/", http.StripPrefix("/static", fileServer)) mux.HandleFunc("GET /{$}", app.home) mux.HandleFunc("GET /snippet/view/{id}", app.snippetView) mux.HandleFunc("GET /snippet/create", app.snippetCreate) mux.HandleFunc("POST /snippet/create", app.snippetCreatePost) return mux }
سپس میتوانیم فایل main.go را به این صورت بهروزرسانی کنیم:
package main ... func main() { addr := flag.String("addr", ":4000", "HTTP network address") flag.Parse() logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) app := &application{ logger: logger, } logger.Info("starting server", "addr", *addr) // Call the new app.routes() method to get the servemux containing our routes, // and pass that to http.ListenAndServe(). err := http.ListenAndServe(*addr, app.routes()) logger.Error(err.Error()) os.Exit(1) }
این بسیار مرتبتر است. مسیرهای برنامه ما اکنون در متد app.routes() جدا و کپسوله شدهاند و مسئولیتهای تابع main() ما محدود به موارد زیر است:
- تجزیه تنظیمات پیکربندی زمان اجرا (Runtime Configuration Settings) برای برنامه؛
- ایجاد وابستگیها (Dependencies) برای هندلرها؛ و
- اجرای سرور HTTP (HTTP Server).
واژهنامه اصطلاحات فنی
| اصطلاح فارسی | معادل انگلیسی | توضیح |
|---|---|---|
| جداسازی مسیرهای برنامه | Isolating Application Routes | فرآیند جداسازی و سازماندهی مسیرهای برنامه در یک فایل مستقل |
| مسیرهای برنامه | Application Routes | تعاریف مسیرهای HTTP و هندلرهای مرتبط با آنها |
| تنظیمات پیکربندی زمان اجرا | Runtime Configuration Settings | تنظیمات برنامه که در زمان اجرا قابل تغییر هستند |
| وابستگیها | Dependencies | اجزای مورد نیاز برنامه مانند لاگرها و اتصالات پایگاه داده |
| سرور HTTP | HTTP Server | برنامهای که درخواستهای HTTP را دریافت و پردازش میکند |
| کپسولهسازی | Encapsulation | مخفی کردن جزئیات پیادهسازی و ارائه یک رابط مشخص |
| مسئولیتها | Responsibilities | وظایف و کارهایی که هر بخش از کد انجام میدهد |
| فایل مستقل | Independent File | فایلی که مسئولیت مشخص و مستقلی دارد |
| هندلر | Handler | تابع یا متدی که درخواستهای HTTP را پردازش میکند |
| سرور فایل | File Server | سیستمی که فایلهای استاتیک را به مرورگر ارائه میدهد |