ಸಾಫ್ಟ್ವೇರ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ನಲ್ಲಿ ಸ್ವಲ್ಪ ಅನುಭವವಿರುವ ಯಾರಾದರೂ ತಮ್ಮ ವೃತ್ತಿಜೀವನದ ಹಾದಿಯನ್ನು ಆಧರಿಸಿ ತೀರ್ಪು ನಿಯತಾಂಕಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಇತರರು ಬರೆದ ಸಾಫ್ಟ್ವೇರ್ ಕೋಡ್ ಅನ್ನು ನಿರ್ಣಯಿಸುತ್ತಾರೆ.
ನನ್ನ ವೃತ್ತಿಪರ ವೃತ್ತಿಜೀವನದ ಅವಧಿಯಲ್ಲಿ, ನಾನು ಅನೇಕ ಡೆವಲಪರ್ಗಳನ್ನು ತಿಳಿದಿದ್ದೇನೆ ಮತ್ತು ನಾನು ಸಾವಿರಾರು ಕೋಡ್ಗಳನ್ನು ನೋಡಿದ್ದೇನೆ ಮತ್ತು ಡೆವಲಪರ್ನ ಕೌಶಲ್ಯವನ್ನು ನಿರ್ಣಯಿಸಬೇಕಾದಾಗ ನಾನು ಮುಖ್ಯವಾಗಿ ಎರಡು ಅಂಶಗಳನ್ನು ನೋಡುತ್ತೇನೆ:
ಅದೃಷ್ಟವಶಾತ್, ಕೋಡಿಂಗ್ನಲ್ಲಿ ಉತ್ತಮವಾಗಿರಲು ಸುಲಭವಾಗುವಂತೆ ಕೆಲವು ಮೂಲಭೂತ ಅಥವಾ ತತ್ವಗಳಿವೆ.
SOLID ಎಂಬ ಸಂಕ್ಷಿಪ್ತ ರೂಪವನ್ನು ಸೂಚಿಸುತ್ತದೆ:
S: ಏಕ ಜವಾಬ್ದಾರಿಯ ತತ್ವ
O: ಮುಕ್ತ-ಮುಚ್ಚಿದ ತತ್ವ
L: ಲಿಸ್ಕೋವ್ ಬದಲಿ ತತ್ವ
I: ಇಂಟರ್ಫೇಸ್ ಪ್ರತ್ಯೇಕತೆಯ ತತ್ವ
D: ಅವಲಂಬನೆಗಳ ವಿಲೋಮ ತತ್ವ
ಮೊದಲ SOLID ತತ್ವವನ್ನು ಪರಿಶೀಲಿಸುವ ಮೂಲಕ ಪ್ರಾರಂಭಿಸೋಣ, ಅವುಗಳೆಂದರೆ
ಒಂದು ವರ್ಗ (ಅಥವಾ ಮಾಡ್ಯೂಲ್) ಬದಲಾಗಲು, ವಿಕಾಸಗೊಳ್ಳಲು ಒಂದೇ ಒಂದು ಕಾರಣವನ್ನು ಹೊಂದಿರಬೇಕು.
ಪರಿಕಲ್ಪನೆಯು ತುಂಬಾ ಸರಳವಾಗಿದೆ, ಆದರೆ ಈ ಸರಳತೆಯನ್ನು ಸಾಧಿಸಲು ಅನುಷ್ಠಾನದ ಮಾರ್ಗವು ತುಂಬಾ ಜಟಿಲವಾಗಿದೆ. ಒಂದು ವರ್ಗವು ಬದಲಾಗಲು ಒಂದೇ ಒಂದು ಕಾರಣವನ್ನು ಹೊಂದಿರಬೇಕು.
ಆದರೆ ಯಾಕೆ?
ಬದಲಾಯಿಸಲು ಒಂದೇ ಒಂದು ಕಾರಣವನ್ನು ಹೊಂದಿರುವುದು ಏಕೆ ಮುಖ್ಯ?
ಉದಾಹರಣೆಗೆ, ಬದಲಾಗಲು ಎರಡು ವಿಭಿನ್ನ ಕಾರಣಗಳಿದ್ದರೆ, ಎರಡು ವಿಭಿನ್ನ ಕಾರಣಗಳಿಗಾಗಿ ಎರಡು ವಿಭಿನ್ನ ತಂಡಗಳು ಒಂದೇ ಕೋಡ್ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸಬಹುದೆಂದು ಕಲ್ಪಿಸಬಹುದಾಗಿದೆ. ಪ್ರತಿಯೊಬ್ಬರೂ ತಮ್ಮದೇ ಆದ ಪರಿಹಾರವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾಗುತ್ತದೆ, ಇದು ಸಂಕಲಿಸಿದ ಭಾಷೆಯ ಸಂದರ್ಭದಲ್ಲಿ (ಉದಾಹರಣೆಗೆ ಸಿ ++, ಸಿ # ಅಥವಾ ಜಾವಾ) ಇತರ ತಂಡಗಳು ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್ನ ಇತರ ಭಾಗಗಳೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗದ ಮಾಡ್ಯೂಲ್ಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು.
ಇನ್ನೊಂದು ಉದಾಹರಣೆ, ನೀವು ವ್ಯಾಖ್ಯಾನಿಸಿದ ಭಾಷೆಯನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ, ಬೇರೆ ಬೇರೆ ಕಾರಣಗಳಿಗಾಗಿ ನೀವು ಒಂದೇ ವರ್ಗ ಅಥವಾ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಮರುಪರಿಶೀಲಿಸಬೇಕಾಗಬಹುದು. ಇದರರ್ಥ ಗುಣಮಟ್ಟದ ನಿಯಂತ್ರಣಕ್ಕಾಗಿ ಹೆಚ್ಚಿನ ಕೆಲಸ, ಸಮಯ ಮತ್ತು ಶ್ರಮ.
ಒಂದು ವರ್ಗ ಅಥವಾ ಮಾಡ್ಯೂಲ್ ಹೊಂದಿರಬೇಕಾದ ಒಂದು ವೈಶಿಷ್ಟ್ಯವನ್ನು ಗುರುತಿಸುವುದು ಪರೀಕ್ಷೆಗಳನ್ನು ನಡೆಸಲು ಪರಿಶೀಲನಾಪಟ್ಟಿ ನೋಡುವುದಕ್ಕಿಂತ ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗಿದೆ.
ಆದರೆ ಕಡಿಮೆ ತಾಂತ್ರಿಕ ದೃಷ್ಟಿಕೋನದಿಂದ ಯೋಚಿಸಲು ಪ್ರಯತ್ನಿಸೋಣ, ಅಂದರೆ, ನಮ್ಮ ವರ್ಗ ಅಥವಾ ಮಾಡ್ಯೂಲ್ನ ಬಳಕೆದಾರರನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಪ್ರಯತ್ನಿಸೋಣ, ಅದನ್ನು ಯಾರು ಬಳಸುತ್ತಾರೆ. ನಾವು ಯಾವಾಗಲೂ ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊಳ್ಳಬೇಕಾದ ಒಂದು ಮೂಲಭೂತ ಅಂಶವೆಂದರೆ, ನಿರ್ದಿಷ್ಟ ಮಾಡ್ಯೂಲ್ನಿಂದ ಸೇವೆ ಸಲ್ಲಿಸುವ ನಾವು ಅಭಿವೃದ್ಧಿಪಡಿಸುವ ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಸಿಸ್ಟಮ್ನ ಬಳಕೆದಾರರು ಅದರಲ್ಲಿ ಮಾರ್ಪಾಡುಗಳನ್ನು ಕೋರುವವರು. ಸೇವೆ ಸಲ್ಲಿಸಿದವರು ವರ್ಗ ಅಥವಾ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬದಲಾಯಿಸಲು ಕೇಳುತ್ತಾರೆ.
ಮಾಡ್ಯೂಲ್ಗಳ ಕೆಲವು ಉದಾಹರಣೆಗಳು ಮತ್ತು ಅವುಗಳ ಬಳಕೆ:
ಆದ್ದರಿಂದ ಮೊದಲ ಹೆಜ್ಜೆ ಮಾಡ್ಯೂಲ್ನೊಂದಿಗೆ ಇಂಟರ್ಲೋಕ್ಯೂಟರ್ ಪಾತ್ರವನ್ನು ಹೊಂದಿರುವ ನಟರನ್ನು ಅಥವಾ ನಟನನ್ನು ಹುಡುಕಿದರೆ, ಎಲ್ಲಾ ಪಾತ್ರಗಳೊಂದಿಗೆ ವ್ಯಕ್ತಿಗಳನ್ನು ಸಂಯೋಜಿಸುವುದು ಕಷ್ಟಕರವಾಗಿರುತ್ತದೆ. ಒಂದು ಸಣ್ಣ ಕಂಪನಿಯಲ್ಲಿ, ಒಬ್ಬ ವ್ಯಕ್ತಿಯು ಅನೇಕ ಪಾತ್ರಗಳನ್ನು ನಿರ್ವಹಿಸಬಹುದು ಮತ್ತು ದೊಡ್ಡ ಕಂಪನಿಯಲ್ಲಿ ಒಂದೇ ಪಾತ್ರವನ್ನು ಹೊಂದಿರುವ ಅನೇಕ ಜನರು ಇರಬಹುದು.
ಜನರು ಅಥವಾ ಬಳಕೆದಾರರಿಗಿಂತ ಪಾತ್ರಗಳನ್ನು ಗುರುತಿಸುವುದು ಹೆಚ್ಚು ಸಮಂಜಸವಾಗಿದೆ.
ಆದ್ದರಿಂದ:
ಕೆಲವು ಉದಾಹರಣೆಗಳನ್ನು ನೋಡೋಣ
ನಮ್ಮಲ್ಲಿ ಪುಸ್ತಕ ವರ್ಗವಿದೆ ಎಂದು ಭಾವಿಸೋಣ ಅದು ಪುಸ್ತಕದ ಪರಿಕಲ್ಪನೆಯನ್ನು ಮತ್ತು ಅದರ ಕ್ರಿಯಾತ್ಮಕತೆಯನ್ನು ಒಳಗೊಳ್ಳುತ್ತದೆ.
ವರ್ಗ ಪುಸ್ತಕ {
getTitle () ಕ್ರಿಯೆ {
ಹಿಂತಿರುಗಿ “ಒಂದು ದೊಡ್ಡ ಪುಸ್ತಕ”;
}
getAuthor () ಕ್ರಿಯೆ {
ಹಿಂತಿರುಗಿ “ಅಲೆಸ್ಸಾಂಡ್ರೊ ಬರಿಕೊ”;
}
ಮುಂದಿನ ಪುಟ () function
// ಮುಂದಿನ ಪುಟ
}
ಕಾರ್ಯ ಮುದ್ರಣ ಪ್ರಸ್ತುತ ಪುಟ () {
ಪ್ರತಿಧ್ವನಿ “ಪ್ರಸ್ತುತ ಪುಟದ ವಿಷಯ”;
}
}
ಇದು ತುಂಬಾ ಸಾಮಾನ್ಯ ವರ್ಗ. ನಮ್ಮಲ್ಲಿ ಪುಸ್ತಕವಿದೆ, ಮತ್ತು ವರ್ಗವು ನಮಗೆ ಶೀರ್ಷಿಕೆಯನ್ನು ನೀಡಬಹುದು, ಅವರು ನಮಗೆ ಲೇಖಕರನ್ನು ನೀಡಬಹುದು ಮತ್ತು ಅವರು ಮುಂದುವರಿಯಬಹುದು. ಅಂತಿಮವಾಗಿ, ಇದು ಪ್ರಸ್ತುತ ಪುಟವನ್ನು ಪರದೆಯ ಮೇಲೆ ಮುದ್ರಿಸುವ ಸಾಮರ್ಥ್ಯ ಹೊಂದಿದೆ.
ಆದಾಗ್ಯೂ, ಒಂದು ಸಣ್ಣ ಸಮಸ್ಯೆ ಇದೆ.
ಪುಸ್ತಕ ವಸ್ತುವಿನ ನಿರ್ವಹಣೆಯಲ್ಲಿ ತೊಡಗಿರುವ ನಟರ ಬಗ್ಗೆ ಯೋಚಿಸಿದರೆ, ಅವರು ಯಾರು ಆಗಿರಬಹುದು?
ನಾವು ಇಲ್ಲಿ ಎರಡು ವಿಭಿನ್ನ ನಟರ ಬಗ್ಗೆ ಸುಲಭವಾಗಿ ಯೋಚಿಸಬಹುದು: ಪುಸ್ತಕ ನಿರ್ವಹಣೆ (ಎಂದು ಗ್ರಂಥಪಾಲಕ) ಇ ಡೇಟಾ ಸಲ್ಲಿಕೆ ಕಾರ್ಯವಿಧಾನ (ನಾವು ಬಳಕೆದಾರರಿಗೆ ವಿಷಯವನ್ನು ಹೇಗೆ ತಲುಪಿಸಲು ಬಯಸುತ್ತೇವೆ: ಆನ್-ಸ್ಕ್ರೀನ್, ಗ್ರಾಫಿಕಲ್ ಯೂಸರ್ ಇಂಟರ್ಫೇಸ್, ಪಠ್ಯ-ಮಾತ್ರ ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್, ಬಹುಶಃ ಮುದ್ರಿಸಬಹುದು).
ಆದ್ದರಿಂದ ನಾವು ಎರಡು ವಿಭಿನ್ನ ನಟರನ್ನು ವರ್ಗದೊಂದಿಗೆ ಸಂವಹನ ಮಾಡುತ್ತಿದ್ದೇವೆ.
ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಹೇಳುವುದಾದರೆ, ಈ ವರ್ಗವು ಇದರ ನಡುವೆ ಬೆರೆಯುತ್ತದೆ:
ಇದು ಒಂದು ಸಮಸ್ಯೆಯಾಗಬಹುದು ಏಕೆಂದರೆ ಇದು ಏಕ ಹೊಣೆಗಾರಿಕೆ ತತ್ವವನ್ನು (ಎಸ್ಆರ್ಪಿ) ಉಲ್ಲಂಘಿಸುತ್ತದೆ.
ಒಂದೇ ಜವಾಬ್ದಾರಿಯ ತತ್ವವನ್ನು ಗೌರವಿಸಲು ನಾವು ಈ ಕೋಡ್ ಅನ್ನು ಹೇಗೆ ಸುಧಾರಿಸಬಹುದು?
ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ನೋಡೋಣ:
ವರ್ಗ ಪುಸ್ತಕ {
getTitle () ಕ್ರಿಯೆ {
ಹಿಂತಿರುಗಿ “ಓಷಿಯಾನೊ ಮೇರ್”;
}
getAuthor () ಕ್ರಿಯೆ {
ಹಿಂತಿರುಗಿ “ಅಲೆಸ್ಸಾಂಡ್ರೊ ಬರಿಕೊ”;
}
ಕಾರ್ಯ ತಿರುವು ಪುಟ () {
// ಮುಂದಿನ ಪುಟ
}
getCurrentPage () ಕ್ರಿಯೆ {
ಪ್ರತಿಧ್ವನಿ “ಪ್ರಸ್ತುತ ಪುಟದ ವಿಷಯ”;
}
}
ಇಂಟರ್ಫೇಸ್ ಪ್ರಿಂಟರ್ {
ಕಾರ್ಯ ಮುದ್ರಣ ಪುಟ ($ ಪುಟ);
}
ವರ್ಗ ಸ್ಟ್ಯಾಂಪಾಲಿಬ್ರೊ ಮುದ್ರಕವನ್ನು ಅಳವಡಿಸುತ್ತದೆ {
ಕಾರ್ಯ ಮುದ್ರಣ ಪುಟಗಳು ($ ಪುಟ) {
ಪ್ರತಿಧ್ವನಿ $ ಪುಟ;
}
}
ವರ್ಗ HtmlPrinter ಮುದ್ರಕವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ {
ಕಾರ್ಯ ಮುದ್ರಣ ಪುಟಗಳು ($ ಪುಟ) {
ಪ್ರತಿಧ್ವನಿ ' '. $ ಪುಟ. ' ';
}
}
ವ್ಯವಹಾರ ತರ್ಕದಿಂದ ಪ್ರಸ್ತುತಿಯನ್ನು ಹೇಗೆ ಬೇರ್ಪಡಿಸಬೇಕು ಎಂಬುದನ್ನು ಈ ಸರಳ ಉದಾಹರಣೆಯು ತೋರಿಸುತ್ತದೆ, ಮತ್ತು ಎಸ್ಆರ್ಪಿಗೆ ಅನುಸಾರವಾಗಿ ಇದು ನಮ್ಮ ಯೋಜನೆಯ ನಮ್ಯತೆಗೆ ಹೆಚ್ಚಿನ ಅನುಕೂಲಗಳನ್ನು ನೀಡುತ್ತದೆ.
ಇನ್ನೊಂದು ಉದಾಹರಣೆಯನ್ನು ನೋಡೋಣ:
ಮೇಲಿನದಕ್ಕೆ ಹೋಲುವ ಉದಾಹರಣೆಯೆಂದರೆ, ವಸ್ತುವೊಂದು ಪ್ರಸ್ತುತಿಯಿಂದ ತನ್ನನ್ನು ಉಳಿಸಿಕೊಳ್ಳಬಹುದು ಮತ್ತು ಹಿಂಪಡೆಯಬಹುದು.
ವರ್ಗ ಪುಸ್ತಕ {
getTitle () ಕ್ರಿಯೆ {
ಹಿಂತಿರುಗಿ “ಓಷಿಯಾನೊ ಮೇರ್”;
}
getAuthor () ಕ್ರಿಯೆ {
ಹಿಂತಿರುಗಿ “ಅಲೆಸ್ಸಾಂಡ್ರೊ ಬರಿಕೊ”;
}
ಕಾರ್ಯ ತಿರುವು ಪುಟ () {
// ಮುಂದಿನ ಪುಟ
}
getCurrentPage () ಕ್ರಿಯೆ {
"ಪ್ರಸ್ತುತ ಪುಟದ ವಿಷಯ" ಹಿಂತಿರುಗಿ;
}
ಕಾರ್ಯ ಉಳಿಸು () {
$ filename = '/ ದಾಖಲೆಗಳು /'. $ this-> getTitolo (). '-'. $ this-> getAuthor ();
file_put_contents ($ ಫೈಲ್ ಹೆಸರು, ಧಾರಾವಾಹಿ ($ ಇದು));
}
}
ಮೊದಲಿನಂತೆ, ಇಲ್ಲಿಯೂ ಸಹ ನಾವು ವಿಭಿನ್ನ ನಟರನ್ನು ಗುರುತಿಸಬಹುದು ಪುಸ್ತಕ ನಿರ್ವಹಣೆ (ಎಂದು ಗ್ರಂಥಪಾಲಕ) ಇ ನಿರಂತರತೆ. ನಾವು ಪುಟದಿಂದ ಪುಟಕ್ಕೆ ಚಲಿಸುವ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಲು ಬಯಸಿದಾಗ, ನಾವು ಈ ವರ್ಗವನ್ನು ಬದಲಾಯಿಸಬೇಕಾಗಿದೆ. ಬದಲಾವಣೆಗೆ ನಾವು ಹಲವಾರು ಕಾರಣಗಳನ್ನು ಹೊಂದಬಹುದು.
ವರ್ಗ ಪುಸ್ತಕ {
getTitle () ಕ್ರಿಯೆ {
ಹಿಂತಿರುಗಿ “ಓಷಿಯಾನೊ ಮೇರ್”;
}
getAuthor () ಕ್ರಿಯೆ {
ಹಿಂತಿರುಗಿ “ಅಲೆಸ್ಸಾಂಡ್ರೊ ಬರಿಕೊ”;
}
ಕಾರ್ಯ ತಿರುವು ಪುಟ () {
// ಮುಂದಿನ ಪುಟ
}
getCurrentPage () ಕ್ರಿಯೆ {
"ಪ್ರಸ್ತುತ ಪುಟದ ವಿಷಯ" ಹಿಂತಿರುಗಿ;
}
}
ವರ್ಗ ಸಿಂಪಲ್ಫೈಲ್ ಪರ್ಸಿಸ್ಟೆನ್ಸ್ {
ಫಂಕ್ಷನ್ ಸೇವ್ (ಪುಸ್ತಕ $ ಪುಸ್ತಕ) {
$ filename = '/ ದಾಖಲೆಗಳು /'. $ ಪುಸ್ತಕ-> ಗೆಟ್ಟೈಟಲ್ (). '-'. $ book-> getAuthor ();
file_put_contents ($ ಫೈಲ್ ಹೆಸರು, ಧಾರಾವಾಹಿ ($ ಪುಸ್ತಕ));
}
}
ನಿರಂತರ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಮತ್ತೊಂದು ವರ್ಗಕ್ಕೆ ಸರಿಸುವುದರಿಂದ ಜವಾಬ್ದಾರಿಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆ ಮತ್ತು ನಮ್ಮ ಪುಸ್ತಕ ವರ್ಗಕ್ಕೆ ಧಕ್ಕೆಯಾಗದಂತೆ ನಿರಂತರ ವಿಧಾನಗಳನ್ನು ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳಲು ನಾವು ಮುಕ್ತರಾಗುತ್ತೇವೆ. ಉದಾಹರಣೆಗೆ, ಡೇಟಾಬೇಸ್ ಪರ್ಸಿಸ್ಟೆನ್ಸ್ ವರ್ಗವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು ಕ್ಷುಲ್ಲಕವಾಗಿದೆ ಮತ್ತು ಪುಸ್ತಕ ಕಾರ್ಯಾಚರಣೆಗಳ ಸುತ್ತಲೂ ನಿರ್ಮಿಸಲಾದ ನಮ್ಮ ವ್ಯವಹಾರ ತರ್ಕವು ಬದಲಾಗುವುದಿಲ್ಲ.
ಓಪನ್ / ಕ್ಲೋಸ್ಡ್ -> ಎಂಬ ಎರಡನೇ ತತ್ವವನ್ನು ಓದುವ ಮೂಲಕ ಮುಂದುವರಿಸಿ
Ercole Palmeri
ಆಪಲ್ ವಿಷನ್ ಪ್ರೊ ಕಮರ್ಷಿಯಲ್ ವೀಕ್ಷಕವನ್ನು ಬಳಸಿಕೊಂಡು ನೇತ್ರದ ಶಸ್ತ್ರಚಿಕಿತ್ಸೆಯನ್ನು ಕ್ಯಾಟಾನಿಯಾ ಪಾಲಿಕ್ಲಿನಿಕ್ನಲ್ಲಿ ನಡೆಸಲಾಯಿತು…
ಬಣ್ಣಗಳ ಮೂಲಕ ಉತ್ತಮವಾದ ಮೋಟಾರು ಕೌಶಲ್ಯಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದು ಬರವಣಿಗೆಯಂತಹ ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಕೌಶಲ್ಯಗಳಿಗೆ ಮಕ್ಕಳನ್ನು ಸಿದ್ಧಪಡಿಸುತ್ತದೆ. ಬಣ್ಣ ಹಾಕಲು...
ನೌಕಾ ವಲಯವು ನಿಜವಾದ ಜಾಗತಿಕ ಆರ್ಥಿಕ ಶಕ್ತಿಯಾಗಿದೆ, ಇದು 150 ಶತಕೋಟಿ ಮಾರುಕಟ್ಟೆಯತ್ತ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿದೆ...
ಕಳೆದ ಸೋಮವಾರ, ಫೈನಾನ್ಶಿಯಲ್ ಟೈಮ್ಸ್ ಓಪನ್ ಎಐ ಜೊತೆ ಒಪ್ಪಂದವನ್ನು ಪ್ರಕಟಿಸಿತು. FT ತನ್ನ ವಿಶ್ವ ದರ್ಜೆಯ ಪತ್ರಿಕೋದ್ಯಮಕ್ಕೆ ಪರವಾನಗಿ ನೀಡುತ್ತದೆ…