התייעצות על שיטת העבודה בפרוייקט עם Java – MongoDB
שלום לכולם.
**אשמח אם אפשר לא לענות בזמן השבת , תודה**
**השאלות שלי הן בסוף אבל הקדמתי כדי שיהיה אפשר להבין מה הרקע)
יש לי כמה דילמות לגבי פרוייקט שאני מפתח והצורה שלסדר את התוכנה. קראתי וחקרתי על זה והגעתי לכמה מסקנות אך עדיין אני לא בטוח שזו הדרך הנכונה, והייתי שמח לדעת דברים שלא נעשו נכון, כדי שאדע לעשות refactor בשלב הזה ולא אח"כ.
בגדול זו תוכנה שאמורה להיות משחק אונליין של מולטי משתתפים, לא משחק כבד של 3D - משחק של אותיות וכיו"ב.
אני מתחיל בפיתוח מערכת מרובת משתתפים. כוונתי בזה גם שהמערכת תהיה כללית ותוכל לשמש אותי גם לפרוייקטים אחרות, ולDBS אחרים.
אני גם מתחיל לפתח ברמת הCore לCMD ואח"כ אפתח את זה בהתאם לפלטפורמה רצויה כגון Web/Mobile ועוד...
התוכנה ברמת השאילתות - אני לא חושב שהיא אמורה לעשות המון ולאחסן הרבה מידע ברמת המשתמשים וכאלה אבל ודאי שיהיה מידע לא מבוטל גם לכל משתמש כגון – נצחונות הפסדים נקודות, ובטח ברמת המערכת עצמה של הניהול משחקים ומידע וכיו"ב . אני חושב שהיחס בין הread to write הוא די שווה .
הדילמות שלי כרגע הם בעיקר ברמת הקשר עם הDB .
כדי שהמערכת תהיה מותאמת לשינוי DB בעתיד, אני מפתח בנפרד DBConnector שמכיל פונקציות ששולחות את השאילתות לDB , ואותם אני מכניס במערכת עצמה. ככה שבעתיד זה יהיה כמו API מסויים שרק צריך להתאים לו את הפונקציות המסויימות של הDB .
לא כל כך ידעתי אם לעשות את הconnector סטטי ובסוף החלטתי שכן, כי הוא מכיל פונקציות קבועות, של שירות, אני יודע שאולי אני טועה בזה.
כמו"כ קראתי במונגו שכדאי לעשות את הconnector סינגלטון, כדי לא ליצור הרבה pool , ושזה תומך בmulti threating .
Your instance of MongoClient (e.g. mongoClient above) will ordinarily be a singleton in your application.
https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-i
דבר נוסף שלא הייתי סגור עליו זה האם לגרום לתוכנה לפתוח connection שישאר פתוח כל הזמן או בכל שאילתא לDB לפתוח ולסגור.
בסוף החלטתי שבכל קריאה לDB תהיה פונקציה פנימית שיוצרת קשר לdata , מבוצעת השאילתא המסויימת , ונסגר הקשר . כמו לדוגמא בקובץ DBConnector שצירפתי בפונקציה-
createNewUser(String userName, String email, String password)
יצרתי איזה פונקציה שמייצרת singleTon של האובייקט הזה, אבל אח"כ הבנתי שלא עשיתי נכון כי הconnection מתייצר כל פעם מחדש. (ראה את הפונקציה DBConnector.connectDB ) .
השאלות שלי הם :
1- האם לעשות את הDBconnector סטטיק זה נכון, או הוא גם צריך להיות instance . (בכלל לחדד את העניין מתי צריך להיות סטטיק ומתי לא, כי גם על המערכת עצמה יש לי את הדילמה הזו) .
2- הדרך הנכונה לייעל את הזיכרון היא ליצור פתיחה וסגירה בכל שאילתא, ואם נגיד השיטה הזו תתבצע לעשות את ה MongoClient סינגלטון ? (כי חשבתי שאולי זה או זה או זה, ואם זה יהיה סינגלטון במקרה תיאורתי של כמה משתמשים משתמש אחד יפתח ואחר במקביל יפתח את הclient ואז אחד יסגור והפונקציה של השני לא תתבצע) .
3- או שאולי הדרך הנכונה זה לפתוח Connection שנשאר פתוח כל זמן שהתוכנה רצה, ובדרך הזאת לעשות אותו סינגלטון שלא נוצר כל פעם אחד חדש .
אני מצרף כאן 2 קבצים של הDbConnector ושל הSystem כדי להמחיש את השיטת עבודה שלי.
תודה מראש לכל העונים ,
ואשמח לתשובות עניניות
בבקשה אל תשלחו אותי לקורסים למדעי המחשב, כי זה פחות יעזור אני יודע שיש השלמת חומר שצריכה להעשות ואני יכול להבין רק דרך העשייה.
שבת שלום
DBConnector
https://www.jdoodle.com/a/kIh
MultiUsersSystem
https://www.jdoodle.com/a/kIi
שלום לכולם.
**אשמח אם אפשר לא לענות בזמן השבת , תודה**
**השאלות שלי הן בסוף אבל הקדמתי כדי שיהיה אפשר להבין מה הרקע)
יש לי כמה דילמות לגבי פרוייקט שאני מפתח והצורה שלסדר את התוכנה. קראתי וחקרתי על זה והגעתי לכמה מסקנות אך עדיין אני לא בטוח שזו הדרך הנכונה, והייתי שמח לדעת דברים שלא נעשו נכון, כדי שאדע לעשות refactor בשלב הזה ולא אח"כ.
בגדול זו תוכנה שאמורה להיות משחק אונליין של מולטי משתתפים, לא משחק כבד של 3D - משחק של אותיות וכיו"ב.
אני מתחיל בפיתוח מערכת מרובת משתתפים. כוונתי בזה גם שהמערכת תהיה כללית ותוכל לשמש אותי גם לפרוייקטים אחרות, ולDBS אחרים.
אני גם מתחיל לפתח ברמת הCore לCMD ואח"כ אפתח את זה בהתאם לפלטפורמה רצויה כגון Web/Mobile ועוד...
התוכנה ברמת השאילתות - אני לא חושב שהיא אמורה לעשות המון ולאחסן הרבה מידע ברמת המשתמשים וכאלה אבל ודאי שיהיה מידע לא מבוטל גם לכל משתמש כגון – נצחונות הפסדים נקודות, ובטח ברמת המערכת עצמה של הניהול משחקים ומידע וכיו"ב . אני חושב שהיחס בין הread to write הוא די שווה .
הדילמות שלי כרגע הם בעיקר ברמת הקשר עם הDB .
כדי שהמערכת תהיה מותאמת לשינוי DB בעתיד, אני מפתח בנפרד DBConnector שמכיל פונקציות ששולחות את השאילתות לDB , ואותם אני מכניס במערכת עצמה. ככה שבעתיד זה יהיה כמו API מסויים שרק צריך להתאים לו את הפונקציות המסויימות של הDB .
לא כל כך ידעתי אם לעשות את הconnector סטטי ובסוף החלטתי שכן, כי הוא מכיל פונקציות קבועות, של שירות, אני יודע שאולי אני טועה בזה.
כמו"כ קראתי במונגו שכדאי לעשות את הconnector סינגלטון, כדי לא ליצור הרבה pool , ושזה תומך בmulti threating .
Your instance of MongoClient (e.g. mongoClient above) will ordinarily be a singleton in your application.
https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-i
דבר נוסף שלא הייתי סגור עליו זה האם לגרום לתוכנה לפתוח connection שישאר פתוח כל הזמן או בכל שאילתא לDB לפתוח ולסגור.
בסוף החלטתי שבכל קריאה לDB תהיה פונקציה פנימית שיוצרת קשר לdata , מבוצעת השאילתא המסויימת , ונסגר הקשר . כמו לדוגמא בקובץ DBConnector שצירפתי בפונקציה-
createNewUser(String userName, String email, String password)
יצרתי איזה פונקציה שמייצרת singleTon של האובייקט הזה, אבל אח"כ הבנתי שלא עשיתי נכון כי הconnection מתייצר כל פעם מחדש. (ראה את הפונקציה DBConnector.connectDB ) .
השאלות שלי הם :
1- האם לעשות את הDBconnector סטטיק זה נכון, או הוא גם צריך להיות instance . (בכלל לחדד את העניין מתי צריך להיות סטטיק ומתי לא, כי גם על המערכת עצמה יש לי את הדילמה הזו) .
2- הדרך הנכונה לייעל את הזיכרון היא ליצור פתיחה וסגירה בכל שאילתא, ואם נגיד השיטה הזו תתבצע לעשות את ה MongoClient סינגלטון ? (כי חשבתי שאולי זה או זה או זה, ואם זה יהיה סינגלטון במקרה תיאורתי של כמה משתמשים משתמש אחד יפתח ואחר במקביל יפתח את הclient ואז אחד יסגור והפונקציה של השני לא תתבצע) .
3- או שאולי הדרך הנכונה זה לפתוח Connection שנשאר פתוח כל זמן שהתוכנה רצה, ובדרך הזאת לעשות אותו סינגלטון שלא נוצר כל פעם אחד חדש .
אני מצרף כאן 2 קבצים של הDbConnector ושל הSystem כדי להמחיש את השיטת עבודה שלי.
תודה מראש לכל העונים ,
ואשמח לתשובות עניניות
בבקשה אל תשלחו אותי לקורסים למדעי המחשב, כי זה פחות יעזור אני יודע שיש השלמת חומר שצריכה להעשות ואני יכול להבין רק דרך העשייה.
שבת שלום
DBConnector
https://www.jdoodle.com/a/kIh
MultiUsersSystem
https://www.jdoodle.com/a/kIi