Saturday, October 24, 2020

Design Patterns: Mediator




პროგრამული უზრუნველყოფის შექმნისას, ამოცანის სპეციფიკიდან გამომდინარე ვაწყდებით სხვადასხვა პრობლემებს, რომლის გადასაჭრელად ვეძებთ მაქსიმალურად ოპტიმალურ გზებს, რათა სისტემა იყოს მდგრადი სამომავლო ცვლილებების მიმართ, იყოს მაქსიმალურად ხელმისაწვდომი და იცოდეს გაუთვალისწინებელ შემთხვევებთან გამკლავება რათა არ გამოვიდეს მწყობრიდან და არ დადგეს უსაფრთხოების პრობლემა.  პროგრამული უზრუნველყოფის ინჟინერიაში, არსებობს სხვადასხვა ტიპის სისტემები და ყველას თავისი სასიცოცხლოდ მნიშნველოვანი სქილები გააჩნია, მაგალითად: ბიზნეს სისტემებმა ფეხი უნდა აუწყონ მომხმარებლის საქმიანობის ცვლილებას, ამისათვის საჭიროა შეუფერხებლად იცვლებოდეს მისი ფუნქციონალი, სამედიცინო სისტემებისთვის კრიტიკულია უსაფრთხოება და ა.შ.

მრავალწლიანი  გამოცდილების შემდეგ გამოჩნდა, რომ პრობლემების უმრავლესობა ერთმანეთს ჰგავს და შესაძლებელია ერთი კონკრეტული გადაწყვეტის სხვადასხვა ამოცანაზე ან მოდულზე მორგება, სწორედ ამას ეწოდება "დიზაინის ნიმუში" ( 😁 ) ანუ Design Pattern. არსებობს უამრავი დიზაინის ნიმუში, მაგრამ ყველაზე პოპულარულია GoF დიზაინის ნიმუშები, სადაც გაერთიანებულია  23 ნიმუში. ეს ნიმუშები კლასიფიცირდება 3 ტიპის მიხედვით: Creational[შემოქმედებითი],  Structural[სტრუქტურული] და Behavioral[ქცევითი] ნიმუშები. ამ კონკრეტულ პოსტში მინდა აღვწერო Mediator ნიმუში, რომელიც ქცევითი ტიპის პატერნებს  განეკუთვნება.

როდესაც OOP (Object-Oriented Programming) ის პრინციპებით ვადეველოპერებთ სისტემას, გვიჩნება სხვადასხვა საჭირო კლასები და მისი ობიექტები. მათი ერთმანეთში ქცევითი ურთიერთქმედება ქმნის სისტემის ფუნქციონალს.  ამოცანის სირთულესთან და სიდიდესთან ერთად განისაზღვრება სწორედ კლასებისა და მისი ობიექტების რაოდენობაც, რაც უფრო დიდია Software Requirement-ები და სისტემის მაშტაბურობა, მით უფრო მეტ ერთმანეთზე ფუნქციურად დამოკიდებულ ობიექტებს ვიღებთ, რამაც შეიძლება კოდში საკმაოდ ბევრი ერთმანეთზე დამოკიდებული მოდულები გააჩინოს. ერთი კლასის ლოგიკის ცვლილებამ შეიძლება გამოიწვიოს მასზე დამოკიდებული სხვა კლასების ცვლილება. მედიატორი სწორედ ამ პრობლემის მოგვარების გზაა. მისი იმპლემენტაციით, შეგვიძლია შევზღუდოთ კლასის ობიექტებს შორის პირდაპირი კომუნიკაცია და ვაიძულოთ ისინი მედიატორის დახმარებით ითანამშრომლონ ერთმანეთთან.




მოდი განვიხილოთ კონკრეტული მაგალითი და C#-ის დახმარებით დავიმპლიმენტიროთ მედიატორი:




გვაქვს Footballer კლასი რომელიც იმპლემენტირებას უკეთებს IFootballer ინტერფეისს. მათში მოქცეულია 2 მეთოდი, KickTheBall  და Move, რომლებიც ვირტუალურად ასახავენ მოედანზე ფეხბურთელის საქმიანობას 😁.



Mediator კლასი რომელიც იმპლემენტირებას უკეთებს IMediator ინტერფეისს. როგორც ხედავთ, Mediator კლასი თავისი მეთოდებით ცდილობს Footballer-კლასს შუამავლობა გაუწიოს. მისი დახმარებით ნებისმიერი სხვა კლასი ურთიერთქმედებას შეძლებს  Footballer კლასთან.




No comments:

Post a Comment

Design Patterns: Strategy

  მეგობრებო, განვაგრძობ პროგრამირების სფეროში არსებული თემების მიმოხილვას. ამ კონკრეტულ პოსტში მიმოვიხილავ  Behavioral Design Pattern [ ქცე...