ಡೆವ್ ಲಾಗ್: ಡ್ರೈವರ್ ಸೀಮ್ಸ್, URL ಬಗ್‌ಗಳು ಮತ್ತು DB ಸೆಟ್ಟಿಂಗ್‌ಗಳು

ನಾನು ಇಡೀ ದಿನವನ್ನು ಒಂದು ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ನಿರ್ಮಿಸಲು ಕಳೆದೆ. ಒಂದು ವಾಸ್ತುಶಿಲ್ಪದ (architectural) ಕಲ್ಪನೆಯು ಪದೇ ಪದೇ ಎದುರಾಯಿತು. ನೀವು ಮಾಡುವ ಕೆಲಸ ಮತ್ತು ನೀವು ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವ ಸ್ಥಳದ ನಡುವೆ ಒಂದು ಸೀಮ್ (seam) ಇರಲೇಬೇಕು.

ಇದು ನಿಮ್ಮ ಮುಖ್ಯ ಕೋಡ್ ಅನ್ನು ಬದಲಾಯಿಸದೆ, ನಂತರ ನಿಮ್ಮ ಬ್ಯಾಕೆಂಡ್ ಅನ್ನು ಬದಲಾಯಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.

ಸೀಮ್‌ಗಳ ಮಾದರಿ (The Pattern of Seams)

ನಾನು ಒಂದು ಅಬ್ಸರ್ವೇಬಿಲಿಟಿ (observability) ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಅನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದೇನೆ. ಇದು ಅನೇಕ ಮೂಲಗಳಿಂದ ದೋಷಗಳು (errors) ಮತ್ತು ಮೆಟ್ರಿಕ್ಸ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಪ್ರತಿಯೊಂದು ಸ್ಟೋರೇಜ್ ಕಾರ್ಯವು ಒಂದೇ ಮಾದರಿಯನ್ನು ಅನುಸರಿಸಿತು:

• ಒಂದು ಸಣ್ಣ ಇಂಟರ್ಫೇಸ್ (interface - ಒಪ್ಪಂದ) ರಚಿಸಿ. • ಒಂದು Eloquent ಡ್ರೈವರ್ (Eloquent driver - ಅನುಷ್ಠಾನ) ರಚಿಸಿ.

ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳು ಮತ್ತು ಪೈಪ್‌ಲೈನ್‌ಗಳು ಕೇವಲ ಇಂಟರ್ಫೇಸ್ ಜೊತೆ ಮಾತ್ರ ಸಂವಹನ ನಡೆಸುತ್ತವೆ. ನಾನು ಸದ್ಯಕ್ಕೆ Postgres ಬಳಸುತ್ತಿದ್ದೇನೆ ಏಕೆಂದರೆ ಅದು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿದೆ. ನನಗೆ ನಂತರ ವೇಗವಾದ ಡೇಟಾಬೇಸ್ ಬೇಕಾದಲ್ಲಿ, ನಾನು ಕೇವಲ ಹೊಸ ಡ್ರೈವರ್ ಅನ್ನು ಬರೆಯುತ್ತೇನೆ. ನಾನು ನನ್ನ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ಕೋಡ್ ಅನ್ನು ಬದಲಾಯಿಸುವುದಿಲ್ಲ.

ಪಾಠ ಸರಳವಾಗಿದೆ: ಮೊದಲ ದಿನವೇ ನಿಮಗೆ ಎರಡನೇ ಡ್ರೈವರ್ ಅಗತ್ಯವಿಲ್ಲ. ಮೊದಲ ದಿನವೇ ನಿಮಗೆ ಇಂಟರ್ಫೇಸ್ ಅಗತ್ಯವಿದೆ. ಈಗ ಒಂದು ಹೆಚ್ಚುವರಿ ಫೈಲ್ ಮಾಡಿಕೊಳ್ಳುವುದು, ಮುಂದೆ ದೊಡ್ಡ ಮಟ್ಟದ ಮರು-ಬರಹವನ್ನು (rewrite) ತಪ್ಪಿಸುತ್ತದೆ.

ಮೂರು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು

• ಡ್ಯುಯಲ್ ಐಡೆಂಟಿಫೈಯರ್‌ಗಳನ್ನು ಬಳಸಿ. ವೇಗವಾದ ಇಂಟರ್ನಲ್ ಜಾಯಿನ್‌ಗಳಿಗಾಗಿ (internal joins) ಆಟೋ-ಇನ್‌ಕ್ರಿಮೆಂಟ್ IDಗಳನ್ನು ಬಳಸಿ. URL ಅಥವಾ APIಗಳಂತಹ ನಿಮ್ಮ ಸಿಸ್ಟಮ್‌ನಿಂದ ಹೊರಗೆ ಹೋಗುವ ಯಾವುದೇ ವಿಷಯಕ್ಕಾಗಿ UUIDಗಳನ್ನು ಬಳಸಿ. ಇದು ನಿಮ್ಮ ರೋ ಕೌಂಟ್‌ಗಳನ್ನು (row counts) ಗೌಪ್ಯವಾಗಿಡುತ್ತದೆ.

• Enums ಬಳಸಿ. ಪಾತ್ರಗಳು (roles) ಮತ್ತು ಸ್ಥಿತಿಗಳನ್ನು (statuses) PHP enums ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ. ಇದು ನಿಮ್ಮ UI ಮತ್ತು ನಿಮ್ಮ ಲಾಜಿಕ್ ಒಂದೇ ಮೂಲವನ್ನು (source of truth) ಬಳಸುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.

