Commad design pattern

Commad design pattern

למה זה טוב, חוץ מלהקשות עלי את החיים, שגם ככה לא משהו?
http://www.dofactory.com/net/command-design-pattern
קיבלתי לעשות כמה שינויים באתר, שהרבה פעולות בו נעשות בדרך הזו. יש commands כאלה, וכשרוצים להפעיל - עושים להם ExecuteCommands .
מה התועלת בזה? ומה ההצדקה לכזו סיבוכיות? באיזה מקרים כדאי להשתמש בזה, ומתי לוותר?
 

ziv1f

New member
אחד השימושים העיקרים שאני מכיר זה UNDO

מכיוון שבעזרת command אנחנו מגדירים פעולות אטומיות, אז אפשר גם בקלות מאד להגדיר את הפעולה ההפוכה

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

בברכה,
זיו
 

דוטנט

New member
שימושים ל- Command design pattern

ב- WPF משייכים אובייקט מסוג Command ללחצן ולאופציית תפריט.
אם לחצן ואופציית תפריט אמורים לעשות את אותה עבודה, משייכים אליהם אותו אובייקט.
לאובייקט יש תכונת CanExecute שמחזירה אמת אם הפעולה ניתננת לביצוע.
אם הפעולה אינה ניתנת לביצוע הלחצן יהיה disabled.
ההתנהגות הזאת קשה להשגה בשיטות הרגילות.
וחוץ מזה (כמו שזיו כותב) משתמשים בזה לצבירת פעולות מאקרו ול- Undo.

אני לא יודע דבר על האתר שאתה עובד עליו, ולכן תשובתי היא כללית מאוד.
 
ושימוש נוסף, תופעה שראיתי כמה פעמים בשנה האחרונה.

אנשים שומעים על design pattern מגניב. שכרו אותם ל 6 חודשים לביצוע פרויקט, והם אומרים לעצמם: למה שלא ננסה פעם את command design pattern ? נראה איך זה. יהיה נחמד להוסיף לקורות חיים. וככה שליחת מייל ללקוח בעקבות רישום שלו לאתר (פעולה בסיסית ופשוטה) הופכת לקומנד. עם עשרות קלאסים שאחד קורא לשני, המון פרויקטים שיש להם רפרנס אחד לשני, ובכלל אופרציה ענקית שבעצם עושה פעולה טריויאלית. אין undo ואין טרנזאקציה. זה סתם מעצבן.
 

דוטנט

New member
זה אחד מהקשרים בין design patterns לפרנסה

נכון שיש לפעמים שימוש מיותר בזה.
 

tenen

New member
אני חושב שהתשובה פשוטה הרבה יותר וגם תמימה יותר

אנשים לא עושים ניסיונות על הלקוח בשביל הכיף, הם לרוב משתמשים בכלים שהם מכירים משום שזה נראה להם הכי יעיל.
&nbsp
יש כאלו שלכל עבודה ישתמשו בפטיש, גם כאשר מברג יותר מתאים.
זה לא שיש להם כוונה רעה, או רצון ללמוד על חשבון הלקוח, להפך, אין להם שום רצון ללמוד, יש להם 6 חודשים ובמקום למצוא שיטה חדשה שהם לא מכירים ועלולה להיגרר ולהכניס הפרוייקט לאיחור הם מעדיפים להשתמש בכלים שהם מכירים שהם אומנם לא אידאליים למשימה הספציפית אבל בהם הם שולטים ויכולים להבטיח שיסיימו הפרוייקט בזמן שניתן להם.
&nbsp
יצא לי לעשות פרוייקט בחברה שעובדת עם MVC3 עם EF4 בגישה של DB FIRST.
כמובן שJAVASCRIPT הוא כולו בJQUERY.
&nbsp
עכשיו זה לא שדפים חדשים אי אפשר להשתמש באנגולר, מן הסתם זה יהיה יותר יעיל לאורך זמן.
אבל משום שהזמנים לוחצים שם הם ממשיכים להשתמש באותם כלים למרות שברור לחלוטין שאלו כלים שצריך להוריד את המינון בהם לטובת כלים עדכניים יותר בחלקים חדשים של המערכת.
&nbsp
מפתחים שלא נכנסים לעולמות חדשים הופכים למאוד יעילים בעולמות שהם מכירים משום שהם משקיעים שנים 100 אחוז מהמאמץ בדיוק באותה טכנולוגיה.
החיסרון הוא שהטכנולוגיה הזו היא פטיש ונכון שאפשר לעשות הכל עם פטיש, לפעמים המברג יעיל יותר ועדיין הם מעדיפים את הפרוייקטים לעשות עם הפטיש במקום לחטוף את זמן הלימוד של המברג
 

דוטנט

New member
הרשה לי להוסיף

לעיתים קרובות אלה לא המפתחים, אלא בתי התוכנה.
"למה לי לפתח ב- MVC כשהמפתחים שלי שולטים ב- Webforms? ומי יתחזק לי את הפרוייקט בעוד כך וכך שנים?"
ושוכחים שבעוד כך וכך שנים דוקא אנשי Webforms יהיו נדירים יותר.
 
למעלה