גישה לבסיס נתונים - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

גישה לבסיס נתונים


sharpsharp

Recommended Posts

קודם כל תודה על התשובה.

1. האם ה PersonController שלך פונה ישירות ל PersonDataAccessor? או שיש משהו באמצע?

שאני מניח ש PersonController זה מה שמבצע רת הלוגיקה של ה View המתאים שמציג את נתוני ה person ב GUI.

2. מה קורה במידה ויש לי כל מיני מידע של Person שנמצא במקום אחר למשל יש לי מידע שנמצא בסיס הנתונים שקשור ל Person ויש גם מידע שקשור לוגית לנתוני Person אך נמצא ב XML. מה אתה עודה במקרה כזה אילו מחלקות יש לך? האם יש לך PersonXMLDataAccessor ו PersonDBDataAccessor ויש לך PersonDataAccessor שמצביע על שניהם וחושף את ה API המשותך להם?

3. אני מתכוון שעבור כל טבלה ב DB יהיהDataAccessor למשל PersonDataAccessor וגם OrderDataAccessor (מחזיר את אובייקט הזמנות, אפשר גם של לקוח מסויים). האם כדאי מהניסיון שלך ליצור API משותף לכולם גם ל PersonDataAccessor וגם ל OrderDataAccessor זאת אומרת שיהיה לי איזה מחלקה נוספת שתחזיק מצביע לשניהם? או לפחות תעשה delagate לפונקציות שלהם. במקום להכיר הרבה DataAccessor ?

קישור לתוכן
שתף באתרים אחרים

1. כן. ה- PersonController יפנה ישירות ל- DAL. כמובן שזה לא תורה מסיני, ואתה יכול להוסיף עוד שכבה באמצע. הכל תלוי בצרכים, בגודל המערכת וכו'. אני מעדיף לא להרבות בשכבות כי בסופו של דבר בשביל להביא נתון ל- UI אתה צריך לכתוב 5 שכבות שכל אחת פשוט מגלגלת נתונים הלאה. נסה לתכנן מראש לפי הצרכים והמורכבות של המערכת. תעבור על כל מודול ותנסה לפרוט אותו למשימות קטנות. תנסה להבין לפי זה כמה שכבות אתה צריך.

אתה גם יכול להתחיל לפתח, ואם תבין במהלך הדרך שצריך עוד שכבה, אז תוסיף אותה. כמובן שזה יהיה קצת יותר מורכב מאשר בהתחלה, אבל זה אפשרי.

2. גם כאן יש כמה אפשרויות.

1) תגדיר Person אחד שיכיל את כל הנתונים, ובמקרה הזה או שה- BL שלך יבצע שליפה משתי מקורות נתונים: DAL ו- XML וה- BL יאחד אותם ל- person אחד. או שה- DAL יבצע איחוד של הנתונים.

2) תגדיר Person ו- PersonDetails שאחד יגיע מה DAL ואחד יגיע מ- xml dal כלשהו.

שוב, אין פה שאלה של נכון לא נכון. זה מאוד תלוי בצרכי המערכת. יכול להיות שתתחיל בשיטה מסויימת, ואח"כ יתברר לך שבגלל צרכים כלשהם אתה חייב שיטה אחרת (זה קרה לי הרבה פעמים). אין ברירה, ככה זה בפיתוח מערכות חדשות.

3. לפי מה שאתה אומר, יהיה לך בעצם סוג של factory שיחזיר לך את ה- DAL המתאים? זאת אופציה. תבצע את זה כמו שאמרת בהתחלה עם interfaces. יכול להיות שיהיה לך גם base class לכל ה- DAL classes (אפילו רצוי, כי יהיה להם מבנה קבוע).

קישור לתוכן
שתף באתרים אחרים

תודה על התשובות.

לגבי השאלה השלישית ששאלתי, ענית כי:

" יהיה לך בעצם סוג של factory שיחזיר לך את ה- DAL המתאים? זאת אופציה. תבצע את זה כמו שאמרת בהתחלה עם interfaces. יכול להיות שיהיה לך גם base class לכל ה- DAL classes (אפילו רצוי, כי יהיה להם מבנה קבוע)."

1. השאלה האם זה רצוי או שכדאי שכל Controller יחיז את חלק מה DAL המתאים לו.

למשל Person Controller יחזיק את PersonDataAccessor?

או כמו שהצעתי וענית ליצור factory שיחיזר את ה DAL המתאים ואני אפנה אליו.?

2. במידה ואני צריך להוסיף גישה ל wcf services כדי להביא נתונים מסויימים. מה היית ממליץ?

חשבתי על הדבר הבא: (לשם הדוגמא בו נאמר שיש לי services שאני נותן לו שם לקוח והוא מחזיר לי את מספר הטלפון שלומ service של 144 - סתם לשם הששאלה)

ליצור PersonContactService שנגש ומביא את במידע המתאים (מקבלת שם ומחזיר מספר טלפון).

חשבתי להוסיף שכבת service משלי שתאגד את PersonContactService ואת כל הגישות ל DB ככה שזה יהיה שקוף לשאר המתכנתים. כלומר כולם פונים בצורה הבאה:

service.getPhoneByName כאן מתבצעת גישה ל service

service.getPersonByID כאן מתבצעת גישה ל DB

ומה Controller אני אגש לרק לשכבת ה service שהוא יתן לי גישה לכל שאר גסרים DAL , Services וכו...

מה אתה אומר?

קישור לתוכן
שתף באתרים אחרים

קטונתי בהשוואה לחברה פה.

אני רק עכשיו מתחיל להתעסק עם מסדי נתונים בגישה מרוחקת.

למעשה הפרוייקט שלך נשמע ממש דומה לפרוייקט שאני צריך לעשות אבל עוד לא החלטתי איך לממש אותו.

אם היה לי זמן הייתי לומד C# אבל אין לי שום נסיון איתה ויש לי 3 חודשים ליישם את המערכת.

קישור לתוכן
שתף באתרים אחרים

שמח שהדיון מעניין. כבר חשבתי שאנחנו מתכתבים פה לבד :)

1. לא נראה לי שהייתי מחזיק את ה- DAL בתוך כל controller, אלא יוצר אותו כשאני צריך משתמש וזורק. מה גם ש controller אחד ישתמש בהרבה data accessors.

לדוגמא, אתה צריך לשלוף נתוני person. יכול להיות שתרצה ש person יחזיק עליו PersonStatus, PersonEmailAddresses[] a. ה- controller שיחזיר person יצטרך לבנות אותו ע"י פניה לכמה data accessors (ופניה לכמה טבלאות - טבלת person statuses , person email addresses וכו') פה גם אתה נכנס לעניינים של caching. טבלאות כמו person statuses שמשתנות פעם בשנה צריכות לשבת ב- caching כלשהו.

2. אתה בעצם מוסיף עוד שכבה שתבצע עטיפה של ה- DAL או ה- wcf service. זה אפשרי. אני כן הייתי מפריד. לדעתי עדיף שהמתכנת יידע שהוא פונה ל service או פונה ל DB. פניות ל- service בד"כ יותר יקרות יש יותר סיכוי ש- service יהיה למטה. עדיף שמתכנת יבין את המשמעות שהוא כרגע פונה ל service ולא ל- DB שנמצא קרוב אליו מבחינת network. שוב, אני לא פוסל את השיטה שלך, גם היא אפשרית, לכל צד יש יתרונות וחסרונות. מצד אחד אצלך זה יותר אחיד ושקוף למפתח ונותן לו ממשק אחיד לקבלת נתונים, מצד שני, לא תמיד יש לו מושג שהוא פונה ל service שהזמינות שלו אולי יותר נמוכה לעומת DB פרטי של האפליקציה.

קישור לתוכן
שתף באתרים אחרים

כשאני מדבר על ה DAL שם יהיו הרבה מחלקות שנגשות לטבאלות שב DB.

PesronDataAccessor, OrderDataAccessor וכו..

1. זאת אומרת לא היית מחזיק ב PersonController את PersonDataAccessor?

אם כן שוב איך אצלך זה היה נראה וישב בארכיטקטורה?

2.לא הבנתי מה זה משתמש וזורק?

3. ואיפה בדיוק היית משתמש caching? איך זה מתבטא בקוד? ואיפה זה יושב בארכיטקוטורה? באיזו שכבה ומי קורה לזה? ומה PersonController לאן היית פונה?

בסופו של דבר אני צריך לשקף את הטבלאות בקוד. ואני צריך ליצור Repository שמכיל את המידע שבטבלאות באובייקטים.

4. במידה ואני צריך לקרוא את כל המידע בבסיס הנתונים ולהמיר אותו לקובץ (בא לא נשאל למה? סתם בשביל הדיון) איך אני מתנהג בצורה כזו.

אני צריך Repositpry שיכיל את המידע, באיזו שכבה הדבר הזה יושב? ואיזו מחלקה אני יוצר? ואני גם צריך להציג את המידע שב Repositryב GUI מה אז? איך הכל יתנהג פה?

קישור לתוכן
שתף באתרים אחרים

1. במתודות ב- controller שצריכות לגשת ל- DA מסויים, הייתי יוצר אותו, משתמש בו וזורק אותו. (כלומר לא הייתי מחזיק אותו כל הזמן באוויר).

2. משתמש וזורק - לא מחזיק אותו כל הזמן על ה- controller אלא יוצר אותו בתוך מתודה, משתמש, וזהו. נגמרה המתודה, הלך האובייקט.

3. Cahing זה דיון בפני עצמו, שאפשר לדבר עליו שעות. בעיקרון המטרה היא לא לפנות ל- DB עבור טבלאות שכמעט לא משתנות (טבלאות מילון למשל)

עריכה:

4. אף פעם לא יצא לי לשמור DB בקובץ. אולי אתה יכול לקרוא את כל ה DB לאובייקטים, ולבצע סיריאליזציה של האובייקטים בזיכרון לקבצים. התוצאה תהיה קבצי XML שייצגו את ה- DB שלך. זה הדבר היחיד שעלה לי.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...