Професионална програма
Loading...
nickwork avatar nickwork 430 Точки
Best Answer

1 и 2 заедно https://easyupload.io/j1xzhg

0
Milko123 avatar Milko123 6 Точки

Благодаря! Честно казано въпреки, че ми даде готово решение, което работи, не мога да разбера как се получава връзката в контролера за принтиране с метода History. Също така къде открояваме кой робот на каква процедура принадлежи и каква е ролята на колекция procedures? 

0
nickwork avatar nickwork 430 Точки

Класът контролер има метод хистори, но ако погледнеш класа процедура, ще видиш ,че и там има също фунцкия с това име хистори, която има тази функционалност

 public abstract class Procedure : IProcedure

public string History()
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine($"{this.GetType().Name}"); // дава името на процедурата

            foreach (var robot in this.robots)
            {
                sb.AppendLine($"{robot.ToString()}");               
            }

            return sb.ToString().TrimEnd();
        }

....тя пък от своя страна вика метод, който е от класа робот (override наToString() метода...името на процедурата я взимаме от тук  ($"{this.GetType().Name}")) който пък от своя страна дава инфо за робота (this.GetType().Name, this.Name, this.happiness, this.energy);)

 

0
Milko123 avatar Milko123 6 Точки

Добре, но примерно в условието пише при Hystory "Returns information about all robots which had current procedure type in the format:", което за мен значи, че  ако се извика команда Hystory Polish това значи, че трябва да се принтират всички роботи, които са преминали Polish. В такъв случай не разбирам листа за процедури в контролера как прави връзката с това, кои роботи каква процедура са преминали. Видях че има Dictionary, но и там не примерно не се казва Key - Procedure, Value - List<IRobot>, които са преминали процедура от даден тип. Може би не разбирам условието

0
nickwork avatar nickwork 430 Точки

Това е метода от класа контролер:

 public string History(string procedureType)
        {
            IProcedure procedure = this.procedures.FirstOrDefault(x => x.GetType().Name == procedureType);

            return procedure.History();
        }

Той приема име на процедура, с това парче код ( IProcedure procedure = this.procedures.FirstOrDefault(x => x.GetType().Name == procedureType); бъркам в колекцията private List<IProcedure> procedures, която се намира в този клас контролер и взимам процедурата с името, което са ми дали като вход. След това извиквам на самата процедура метода procedure.History();, който пък от своя страна ми връща стринг билдера с информацията от предното ми обяснение... (обърни внимание, че всяка процедура има своя колекция с роботи, които влизат в колекцията като извикаме метода DoService())...пробвай да дебъгнеш с някакви данни, имаш цялото решение, следи променливите и смятам че ще ти стане ясно кое от къде се взима..

0
Milko123 avatar Milko123 6 Точки

Аха разбрах. Момента, който ми убягваше е, че всяка процедура си генерира собствена колекция, която се пълни с роботите, които са я преминали, иначе другото ми е ясно. Благодаря!

0
04/08/2020 19:46:12