ಒಂದು ದಿನವನ್ನು ಯಾವುದು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ?
ಹೊಸ ಫೀಚರ್ಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ ಪ್ರೋಗ್ರಾಮರ್ಗಳು ಹೆಚ್ಚಾಗಿ ತಪ್ಪು ವಿಷಯಗಳ ಮೇಲೆ ಗಮನ ಹರಿಸುತ್ತಾರೆ.
ನೀವು ಬ್ಯಾಕೆಂಡ್ ಡೇಟಾ, ಕೋಡ್ ಡೂಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಪರ್ಫಾರ್ಮೆನ್ಸ್ ಬಗ್ಗೆ ಯೋಚಿಸಬಹುದು. ಈ ಪ್ರಶ್ನೆಗಳು ಮುಖ್ಯವಾಗಿವೆ. ಆದರೆ ಅವು ಅತ್ಯಂತ ಪ್ರಮುಖವಾದ ಪ್ರಶ್ನೆಗಳಲ್ಲ.
ನಾನು ಆಗಾಗ್ಗೆ ಈ ತಪ್ಪನ್ನು ಮಾಡಿಕೊಳ್ಳುತ್ತೇನೆ. ಸ್ಮಾರ್ಟ್ ಪ್ಯಾಟರ್ನ್ಗಳು ಮತ್ತು ಕ್ಲೀನ್ ಕೋಡ್ ಬಗ್ಗೆ ನಾನು ಉತ್ಸುಕನಾಗುತ್ತೇನೆ. ಬಳಕೆದಾರರು ಆ ಫೀಚರ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುತ್ತಾರೆ ಎಂಬುದು ನನಗೆ ಸಂಪೂರ್ಣವಾಗಿ ಅರ್ಥವಾಗುವ ಮೊದಲೇ ನಾನು ಕೋಡಿಂಗ್ ಮಾಡಲು ಪ್ರಾರಂಭಿಸುತ್ತೇನೆ. ನಂತರ ನನ್ನ ಕೋಡ್ ವ್ಯವಹಾರದ ಗುರಿಯೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತಿಲ್ಲ ಎಂಬುದು ನನಗೆ ಅರಿವಾಗುತ್ತದೆ.
ಕ್ಯಾಲೆಂಡರ್ ಆಪ್ ಅನ್ನು ಒಂದು ಉದಾಹರಣೆಯಾಗಿ ತೆಗೆದುಕೊಳ್ಳಿ.
ಒಬ್ಬ ಬಳಕೆದಾರ ರಜಾದಿನವನ್ನು ಗುರುತಿಸಲು ಮಾರ್ಚ್ 1 ರಂದು ಕ್ಲಿಕ್ ಮಾಡುತ್ತಾರೆ. ಆದರೆ ಆಪ್ ಬದಲಾಗಿ ಫೆಬ್ರವರಿ 28 ರಂದು ಗುರುತಿಸುತ್ತದೆ. ಇದು ಟೈಮ್ಜೋನ್ ಕಾರಣದಿಂದ ಸಂಭವಿಸುತ್ತದೆ.
ಡೆವಲಪರ್ ಒಂದು Date object ಅನ್ನು ಬಳಸಿದ್ದಾರೆ. Date object ಎಂಬುದು ಸಮಯದ ಒಂದು ನಿರ್ದಿಷ್ಟ ಕ್ಷಣವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.
ಟೋಕಿಯೊದಲ್ಲಿ, ಮಧ್ಯರಾತ್ರಿಯ ಮಾರ್ಚ್ 1 ರ ಸಮಯವು ಲಂಡನ್ನಲ್ಲಿ ಇನ್ನೂ ಫೆಬ್ರವರಿ 28 ರೇ ಆಗಿರುತ್ತದೆ. ನಿಮ್ಮ ಕೋಡ್ ದಿನಾಂಕವನ್ನು ಉಳಿಸಲು UTC ವಿಧಾನಗಳನ್ನು ಬಳಸಿದರೆ, ದಿನ ಬದಲಾಗುತ್ತದೆ.
ತಾಂತ್ರಿಕ ಅನುಷ್ಠಾನವು ವ್ಯವಹಾರದ ತರ್ಕಕ್ಕೆ ವಿರುದ್ಧವಾಗಿರುವುದರಿಂದ ಈ ಬಗ್ ಉಂಟಾಗುತ್ತದೆ.
ಬಳಕೆದಾರರು ದಿನಗಳ ಬಗ್ಗೆ ಯೋಚಿಸುತ್ತಾರೆ. ಬಳಕೆದಾರರು UTC ಆಫ್ಸೆಟ್ಗಳು ಅಥವಾ ಮಿಲಿಸೆಕೆಂಡ್ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ಗಳ ಬಗ್ಗೆ ಯೋಚಿಸುವುದಿಲ್ಲ. ಅವರು ಯೋಚಿಸುವುದು: "ನನಗೆ ಮಾರ್ಚ್ 14 ಬೇಕು" ಎಂದು.
ನಿಮ್ಮ ಕೋಡ್ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿರಬೇಕೆಂದರೆ, ನೀವು ಡೊಮೇನ್ ಅನ್ನು ಸರಿಯಾಗಿ ಮಾಡೆಲ್ ಮಾಡಬೇಕು.
ಕಾಗದದ ಕ್ಯಾಲೆಂಡರ್ನಲ್ಲಿ, ದಿನಾಂಕ ಎಂದರೆ ಕೇವಲ ವರ್ಷ, ತಿಂಗಳು ಮತ್ತು ದಿನ. ಅದಕ್ಕೆ ಯಾವುದೇ ಟೈಮ್ಜೋನ್ ಇರುವುದಿಲ್ಲ.
UTC ಅಥವಾ ಸ್ಥಳೀಯ ಸಮಯದೊಂದಿಗೆ ಸ್ಥಿರತೆಯನ್ನು ಕಾಪಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ ನೀವು ಈ ಬಗ್ ಅನ್ನು ಸರಿಪಡಿಸಬಹುದು. ಆದರೆ ಅದು ಕೇವಲ ತಾತ್ಕಾಲಿಕ ಪರಿಹಾರವಷ್ಟೇ. ವಿಫಲವಾಗದ ಡೇಟಾ ಸ್ಟ್ರಕ್ಚರ್ಗಳನ್ನು ಬಳಸುವುದು ಉತ್ತಮ ಮಾರ್ಗವಾಗಿದೆ.
Date object ಬದಲಿಗೆ, ಒಂದು ಕಸ್ಟಮ್ ಆಬ್ಜೆಕ್ಟ್ ಬಳಸಿ:
• ವರ್ಷ: 2026 • ತಿಂಗಳು: ಮಾರ್ಚ್ • ದಿನ: 1
ಇದು ಸಮೀಕರಣದಿಂದ ಸಮಯ ಮತ್ತು ಟೈಮ್ಜೋನ್ಗಳನ್ನು ಹೊರಗಿಡುತ್ತದೆ. ಇದು ಬಗ್ ಸಂಭವಿಸುವುದನ್ನು ಅಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ.
ಹೌದು, ಇದಕ್ಕೆ ಹೆಚ್ಚಿನ ಕೆಲಸ ಬೇಕಾಗುತ್ತದೆ. ದಿನಾಂಕಗಳನ್ನು ಹೋಲಿಸಲು ಅಥವಾ ತಿಂಗಳ ಅಂತ್ಯವನ್ನು ಕಂಡುಹಿಡಿಯಲು ನೀವು ಯುಟಿಲಿಟಿಗಳನ್ನು ಬರೆಯಬೇಕಾಗುತ್ತದೆ. ನೀವು ডেಡ್ಲೈನ್ಗಳು ಮತ್ತು ಸ್ಪ್ರಿಂಟ್ಗಳ ಬಗ್ಗೆ ಚಿಂತಿಸಬೇಕಾಗುತ್ತದೆ.
ಆದರೆ ಡೊಮೇನ್ ಅನ್ನು ಸರಿಯಾಗಿ ಮಾಡೆಲ್ ಮಾಡುವುದು ನಿಮ್ಮನ್ನು ಮುಂದೆ ಸಿಟ್ಟಾದ ಸಪೋರ್ಟ್ ಟಿಕೆಟ್ಗಳು ಮತ್ತು ಗಂಟೆಗಟ್ಟಲೆ ಡಿಬಗ್ ಮಾಡುವಿಕೆಯಿಂದ ಉಳಿಸುತ್ತದೆ.
ಎರಿಕ್ ಎವಾನ್ಸ್ ಅವರು Domain-Driven Design ನಲ್ಲಿ ಹೇಳುವಂತೆ:
"ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಸಂವಹನ ನಡೆಸಲು, ಅಗತ್ಯತೆಗಳನ್ನು ಬರೆಯಲು ಬಳಸಿದ ಅದೇ ಭಾಷೆಯ ಮೇಲೆ ಕೋಡ್ ಆಧಾರಿತವಾಗಿರಬೇಕು."
ಕೇವಲ ಪ್ರೋಗ್ರಾಮರ್ ಆಗ