• ನಿಮ್ಮ ಡೇಟಾವನ್ನು ವರ್ಷನ್ (version) ಮಾಡಿ. ನಿಮ್ಮ ಪೇಲೋಡ್‌ಗಳಲ್ಲಿ (payloads) ಯಾವಾಗಲೂ ವರ್ಷನ್ ಫೀಲ್ಡ್ ಅನ್ನು ಸೇರಿಸಿ. ಹೊಸ ಐಚ್ಛಿಕ ಫೀಲ್ಡ್‌ಗಳನ್ನು ಸೇರಿಸಿ, ಆದರೆ ಹಳೆಯವುಗಳನ್ನು ಎಂದಿಗೂ ಮರುನಾಮಕರಣ ಮಾಡಬೇಡಿ ಅಥವಾ ತೆಗೆದುಹಾಕಬೇಡಿ. ಇದು ಹಳೆಯ ಕ್ಲೈಂಟ್‌ಗಳು ಕೆಲಸ ಮಾಡದಂತೆ ತಡೆಯುತ್ತದೆ.

ಟ್ರ್ಯಾಕಿಂಗ್ URL ಬಗ್

ನಾನು ಇಮೇಲ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿ ಒಂದು ಬಗ್ ಅನ್ನು ಕಂಡುಕೊಂಡೆ. ಕ್ಲಿಕ್‌ಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಈ ಪ್ಯಾಕೇಜ್ ಲಿಂಕ್‌ಗಳನ್ನು ಮರುಬರೆಯುತ್ತದೆ. ಇದು URL ಅನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ನಂತರ ರಿಡೈರೆಕ್ಟ್ ಮಾಡುವಾಗ ಅದನ್ನು ಮರುಸ್ಥಾಪಿಸುತ್ತದೆ.

ಸಮಸ್ಯೆ: Laravel ಇಮೇಲ್ ಟೆಂಪ್ಲೇಟ್‌ಗಳಲ್ಲಿ ಲಿಂಕ್‌ಗಳನ್ನು HTML-escape ಮಾಡುತ್ತದೆ. ಸೈನ್ ಮಾಡಿದ (signed) URL "&" ಅಕ್ಷರಗಳನ್ನು ಬಳಸುತ್ತದೆ. HTML ನಲ್ಲಿ, ಇವು "&" ಆಗುತ್ತವೆ.

ನೀವು ಎಸ್ಕೇಪ್ ಮಾಡಿದ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿದರೆ, "&" URL ನಲ್ಲಿ ಉಳಿಯುತ್ತದೆ. Laravel ಸಹಿಯನ್ನು (signature) ವ್ಯಾಲಿಡೇಟ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿದಾಗ, ಸ್ಟ್ರಿಂಗ್ ಬದಲಾಗಿರುವುದರಿಂದ ಅದು ವಿಫಲವಾಗುತ್ತದೆ. ಇದು ಕೇವಲ ಸೈನ್ ಮಾಡಿದ URLಗಳಿಗೆ ಮಾತ್ರ ಸಂಭವಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಇದನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಕಷ್ಟ.

ಪರಿಹಾರ: ನೀವು URL ಅನ್ನು ಕ್ಯಾಪ್ಚರ್ ಮಾಡುವ ಮೊದಲು HTML ಎಂಟಿಟಿಗಳನ್ನು (entities) ಡಿಕೋಡ್ ಮಾಡಿ.

ಕಾನ್ಫಿಗರೇಶನ್‌ಗಾಗಿ ಡೇಟಾಬೇಸ್ ಬಳಸುವುದು

ಅಡ್ಮಿನ್‌ಗಳು ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ನಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ನಾನು ಒಂದು ಮಾರ್ಗವನ್ನು ನಿರ್ಮಿಸಿದೆ. ಈ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿರುತ್ತವೆ, ಆದರೆ ಅಪ್ಲಿಕೇಶನ್ ಇನ್ನೂ ಅವುಗಳನ್ನು ಸ್ಟ್ಯಾಂಡರ್ಡ್ config() ಫಂಕ್ಷನ್ ಬಳಸಿ ಓದುತ್ತದೆ.

ನಾನು AppServiceProvider ನಲ್ಲಿ ಒಂದು ಸಣ್ಣ ಓವರ್‌ಲೇ (overlay) ಬಳಸುತ್ತೇನೆ. ಇದು ಡೇಟಾಬೇಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಪ್ರಸ್ತುತ ವಿನಂತಿಗಾಗಿ (current request) ಅವುಗಳನ್ನು config ಗೆ ತಳ್ಳುತ್ತದೆ. ಇದು ಉಳಿದ ಕೋಡ್ ಅನ್ನು ಸರಳವಾಗಿ ಮತ್ತು ಪ್ರಮಾಣಿತವಾಗಿಡುತ್ತದೆ.

ಇಲ್ಲಿನ ಸಾಮಾನ್ಯ ವಿಷಯವೆಂದರೆ ಗಡಿಗಳು (boundaries). ಸೀಮ್ ಎಲ್ಲಿರಬೇಕು ಎಂದು ನಿರ್ಧರಿಸಿ. ಗಡಿಯನ್ನು ಒಮ್ಮೆ ಸರಿಯಾದ ಸ್ಥಳದಲ್ಲಿ ಇರಿಸಿ. ಉಳಿದೆಲ್ಲವೂ ಸರಳವಾಗಿರುತ್ತದೆ.

ಮೂಲ (Source): https://dev.to/nasrulhazim/dev-log-2026-06-25-driver-seams-everywhere-a-tracking-url-bug-and-db-backed-settings-442l