איתי שקורי כתב בפוסט Blog posts Tags standardization על הבעיה של ריבוי תגיות והבעיה בחיפוש פוסטים על פי תגיות.
אחרי הדיון שהיה שם אפשר להגיע לכמה מסקנות:
- יש תגיות שכנראה לא ניתן יהיה לצמצם (כמו MOSS ו - SharePoint), הפתרון במקרה הזה יהיה לשים את שתי התגיות בקביעות על כל פוסט שנוגע לנושא.
- יש תגיות שבהחלט כדאי לצמצם. אני לא רואה טעם ביותר מתגית אחת עבור .Net Framework 3.5 (אפשר לראות בחיפוש על פי תגיות שיש גם ל - 3.5 שתי תגיות וגם ל - 3.0 שתי תגיות).
בנוסף מיכל כתבה כי "בסיעור המוחות האחרון שהיה גילינו שמעט מאוד אנשים משתמשים בניווט דרך תגיות". לדעתי הגולשים לא ממש מצליחים לנווט באתר עם התגיות, אז הם מוותרים על השימוש בהן.
אם גולש רוצה לחפש פוסטים על Framework 3.5 העובדה שיש שתי תגיות לנושא הזה תגרום לו להבין שאם הוא ילחץ על אחת מהן - כל הפוסטים שמתוייגים בשניה לא יופיעו בתוצאות, וככל שנכנסים עמוק יותר המצב הופך גרוע יותר (מבולבלים? גם אנחנו).
גם אני ניסיתי מספר פעמים להשתמש בתגיות (ודווקא ב - CodePlex הן די שימושיות) והתאכזבתי. אני אישית משתדל לשמור על איזה עקביות עם התגיות שכבר קיימות (למרות שגם זה לא הכי עזר).
בשורה תחתונה אני מאוד תומך ברעיון שאיתי העלה, אני חושב שאולי כדאי להרים את הכפפה, ולשאול - מי מעוניין להצטרף ליוזמה?
אני סבור שתחזוקה טובה של מנגנון התגיות גם תקל על המשתמש וגם תגדיל את הכניסות לבלוג שלכם (מכיוון שהבלוג שלכם תמיד יהיו מתוייג תחת התגיות שרוב המשתמשים ילחצו עליהן).
ועוד רעיון בנוגע לאנגלית: לדעתי הוספה של התגית "English" לכל הפוסטים שכתובים באנגלית תהיה מאוד שימושית עבור גולשים זרים (כך גם יהיה ניתן ליצור דף בית באנגלית שיביא את כל הפוסטים המתוייגים כ - English, וגם אם לא יהיה אחד כזה, הגולש יוכל פשוט ללחוץ על התגית English).
אז מה דעתכם\ן והאם אתם\ן מצטרפים\ות?
השאלה:
יש לי את הקוד הבא בקלאס כל שהוא:
private float _thickness;
internal float _Thickness
{
get
{
return _thickness;
}
set
{
_thickness = value;
}
}
השאלה שלי היא מה ההבדל בין _thickness לבין _Thickness?
אחד מהעקרונות ב - OOP (ר"ת של Object Oriented Programing) הוא Encapsulation (בעברית יכול להקרא גם "כימוס").
נניח שאתה יוצר Class כלשהו שיש לו התנהגות מסויימת, מבחינת המפתח שמשתמש בו, הקלאס (להלן "המחלקה") היא קופסה שחורה שעושה משהו. (לדוגמה המחלקה Random מחזירה מספר רנדומלי. מבחינתך זה לא משנה איך).
בכדי לממש מחלקה שתעשה פעולה כלשהי, לעתים יש צורך בשימוש במשתנים מסויימים. במקרה של הדוגמה שהבאת מדובר על private _thickness. סביר להניח שלא תרצה שהמתכנת שמשתמש במחלקה יוכל לגעת ב - thickness בצורה ישירה, מכיוון שהוא לא יודע איך המחלקה עובדת מאחורי הקלעים, ולכן זה עלול לגרום לתוצאות לא רצויות.
בכדי לחשוף את ה - thickness למפתח (נניח שאתה מעוניין לתת לו לראות מה הערך אך לא לשנות אותו), היה נהוג להשתמש במתודות שנקראות get_Thickness, ובכדי לקבוע את הערך ב - set_Tickness.
ה - set יכול לשמש גם לבדיקות (לדוגמה ה - thickness חייב להיות ערך חיובי, לכן לא תרצה שהמשתמש יוכל לגשת ל - thickness ולשים בו ערך שלילי). הפתרון לזה היה נראה כך (בלי Properties):
internal sealed class MyClass
{
private float _thickness;
public float get_Thickness()
{
return _thickness;
}
public void set_Thickness(float value)
{
if (value <= 0)
throw new InvalidArgumentException("Thickness must be
greater than 0!!!!11");
_thickness = value;
}
}
מיקרוסופט החליטו לתת פתרון למצב הזה (הקוד הזה מאוד מאוד נפוץ בתכנות OOPי), והציגו את ה - Properties,
הקוד עם Properties יראה כך:
internal sealed class MyClass
{
private float _thickness;
public float Thickness
{
get
{
return _thickness;
}
set
{
if (value <= 0)
throw new InvalidArgumentException("Thickness must be
greater than 0!!!!11");
_thickness = value;
}
}
}
ל -get ול - set האלו קוראים Properties, (גם getter ו - setter)
השימוש במחלקה יראה כך (בלי ועם Properties):
// Sample code without properties
MyClass mc = new MyClass();
mc.set_Tickness(1.0);
Console.WriteLine("{0}", mc.get_Tickness());
// Sample code with properties:
MyClass mc = new MyClass();
mc.Thickness = 1.0;
Console.WriteLine("{0}", mc.Thickness);
בשורה תחתונה מדובר על אותה פונקציונליות, רק הקוד נראה יותר אסתטי, ודורש פחות כתיבה עם properties (ה - properties מתורגמים בסופו של דבר לפונקציות get_xxx ו - set_xxx דבר שה - CLR דואגת לו).
דרך אגב Martin Fowler ו - Jeffrey Richter כתבו את דעתם והם לא ממש בעד העניין. מעניין לקרוא את דעתם.