לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #13  
ישן 08-09-2010, 18:58
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 12 שנכתבה על ידי hellfrost שמתחילה ב "אתה מדבר על עצמך בגוף..."

Zed3
ציטוט:
סינגלטון היא ההדגמה המצויינת ביותר (והפשוטה) ל-DP

דוגמא פשוטה זה Factory שמייצר ButtonWidget על פי סוג מערכת ההפעלה, או Observer שמודיע על event מסויים, ולא סינגלטון.

ציטוט:
אתה מדבר על עצמך בגוף שלישי?

לא

ציטוט:
קודם כל OOD נולד מתוך מחשבה על מערכות גדולות, שבה אתה לא שולט על מה כל אחד מתוך ה 25 מתכנתים ב5 צוותים שונים עושה.

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

ציטוט:
SingleTone מיועד למצב שבו אתה חייב מופע אחד של האובייקט (או ממש ממש רוצה שיהיה רק אחד).

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

ציטוט:
וZ צודק, זאת דוגמה ראשונה טובה, כי הוא פשוט יחסית, ויש בו אלגנטיות.

ולצערי זה גם הדוגמא הכי נפוצה. תשאל כל מתכנת את השאלה:
"אתה מכיר DP?" אם הוא עונה כן שאל אותו
"איזה DP אתה מכיר" הרוב יענו
"סינגלטון" ואז תשאל אותו
"אתה מכיר עוד?" סביר להניח שהוא יענה
"כן יש איזה שנקרא meditator" ופה בא ה facepalm

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

"Here I'm doing a FooBarManager. Its going to manage all my FooBars. Since I need only one manager to manage everything Ill make it singleton"
^דוגמא קלסית לסינגטון ולשימוש לקוי בסינגלון.
ואז אתה רואה אנשים שכל הקוד שלהם מפוצץ ב "managers" שכולם סונגלטון. good luck debugging it.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 08-09-2010, 21:09
צלמית המשתמש של hellfrost
  hellfrost hellfrost אינו מחובר  
 
חבר מתאריך: 07.12.09
הודעות: 7,072
בתגובה להודעה מספר 13 שנכתבה על ידי eXtruct שמתחילה ב "Zed3 [QUOTE]סינגלטון היא..."

תכף אני עושה facepalm...
וכתבת על עצמך למעלה בגוף שלישי...

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

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

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

נניח חיבור למסד נתונים, או איזה חיבור רשת, או משהו אחר שאם יהיו לך שניים ממנו הם יפריעו אחד לשני לעבוד.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 08-09-2010, 22:47
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 14 שנכתבה על ידי hellfrost שמתחילה ב "תכף אני עושה..."

ציטוט:
וכתבת על עצמך למעלה בגוף שלישי...

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

ציטוט:
אז לא אתה לא יכול לשלוט על כמה מופעים יחליטו לעשות שלו.

כל אחד מהצוות נמצא בקובית ווקום משלו ולא יכול לתקשר עם העולם שבחוץ? לסכם ביניכם/לכתוב בדוקומנטציה שחייבים ליצור רק מופע אחד של אובייקט כזה, קשה מידי?

ציטוט:
נניח חיבור למסד נתונים, או איזה חיבור רשת, או משהו אחר שאם יהיו לך שניים ממנו הם יפריעו אחד לשני לעבוד.

צור אחד גלובלי מה הבעיה בזה?

בכל מקרה אני מקווה שיום אחד תבין למה אני מתכוון, אני רק מקווה שזה לא יהיה מאוחר מידי.

בהצלחה!

נערך לאחרונה ע"י eXtruct בתאריך 08-09-2010 בשעה 22:53.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 09-09-2010, 00:35
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 16 שנכתבה על ידי hellfrost שמתחילה ב "1. "צור אחד גלובאלי" תגיד לי..."

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

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

2. נכון אני מסכים שפתרון שנובע מעיצוב יותר טוב מפתרון של "תעשה ככה". הבעיה עם סינגלטון שהוא יוצר מאין lap-land שבו כל מה שמריח כמו "אובייקט גלובלי יחיד" הופך לסינגלטון. בעם סינגלטון זה מחלה מדבקת. ולא הבתי את הדוגמא של BOOST או .NET FW

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

נערך לאחרונה ע"י eXtruct בתאריך 09-09-2010 בשעה 00:55.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #19  
ישן 09-09-2010, 02:27
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 18 שנכתבה על ידי Dragonion שמתחילה ב "אני אישית משתמש בsingeltons..."

