حوار الـ Public Properties

 

Dog Chasing His Tail Royalty Free Vector Clip Art Illustration - Dog Catching Its Tail@seekpng.com
ملحوظة: قبل ما تقروا الحوار ده، لو مش عارفين مين دوناتيلو، اقروا عنه هنا،

في يوم ما طلعتلوش ملامح،

و انا شغال على جزء في الكود بعمل له refactoring كبير، لاحظت حاجة غريبة في جزئية مالهاش علاقة "اوي" بالحتة اللي انا فيها. في property (و ليكن اسمها ShoeSize) على class احنا مش بنستخدمها خالص. يعني دايما بنحط فيها قيمة، لكن عمرنا ما بنقراها. فمن باب النظافة من الإيمان، قررت اشيل الخرا ده.

خلصت الشغل و اختبرت الtests و كله سليم و اخضر و 100 فل و 17 و اديت دوناتيلو الPR عشان يراجعها.

و إذ يا مؤمن لقيت دوناتيلو اتشال و اتحط و انتنفض و العِرق حيطق من نفوخه و دار الحوار ده:

د : انت ازاي تشيل الproperty دي؟ رجعها تاني
م : عيب عليك، مالهاش لازمة. انا دورت كويس و لقيتها مش مستخدمة ف شيلتها و اتأكدت ان مافيش test باظ. 
د : لأ احنا محتاجينها 
م : يابني بقول لك مش مستخدمة 
د : ماليش دعوة 
م : طب واحدة واحدة. هي مش مستخدمة، حاتفرق في ايه لو اتشالت؟ 
د : ماعرفش، بس احنا محتاجينها. دي كان requirement 
م : ازاي و هي مش مستخدمة؟ ده كلام مش منطقي 
د : اه بس انا ح اوريك.  
و راح فاتح جيرا و موريني كارت. الكارت كان فاضي، فيما عدا العنوان. و العنوان بيقول "ضيف الproperty دي"  
د : اهو اتفضل  
م : دي يابني مش requirement. ده كلام في الهوا مالوش سياق اصلا و ممكن يكون اتغير. و بعدين في المشكلة اللي بنحلها؟ مش عشان كارت قديم بيقول اعمل كده انا الغي عقلي.  
د:  طب حوريك السيناريو اللي حيبوظ  
و قام هوب فاتح السيستم و وراني سيناريو على QA 
د : الكود اللي انت شلته مش حيخلي السيناريو ده يشتغل  
م : ماشي، ازاي بقى و هو اصلا مش بيتقري؟ ده كلام مش منطقي 
د : انا عارف انه مش منطقي بس انا بقول لك ان الكود ده هو اللي مشغل الحتة دي  
م : طيب، انا حاجربها و اشوف 

 قررت اجرب السيناريو - مش عشان هو كلامه ممكن يكون صح - و لكن من باب اربط الحمار مكان ما الحمار عايز. و خير اللهم اجعله خير السيناريو ماشتغلش.. أن أن أن أااااااه..

قلت اكيد دي باج و موجودة من قبل شغلي. سحبت master و جربت السيناريو......... و اشتغل !!!! أن أن أن أااااااه..

في اللحظة دي، انا بقيت عامل زي الشخص اللي القرآن قال عنه (فبهت الذي كفر). لا انا عارف أفسر ولا مستوعب ولا حتى عندي نظرية ممكن تشرح ايه اللي بيحصل ده، ايه اللي انا شايفه ده!! ما هو اللي حصل ده حاجة من 2 مالهومش ثالث. يا اما في سحر في الموضوع، يا اما الموضوع في سحر.

من فرط ذهولي استسلمت و كنت ح رجع الكود و أمري لله بقى. بس نفسي ماطوعتنيش و قلت "ايه الهطل ده، يعني ايه اشيل كود مش مستخدم السيستم يبوظ؟؟ ناقص المرة الجاية احط كومنت السيستم يقع!!!" و رحت ساحب واحدة اسكندراني و شمرت كمي و نزلت head first في الكود عشان افهم ايه الهطل ده.

قعدت ادور و ارجع في الgit history بتاع الكود قبل ما احط ايدي فيه عشان افهم ايه اللي  حصل لحد ما فتحت الclass اللي فيه الproperty دي - و يا ريتني ما فتحته.

الكلاس للتبسيط كان شكله كده:
public class Metadata {
  public string ShoeSize {get; set;}
}

public class Person {
  public Metadata metadata {get; set;}
  // الخازوق
  public string ShoeSize {
    get => metadata.ShoeSize;
    set => metadata.ShoeSize= value;
   }
}
البيــــــــــه (بصوت رمضان السكري) ، طلع عامل public property بتشاور على public property تانية. ف لما بيقراـ بيقرا من person.metadata.shoesize و لما بيكتب، بيكتب في person.shoesize. مع إن الاثنين بيكتبوا و يقروا نفس الvariable. فطبعا كواحد بيقرا الكود و مفترض انه 'clean code' و لقيت عندنا property عمرنا ما بنقراها، يبقى اكيد مالهاش لازمة فشيلتها من جذورها.

بصوا، لو مش فاهمين، انا ححاول اقربهلكم بمثل متطابق بنسبة 90% (عشان مش لاقي اي حاجة طبيعية توصف الهطل ده).
تخيل أنك اشتريت كلب. و لما وصلك البيت طلع براسين. انت طبعا تقرر تحسن حياته و تعمل له عملية عشان  تقطع راسه اللي شكله مش بيستخدمها اوي دي. و هوب تقطع راسه فتكتشف انك انت اللي عينك كانت مزغللة و هو عنده راس واحدة اصلاً و الدم سايح في كل حتة و آخر زروطة. 

طبعا مش محتاج اقول لكم على كم الأماكن اللي لقيته بيعمل فيها 


var c = new Person {
   metadata.ShoeSize = 5,
   ShoeSize = 5
};

اللي هو بنحط قيمة في نفس الحاجة مرتين بطرق مختلفة.


و كمان لقيت

public class Item {
  public int EntityId {get; set;}
  public int Id => {
   get => EntityId;
    set => this.EntityId = value;
    }};


ليه يا مؤمن؟ عشان الموديل ده بيجيلنا من third party و اسم EntityId مش عاجبه بروح ست الحبايب يا حبيبة بتاعته. ف انت طبيعي من (غير ما تبص عالclass) تفهم ان الId و الEntityId حاجتين مختلفتين. بس هما حاجة واحدة فعليا.


بصرحة، انا شفت القرف ده و حسيت ان دماغي بتلف. صدعت و بقيت مقريف، فقفلت اللابتوب و قمت من ع الشغل.

حسيت اني عايز - لأ مش عايز - لازم انسى الي حصل النهاردا، و ماكانش قدامي غير حل واحد.

نزلت فتحت ازازة كونياك جديدة و صبيت لي كاس صغير - و بعزم ما فيا رحت باطحني بالإزازة في دماغي. 

نشوفكم في الحوار اللي جاي...

تعليقات