עזרה בבחירת design pattern

itaym02

New member
עזרה בבחירת design pattern

הפרוייקט המדובר הוא בייצור של דוח על פי תבנית XML. זאת אמרת, בXML יהיה רשום איזה שדות לקרוא מהDB ולהכניס בדוח, איזה שדות לסכם (ואיך לסכם: ממוצע,סכום...) ולפי איזה שדות לקבץ את המידע בדוח. הכיוון שלי הוא ליצור את הירארכיית האובייקטים הבאה: תא בדוח -> שורה בדוח (אובייקט המורכב מאובייקטי תאים). טור בדוח (אובייקט המורכב מאובייקטי תאים). שורה בדוח (אובייקט המורכב מאובייקטי תאים) -> קבוצת שורות מקובצות (אובייקט המורכב מאובייקטי שורות) ->אובייקט הדוח עצמו. שאלתי, האם יש design pattern שמתאים לפרוייקט שכזה?
 
עד שתענה הנה כמה עצות

כיוון שאין לי מספיק מידע,אני אניח הנחות מן הסתם ייתכן ולא מתאימות לך, הן היו מתאימות לי כשחשבתי(ולא יישמתי) מנגנון דומה. במבט ראשון אני לא מבין מדוע אתה צריך את האוביקטים מה תעשה איתם? האם הם רק מחזיקים מידע או שניתן לבצע עליהם פעולות,אם כן אז אילו? הסיבה שאני תמה היא כי על פי הדרישות שנתת,ניתן להפיק שאילתת SQL על מנת לקבל את המידע שאתה צריך.מה שנשאר לך הוא להציג אותו. אז נניח שאנחנו מסכימים ובראייה מופשטת יש לנו מידע וצריך להציג אותו. בשלב הראשון צריך לחשוב איך מפיקים את המידע,נניח שעל על פי קובץ ה XML צריך להפיק שאילתה וזה מספק אותנו. בגלל שייתכן שגם פורמט קובץ ה XML ישתנה וגם אופן הפקת המידע הייתי מציע לחשוב על שימוש ב GOF:Strategy ומכאן גם ב GOF:Abstract factory כלומר לעשות DECOUPLING בין אובייקט ה REPORT לבין המנגנון שמביא את הנתונים הנדרשים. אובייקט ה REPORT כפי שאני מדמיין משתמש במנגנון דומה מאוד לזה שמתמשים דפי ASP.NET,אם ייצא לך לתכנת בטח ראית שבין ה HTML יש פקודה הקוראת לערך של משתנה שנמצא ב DATASOURCE או משהו כזה. כלומר דף ה ASP.NET הוא בעצם TEMPLATE ובתוכו ביטויים שמוערכים בזמן ריצה הייתי מציע לחשוב על שימוש ב FOWLER:TEMPLATE VIEW בברכה.
 

itaym02

New member
תודה - אוקיי - יתכן שכל שדה זה מוג

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

ואני אנסה לעזור,זה פרוייקט מעניין...מקנא בך :) בברכה.
 

itaym02

New member
הנה חזרתי מהר - >

אז יש לי קובץ XML אחד שגם יגדיר את מראה הדוח (צבעי הטורים, שדות מודגשים וכו'). כמו כן - הוא יגדיר את הפרמטרים לבניית הsql + איזה שדות מחושבים ליצור. (שדה מחושב = למשל ממוצע על מספר שדות). את העיצוב אני שומר באובייקט אחד. את נתוני הדוח אני שומר בעץ אובייקטים (dp composite) יהיו לי ממשק אל העץ אובייקטים שישלוף ממנו את המידע וישתמש באובייקט מעצב לצורך תצוגת המידע. אותו ממשק ששומר את העיצוב, יהיה למעשה (dp strategy) מכוון שיהיו מספר דרכים שונות לתוצגה. זה בגדול מאוד - איך נראה?
 
הערה קטנה

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

itaym02

New member
אתה צודק וזו גם הדרך שחשבתי בתחילה

אך שמתי לב שאני בונה שני xml שהם כמעט זהים. לדוגמה: שליפה של שני שדות, הxml הבא יגדיר את שמות השדות ואת הצבע בו הם יופיעו, אם יש לך רעיון איך להפריד בצורה יעילה, אני אשמח.
<field color="blue">emp_no</field> <field color="white">salary</field>​
אם אני רוצה בשני קבצים נפרדים:
<field color="blue">emp_no</field> <field color="white">salary</field> and the other one <field>emp_no</field> <field>salary</field>​
 

gewitter

New member
נראה לי כמו סכמה בעייתית

לא שאני מבין בזה יותר מדי, אבל הטג field משמש בכל קובץ XML למשהו אחר, וזה מבלבל. לדעתי כדאי להגדיר סכמה לXML כך שיהיה ברור מה מציין שם של עמודה ב-DB ומה מציין מאפיינים גראפיים. נניח שהיית משתמש בקובץ אחד: <field id="EmplyeeID"> <color>blue</color> <dbfield> <table>tblEmployee</table> <column>ID</table> </dbfield> </field> אולי זה קצת מוגזם, אבל נראה לי גמיש. עכשיו, אם אתה מפצל לשני קבצים, על אחד אחראי המעצב הגראפי, ועל השני אחראי מהנדס מערכות מידע (סתם, נניח), אז בקובץ העיצוב יכתבו אלמנטי עיצוב, למשל <fieldstyle ref="EmplyeeID"> <color>blue</color> <font> <family>arial</family> <size>15</size> </font> </fieldstyle> ושים לב לרפרנס ל field מסויים בדו"ח. אחרי כל זה נראה שכדאי להשתמש כבר ב css. בטח יש איזו קומפוננטה חינמית שמבינה css. או שכבר יש סכימת XML מוכנה בשביל פרטים עיצוביים (אני בספק אם אין), כולל קוד מוכן לפרסינג.
 
למעלה