דבר ראשון שמות כמו foomanager או foosystem זה שמות נוראים! כשאני רואה מחלקה שקרואים לה FooManager אני תוהה מה היא עושה? מנהלת Fooים? מה זה לנהל? ליצור? למחוק? לעשות עליהם פעולת update?
אבל אני לא ארחיק לכת ואגיד שלקרוא למחלקות בשמות foomanager או foosystem זה רע, כי לפעמים אין שם יותר טוב מזה, וכל עוד אני משתמש בשמות כאלה, אין לי את הזכות לשפוט אחרים על שימוש בשמות כאלה.
אבל סתם נקודה למחשבה שלימדו אותי: אם אתה לא יכול למצוא שם למחלקה שיתאר אותה בבירור ולא יכלול את המילים manager או system אז כנראה ה design לקוי. זה לא חוק אבל תחושב על זה

עכשיו נחזור לסינגלטון. סינגלטון יוצר השליה של "אובייקט גלובלי בשיטת OOP" אני אדגים:
קוד:
class FooManager{ public: static FooManager& GetInstance(){ static FooManager instance; return instance; } void DoFoo(){} private: FooManager(); ~FooManager(); };

זה סינגלטון קלאסי בשפת C++ (בוא לא נתווכח עכשיו על כל מיני מימושים שונים של סינגלטונים)
השימוש בוא יראה כך:
קוד:
int main(int argc, char* argv[]){ FooManager::GetInstance().DoFoo(); return 0; }

עכשיו אני אדגים לך דוגמא אחרת
קוד:
class FooManagerObj{ public: void DoFoo(); } namespace FooManager{ FooManagerObj o; FooManager& GetInstance(){ return o; } } int main(int argc, char* argv[]){ FooManager::GetInstance().DoFoo(); return 0; }

(סלח לי על טעויות סינטקס אם יש כאלה, בכל זאת השעה 2:45)
זה דוגמא לכך שסינגלטון הוא אשליה של "אובייקט גלובלי בשיטת OOP".
בסופו של דבר בשלב מסויים ימאס לך לכתוב כל הזמן FooManager::GetInstance() אז או שאתה תעשה לו cache לוקלי:
קוד:
FooManager fm = FooManager::GetInstance(); ... fm.DoFoo();

או שמציא מקרו בסנגון:
קוד:
#define FOOMANAGER() FooManager::GetInstance() ... FOOMANAGER.DoFoo();

עכשיו אני מאמין שזה ברור לך שבלי להתסכל בקוד אתה לא תוכל להגיד בוודאות עם FooManager היא מחלקה שממשמת סינגלטון או namespace.
ודבר אחרון cin, cout וכדומה שיושבים ב std הם בעצם אובייקטים גלובליים של i/ostream.

נעבור הלאה:
סינגלטון זה memory leak. אתה לא יודע מי ומתי משחרר אותו (אם בכלל). ניקח לדוגמא DatabaseManager שהוא סינגלטון שמחזיק חיבור ל DB. בפעם הראשונה שקרואים ל GetInstance() נוצר חיבור ל DB. מתי החיבור יסגר? מי יסגור אותו? ומה אם כרגע אני מפעיל פעולה כבדה של data analyzation שלא מצריך חיבור ל DB, והדבר החכם יהיה לסגור את החיבור. מה אני עושה?

הלאה:
סינגלטון מכניס איתו global state שלא נראה לעין. בהינתן מחלקה DatabaseManager איך תדע שהיא לא משתמשת בסינגלטון? ואם היא כן אז היא כבר לא standalone והיא נוגדת את ה Single Responsibility Principle. איך אתה מתכוון לדבג את ה DatabaseManager שלך בלי לבגד את הסינגלטון יחד איתו?
דוגמא אמיתית:
היום כתבתי אנקפסולציה ל DLLים. התוכנה שאני כותב יכולה דינאמית לטעון DLLים שרחיבים את הפונקציונליות שלה. אני נוהג להמשתמש ב Logger שהמטרה שלו לכתוב לגבי כל דבר שקורה (טענתי את א', יצרתי את ב', נכשלתי לאתחל את ג' כי קרה ד', וכדומה). פעם הייתי אומר "היי אני צריך רק logger אחד, וכולם משתמשים בו, בו נעשה סינגלטון!") כיום אני מעביר את ה logger בתוך ב CTOR לכל מי שצריך אותו. וככה עשיתי גם עם המחלקה שטוענת את ה DLLים. אני יכול לקחת את המחלקה עכשיו וליצור לה Unit test, לבדוק אותה תחת כל מיני תנאים, ואני יודע במה בדיוק היא תלויה רק מלהסתכל על ה CTOR שלה.

