.NET: ארכיטקטורה כללית
-
-
קודם כל יש לך כאן איזה שהוא מדריך בעברית של הרב דוט נט
שמנסה לעשות קצת סדר בנושא.
יש מומחים שעובדים רק עם entyty fremwork וישראל אולבסקי אמר לי שהוא לא רוצה להכיר שום שיטה אחרת.
@chaim1989אני כבר שנים מקשקש עם מאיר על collections ולפני ef על דטהסט וכד'
יש שיטה מוגדרת איך להביא את הנתונים מהדטה בייס למשתמש לעדכן וכו'?אז זהו שהקשקושים נגמרו אתמול בערב סופית!
בפרוייקט האחרון שלי (פרוייקט ארגון הסעות לבתי ספר), למרות שעשיתי דאטה סט, אני כמעט ולא מדבר איתו, במהלך התיכנות, הכל עשיתי עם מחלקות, ורק ככה אני מצליח להשיג 100 אחוז שליטה בחומר, תבין רק שבדטה סט יש לי 2 טבלאות בסיסיות, ואילו באוספים של המחלקות יש לי 11 אוספים של מחלקות שונות (שזה בעצם כמו טבלאות שונות) חכמות שמטפלות בדברים בדיוק כפי שאני רוצה, ועשרות שאילתות linq שעובדות אצלי בנאמנות יוצאת דופן. וכל זה אני בונה במאפיינים סטטיים מייד עם העלאת התוכנה וזה זמין לי בקלות בכל רחבי התוכנה.
בלי להכיר היטיב את entyty אני יכול להגיד לך שזאת לא בעיה לעבוד עם דאטה סט ולממש את אריכטקטורת entyty כי אתה יכול להגדיר בבנאי של מחלקה את ה row הרלוונטי ובמאפניינים לעשות ב set עדכון של השדה הרלוונטי ב row וכך אתה יכול להנות גם מחופש בחירה בין מסדי נתונים, וגם מארכיטקטורה עם שליטה מלאה לגמרי במערכת שלך.
עם הדטה סט, לבד אינני רואה דרך לבנות מערכות גדולות כשאתה עובד עם ה XAML מול הטבלאות ישירות, אתה יכול מקסימום לעשות רשימה של מכולת. שום דבר לא מעבר לזה..... אלא אם כן תתחיל "ללכלך" את הקוד שלך וזה יכול להחזיק מקסימום כמה ימים (כמה זמן בן אדם יכול לחיות בתוך ערימות של שחת????)
אז אני ממליץ לך בחום לאמץ בכל לבבך את ארכיטקטורת המחלקות, אשמח לייעץ לך בכל נושא ארכיטקטוני כמיטב יכולתי.פורסם במקור בפורום CODE613 ב21/06/2013 09:24 (+03:00)
-
דבר ראשון אהבתי את החתימה,
דבר שני אני מבין שיש כמה דרכים ולכן אני בדיוק שואל האם יש דרך "תקנית" כי גם אחרי ef שבו אני נוטה להשתמש יש כמה שלבים עד שמגיעים לתצוגה, האם יש דרך מוגדרת...אל תשכח שגם אחרי שיש לך ef ועשית משפט link שמביא לך תוצאות אתה צריך לעשות collections view source שהוא עצמו לא יכול להיטען מלינק עד מכמה שזכור לי,
או שכמו שאתה אומר אין דרך מוגדרת אלא פשוט צריך לבנות מחלקות ולארגן את הטעינה ועדכון בconstructors....לפי הצרכים הקונקרטים של הפרויקטפורסם במקור בפורום CODE613 ב21/06/2013 11:11 (+03:00)
-
אני עובד עם DataSet & DataAdapters.
הטכנלוגיות LinqToSql והחדשה יותר EntityFramwork, דורשות "טיפוח" והתערבות קבועה במיפוי הואטומטי. אחרת, יש בעיות איטיות משמעותיות לרוב.
כמו"כ הDB רגיש מאוד לשינויים במידה הוא כבר מלא בנתונים.פורסם במקור בפורום CODE613 ב23/06/2013 13:36 (+03:00)
-
אני מסיים כעת בניית פרוייקט עם הרבה טבלאות ואלפי רשומות, יעיד ע"כ דוד ל.ט.
כל החיבורים נעשו ע"י DataSet
אני מרוצה מאוד מהתוצאות ומהירות העדכון ואני מרגיש שמאוד נוח לעבוד עם זה
תמיד חשוב להכיר דרכים חדשות (אחרת נשאר מאחורה....) וכמובן לדעת את סדר העדיפויות
כל מידע בעניין יעזור ויחכים את כולנו
מה שחשוב מעבר לארכיטקטורת הבסיס הוא גם אפשרויות הגישה לנתונים כאשר מתחברים לטפסים ותצוגות / טבלאות, גם בזה ישנם מספר דרכים ובהחלט צריך לפתוח על זה אשכול נפרדפורסם במקור בפורום CODE613 ב24/06/2013 09:27 (+03:00)
-
בפרוייקט האחרון שלי (פרוייקט ארגון הסעות לבתי ספר), למרות שעשיתי דאטה סט, אני כמעט ולא מדבר איתו, במהלך התיכנות, הכל עשיתי עם מחלקות, ורק ככה אני מצליח להשיג 100 אחוז שליטה בחומר, תבין רק שבדטה סט יש לי 2 טבלאות בסיסיות, ואילו באוספים של המחלקות יש לי 11 אוספים של מחלקות שונות (שזה בעצם כמו טבלאות שונות) חכמות שמטפלות בדברים בדיוק כפי שאני רוצה, ועשרות שאילתות linq שעובדות אצלי בנאמנות יוצאת דופן. וכל זה אני בונה במאפיינים סטטיים מייד עם העלאת התוכנה וזה זמין לי בקלות בכל רחבי התוכנה.
בלי להכיר היטיב את entyty אני יכול להגיד לך שזאת לא בעיה לעבוד עם דאטה סט ולממש את אריכטקטורת entyty כי אתה יכול להגדיר בבנאי של מחלקה את ה row הרלוונטי ובמאפניינים לעשות ב set עדכון של השדה הרלוונטי ב row וכך אתה יכול להנות גם מחופש בחירה בין מסדי נתונים, וגם מארכיטקטורה עם שליטה מלאה לגמרי במערכת שלך.
עם הדטה סט,אני מנסה לבנות פרוייקט בדטה סט שמקושר למחלקות כדי שאני יוכל לממש את InotifyPropertyChengede
אני לא מסתדר עם עדכון המחלקות לדטה סטתוכל קצת להדריך אותי?
פורסם במקור בפורום CODE613 ב19/12/2013 14:22 (+02:00)
-
אני מנסה לבנות פרוייקט בדטה סט שמקושר למחלקות כדי שאני יוכל לממש את InotifyPropertyChengede
אני לא מסתדר עם עדכון המחלקות לדטה סטתוכל קצת להדריך אותי?
שאלת מידי בכלליות, אני יכול לעזור אם אדע מה הפרוייקט ואיך הוא בנוי פחות או יותר, בגדול עדכון זאת פעולה פשוטה בקוד, מה שכן בשביל שזה יהיה יעיל ומוחץ אתה צריך ללכוד את האירוע הכי מתאים לעדכון, וזה בדרך כלל בתוך המאפיינים כשהם מקבלים ערך כלשהו וזה כבר ממש ענין אמיתי של ארכיטקטורה שתלויה אך ורק בפרוייקט הספציפי. פנה אלי בפרטי ואמסור לך טלפון אם תרצה לשוחח.
בברכה
פורסם במקור בפורום CODE613 ב19/12/2013 14:58 (+02:00)
-
ב"ה הצלחתי להגדיר את הנתונים ואני מציג כאן קטע
של הגדרת פרופרטי כפי שאני עושה
וב"ה הנוטיפיי עובד מצויןprivate string _lName; public string lName { get { return _lName = row.LName; } set { row.LName = _lName = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("lName")); } } }
כעת מה שיש לי שאלה בנוגע לקשרי הגומלין
נאמר שיש לי שני טבלאות לקוחות וקניות
בדרך כלל אני ירצה ליחס לכל לקוח את הקניות שלו
כפי שהבנתי במחלקת קונטכט אמור להיות ליסט של טבלת הקניות של אותו אדם
משום מה אני מסתבך בדבר הזהכמו"כ אולי כל העניין הינו באמת 'בית חולים מתחת לגשר' ועדיף לעבוד עם אנטיטי
פורסם במקור בפורום CODE613 ב23/12/2013 12:26 (+02:00)
-
כמו"כ אולי כל העניין הינו באמת 'בית חולים מתחת לגשר' ועדיף לעבוד עם אנטיטי
זה לא, כי זה בדיוק מה שהאנטיטי עושה, רק שאז אתה חוסך קצת כתיבה.
האנטיטי מתוחכם יותר מהLinqToSql וכלים פשוטים אבל לפעמים רוצים כלים טפשים ולא חכמיםיש כלים אוטומטיים שעושים אוטומטית מחלקות מכל המסד נתונים, כלומר כותבים את הקוד הזה פחות או יותר.
חלךק עושים רק מחלקות חלק גם מטפלים בתקשורת ובכל הDAL.
הנה חלק:
זה אונליין: http://www.pureobjects.com/dbCode.aspx
זה כלי קוד פתוח, כך שתוכלו לשנותו http://www.codeproject.com/Articles/8776/Automated-Class-Builder-for-Database-Tablesעוד כלים:
http://www.codeproject.com/Articles/36217/Generate-Classes-and-CRUD-Procedures
http://oxmlibrary.codeplex.com/ הוא יצור מתוך DataSet קיים. נשמע גם חזק.
http://salardbcodegenerator.codeplex.com/ שווה בדיקה עמוקה.
http://datatiergenerator.codeplex.com/ יוצר מחלקות קוראות וכותבות גם בצד המסד וגם באפליקציה שכל התקשורת בנוייה תוך דקות.זה פיתרון פשוט ומפליא http://stackoverflow.com/a/7863480/1271037 זו שאילתת SQL על מבנה המסד
פורסם במקור בפורום CODE613 ב23/12/2013 13:48 (+02:00)
-
קודם כל תודה רבה
עברתי על הלינקים
מבין האפשרויות נראה לי שדרך הדטה סט כפי שעשיתי עדיין יותר קל ונוח
אולי אתה חולק עלי?!שאלתי כעת
הייתי רוצה לקשר כל ליסט של רשימת הילדים ללליסט במחלקת האב
כפי שעשיתי בדיוק לגבי כל שורה ושורה בGet וה Set
עיין בקוד שהעליתי לעילפורסם במקור בפורום CODE613 ב23/12/2013 16:12 (+02:00)
-
אתה מצד אחד בונה מחלקה ומצד שני אומר שDataSet יותר קל.
הלינקים שהבאתי ברובם לא במקום דטה סט אלא כותבים את הקוד שכתבת אוטומטית.איך לכתוב ליסט יש כמה דרכים, ובכוונה לא עניתי כי חשבתי שארכיטקט ייתן דרך טובה.
אפשר ע"י פונקציה ואפשר ע"י אוסף אבל אז אין נוטיפי אלא"כ משתמשים באוסף משוכלל.פורסם במקור בפורום CODE613 ב23/12/2013 17:08 (+02:00)
-
הדרך הכי פשוטה זה לעשות פרופרטי במחלקת הבנים שיכיל הפנייה לאובייקט האב (את ההפניה אפשר לקבוע בבנאי באופן מפורש, או על ידי שאילתה שתביא את ה ID) כאשר יש לך הפניה לאובייקט האב, ממילא יש לך הפניה לכל המאפיינים וכל השדות וכל המידע שיש בתוך האב. במקרה שלך, אתה עושה אובייקט בשם קניה, והוא מכיל מאפיין שמפנה למחלקה של לקוח, מחלקה של מוצר, וכן הלאה. כך שכשתצטרך כל מידע שהוא על הלקוח אתה פשוט פונה לאובייקט הלקוח שנמצא בתוך הקניה.
לעשות ליסט בתוך מחלקת לקוח שיכיל את כל האובייקטים של קניות, אני הייתי ממליץ לעשות פרופרטי שממלא את עצמו רק בעת הצורך כלומר ב get בלבד, ופשוט יוצר אובייקטים של קניות על ידי שאילתת linq (לעשות את זה בכל פעם שפותחים אובייקט לקוח, זה לכאורה בזבוז משאבים). מומלץ להשתמש באובזרוובול קולקשן (observablecollection), עי' מ"ש בזה באמסדיאן, ויש גם שכלול של זה שנקרא טרולי אובזרוובול קולקשן פעם השתמשנו בזה. זהו אובייקט קולקשן שתומך באירועים והוא בר שליטה יותר מקולקשנים אחרים. ומה שמאפשר לך למשל כשמוסיפים לו אובייקט לעשות ערכי ברירות מחדל כגון contact id שיהיה שווה ל id של הלקוח כלומר אובייקט האב וכן הלאה וכן הלאה.פורסם במקור בפורום CODE613 ב25/12/2013 11:18 (+02:00)