הלאה:
נחזור לדוגמא הקודמת של המחלקה שכתבתי היום וה logger שלי. כמו שאמרתי פעם הוא היה סינגלטון וכולם היו כותבים לאותו קובץ. פתאום הקובץ התחיל לגדול ואמרתי STOP! אני לא רוצה שכולם יכתבו לאותו קובץ, למעשה אני לא רוצה שכולם יכתבו לקובץ. אני רוצה שא' יכתוב לקונסול, וב' יכתוב לקובץ, וג' בכלל יכתוב HTML בתור ה report שלו. אבל ה logger שלי הוא סינגלטון. מה לעשות? נכון ליצור עוד 2 סינגלטונים! ואז יש לך 1001 סינגלטונים לכל מיני loggers במקום פשוט להגדיר מחלקה logger וממנה לרשת loggers שונים (או אפילו לקחת את הדוגמא של Java Logging API שאתה יכול להוסיף Handles ל Logger) ואז כל מחלקה תקבל logger מתאים.

ואחרון שעולה לי לראש:
אתה לא יכול להרחיב את הפונקציונליות של סינגלטון. דוגמא: שוב יש לי DatabaseConnection שמתאר חיבור מסויים. אני רוצה לאפשר ללקוח שלי להתחבר לכל DB בשלי שהוא יצטרך לקמפל את הקוד שלי. הדבר החכם לעשות זה לקרוא קובץ הגדרות ולעשות switch (לצערי C++ לא ממש תומך ב RTTI כמו JAVA לדוגמא) ולבחור את ה db driver המתאים. אז בשביל זה יש לי את ה DatabaseConnection שהוא בעצם Interface שדרכו אני מדבר עם ה DB וממנו אני יורש MysqlDatabaseConnection MssqlDatabaseConnection וכדומה. אבל איך אני אומר ל getInstance של DatabaseConnection איזה DB ליצור?

עוד אחד שעלה לי כרגע:
תנסה לעבוד עם סינגלטון בסביבה מרובאת תהליכים (multi-threaded environment) שם הסינגלטון כבר לא יהיה כל כך יחיד.


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

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

אשמח לענעות על כל שאלה שתעלה!
לילה טוב!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #21  
ישן 09-09-2010, 13:12
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 20 שנכתבה על ידי Dragonion שמתחילה ב "אני יכול למצוא שמות אחרים..."

בקשר לשמות, אם הבנתי נכון למחלקה הראשונה אפשר לקרוא FileCacher ולשניה EventQueue.

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

נכון שאתה חושב כרגע "אבל 99% מהמחלקות שלי משתמשות ב FileCacher לא עדיף כבר לעשות אותו סינגלטון". תשקיע קצת בעיצוב ותאמין לי זה ישתלם. אני אתן לך דוגמא:
נניח שכיום כולם משתמשים ב FileCacher שלך. כולם צריכים לגשת לקבצים מהדיסק. אני מאמין שאין לך מישהוא שיושב על הראש ואומר "תעשה א' ב' וג'" ולכן את ה design document (אם יש) אתה כתבת וסביר להניח שלא ראית הכל עד הסוף (בלי להעליב כמובן, רובינו לא רואים את זה, למעשה אני מאמין ש 95% מהמתכנתים לא מסוגלים לחושב על כל חלק במערכת) ויבוא יום שאחת המחלקות שלך תרצה להתשמש ב NetworkStreamCacher. הרי אם מלכתחילה יצרת interface של ResourceCacher שממנו ירש ה FC ורפרס אליו קיבלה כל מחלקה, כל מה שצטרך לעשות זה להעביר רפרנס אחר, שינוי של שורת קוד אחת!
עם סינגלטון לעומת זאת היית יושב עם find & replace ומשנה.

לגבי מחלקה סטטית שתיהיה NS. בחיים אל תעשה את זה! למה זה טוב? בשביל יש NS. אם יש לך אוסף של פונקציות (ומשתנים גלובליים) שאתה יכול לאחד לקבוצה מסויימת עדיף ומומלץ לשים אותם ב NS ולא מחלקה סטטית. (זה לדעתי לפחות, לא זכור לי שקראתי על סיבות למה אחת עדיף על פני השני).
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #23  
ישן 09-09-2010, 20:18
צלמית המשתמש של hellfrost
  hellfrost hellfrost אינו מחובר  
 
חבר מתאריך: 07.12.09
הודעות: 7,072
בתגובה להודעה מספר 19 שנכתבה על ידי eXtruct שמתחילה ב "דבר ראשון שמות כמו foomanager..."

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

לעשות משתנה גלובאלי במערכת לא מונע מאף אחד לעשות ככה:
קוד PHP:
 globalCrap = new SomeCrap();

// Or like this
localCrap = new SomeCrap();

// Or like so which would make a copy:
anotherLocalCrap globalCrap 

בסינגל טון שמומש נכון אי אפשר לעשות את זה. סינגל טון, אי אפשר ליצור ולא להעתיק.

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

הטיעון עם הGlobal State בכלל דבילי, כי זה כל המטרה בסינגל טון. אם לא היית צריך גלובאל סטייט, לא היית צריך סינגל טון!
בגלל זה, מחלקות סינגל טון צריכות להיות נדירות, כי זה פחות או יותר המחלקות היחידות שצריכות להיות סינגלטון, כאלה שחייבות Global State ...
ואין שום קשר ל Single responsibility principle.

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

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

ואל תיתן עצות לאנשים עד שתלמד את הבסיס....
נ.ב. מה זה CBSE?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #24  
ישן 09-09-2010, 20:56
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 23 שנכתבה על ידי hellfrost שמתחילה ב "הבעיה שלך, היא שאתה לא מבין..."

למה אתה יורד לפסים אישיים? אני ניסיתי כמה שיותר לא לרדת לזה:
ציטוט:
ואל תיתן עצות לאנשים עד שתלמד את הבסיס....

? אתה לא יכול לנהל דיון בוגר? מאיפה לך לדעת איזה סוג של מתכנת אני ומה אני יודע?

ציטוט:
וגם הדוגמה שלך למימוש סינגל טון לא נכון, יש לו Copy Constructor דיפולטי, ולא טיפלת באופרטור = .

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

ציטוט:
לעשות משתנה גלובאלי במערכת לא מונע מאף אחד לעשות ככה:

אני לא מצליח להבין, אתה עובד עם חיות? אנשים שלא מסוגלים לשמור על הרצון שלהם לא ליצור יותר מאובייקט אחד? מה יותר קשה מ "אני צריך בוא ניצור רק אחד"?

ציטוט:
לעשות משתנה גלובאלי במערכת לא מונע מאף אחד לעשות ככה:

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

ציטוט:
עזוב שזה צריך לקרות עם FACTORY בCTOR של הסינגל טון...

אשמח לראות מימוש של דבר כזה.

ציטוט:
נ.ב. מה זה CBSE?

CBSE


יש לי שאלה אליך, תוכל לתת דוגמא למחלקה שלדעתך צריכה להיות סינגלטון ולהסביר למה היא צריכה להיות סינגלטון? אם אפשר גם הסבר כללי על מערכת שתשתמש באותה מחלקה, לא מעניינות אותי מחלקות בווקום.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #25  
ישן 09-09-2010, 21:31
צלמית המשתמש של hellfrost
  hellfrost hellfrost אינו מחובר  
 
חבר מתאריך: 07.12.09
הודעות: 7,072
בתגובה להודעה מספר 24 שנכתבה על ידי eXtruct שמתחילה ב "למה אתה יורד לפסים אישיים?..."

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

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

לשכפל את הHEADER לא ממש יעזור לך... וגם אם מישהו ממש משתדל לדפוק את עצמו אז זה מגיע לו.

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

מה הבעיה לכתוב Abstract Factory לחיבורי DB, ולעשות אותו Internal בC# או Private בתוך המחלקה הגדולה, או בתור FIREND , ושמחלקה שהיא סינגלטון תפנה עליו בקונסטרקטור שלה?

רק שיהיה ברור שבSingletone לדעתי צריך להיות משהו דיי נדיר, רק כשאתה חייב מופע יחיד בישביל התקינות של המחלקה. לא לכל Manager שני. האחרון שאני כתבתי, היה לפני איזה שנה, וזה היה בישביל חיבור רשת, ולהעביר כל מיני בקשות בצורה סינכרונית לצד השני, וזה גם היה משהו שנעלם בגרסה מאוחרת...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #31  
ישן 09-09-2010, 22:16
צלמית המשתמש של hellfrost
  hellfrost hellfrost אינו מחובר  
 
חבר מתאריך: 07.12.09
הודעות: 7,072
בתגובה להודעה מספר 28 שנכתבה על ידי asx שמתחילה ב "אפשר בבקשה הסבר ל"פוגע..."

לא. זה לא נכון.
1. אם מחר תרצה שתי מחלקות שמטפלות בהרשמות? אחת שרושמת לDB ואחת שרושמת באתר אחר?

2. אם מחר יהיו לך שתי דרכי הרשמה, אחת מWEB, ועוד אחת מפלאפון, ושתיהן יכולות לחיות במקביל בתרדים שונים, אתה באמת רוצה לסנכרן את התרדים במחלקה?

3. בישביל מה מחלקה שמטפלת בהרשמה צריכה State? זאת מחלקת BL שצריכה להיווצר, לעשות מה שהיא צריכה לעשות ולמות, זה יוסיף לך גמישות ו Scalability, כי המחלקה לא תלויה במופעים אחרים של עצמה, או בState כלשהו.

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

נערך לאחרונה ע"י hellfrost בתאריך 09-09-2010 בשעה 22:22.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #34  
ישן 09-09-2010, 21:53
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 25 שנכתבה על ידי hellfrost שמתחילה ב "כן קשה לי, כי אתה משחרר פה..."

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

את ה Abstract factory שלך לא הבנתי, מצטער.

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

עכשיו למה פתחתי את הדיון הזה, כי רוב האנשים שמגלים סינגלון אם קרואים את הספר design patterns elements of reusable object-oriented software בצורה "קסומה" מדלגים על כל מה הכותב אומר על סינגלטון ומבינים רק ש "סינגלטון זה אובייקט גלובלי יחיד שניתן לגישה מכל מקום". ואז הם הולכים להוליד SoundManager FooManager BlahManager וכדומה.

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

אני הולך להביא עכשיו מידע באנגלית לגבי למה סינגלטון נחשב לרע, אני יודע שעל כל ארגומנט קיים מישהוא יכול להביא קונטר-ארגומנט, אותי זה לא מעניין. הטנדנציה הכוללת הולכת נגד סינגלטון ורבים מבקרים את המימושים של סינגלטונים בשפות כגון JAVA או C# ששם יש אותם בשפע.
Why Singletons are Evil - Being Scott Densmore
Why singletons are controversial - Google
לאלו מכם (שאולי יקראו את הדיון הזה) אתם יכולים לחפש בגוגל
why singletons are evil
why singletons are bad

לילה טוב וסוף שבוע נעים.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #35  
ישן 09-09-2010, 21:56
צלמית המשתמש של hellfrost
  hellfrost hellfrost אינו מחובר  
 
חבר מתאריך: 07.12.09
הודעות: 7,072
בתגובה להודעה מספר 34 שנכתבה על ידי eXtruct שמתחילה ב "שמע אני לא בא to criticize..."

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

עכשיו למה פתחתי את הדיון הזה, כי רוב האנשים שמגלים סינגלון אם קרואים את הספר design patterns elements of reusable object-oriented software בצורה "קסומה" מדלגים על כל מה הכותב אומר על סינגלטון ומבינים רק ש "סינגלטון זה אובייקט גלובלי יחיד שניתן לגישה מכל מקום". ואז הם הולכים להוליד SoundManager FooManager BlahManager וכדומה.

לילה טוב וסוף שבוע נעים.


עם זה אני מסכים...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #38  
ישן 08-09-2010, 22:39
  משתמש זכר yoavmatchulsky yoavmatchulsky אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 1,561
שלח הודעה דרך ICQ אל yoavmatchulsky שלח הודעה דרך MSN אל yoavmatchulsky Facebook profile
בתגובה להודעה מספר 1 שנכתבה על ידי asx שמתחילה ב "Design pattern.. אפשר הסבר?"

נראה לי סיבכו אותך פה יותר מדי

Design Pattern זה בדיוק מה שזה. לתכנת בהתאם לתבנית מסוימת.

גם אם אתה לא יודע מה זה Design Pattern, ברגע שאתה מתכנת, אתה עובד בתבנית מסוימת. רוב הסיכויים שאם תממש את אחת התבניות המוכרות, תקבל איזה שהוא שיפור בקריאות הקוד או ביצועים או התאמה לקדימה.

מי שבעצם כתב את כל התורה הזאת (שזה לא בדיוק לכתוב, אלא יותר "לאסוף" - אנשים השתמשו בשיטות האלה עוד לפני שנתנו להם שם) הם קבוצה שקראו לעצמם gang of four

האתר שהכי עזר לי להבין את הנושא (בנוסף לקורס) הוא dofactory.
לינק - http://www.dofactory.com/Patterns/Patterns.aspx
_____________________________________
!!אזהרה!!
ההודעה עלולה להכיל שברי אגוזים ו/או איברי דגים כלשהם
!!אזהרה!!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 07:33

הדף נוצר ב 0.09 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר