Loading...
DonchoPatronski avatar DonchoPatronski 35 Точки

"Отсъства reflection." ? Коментар от проверката [C# OOP Advanced Exam, 7 Aug 2016]

Има ли други хора с този коментар, които ползват reflection-а от началния проект с условието?
Във функцията ProcessWaste(IWaste garbage) има GetCustomAttributes който е от Namespace:   System.Reflection
Ако взимането на атрибута на клас не е рефлекшън тогава какво е? Защо не ни е казано да не разчитаме, че само имплементирания на готово рефлекшън ще ни е достатъчен за да имаме максимум точки от графата Reflection?

Имам 30 точки от Judge разчитайки на ProcessWaste(IWaste garbage). Това трябва да е доказателство, че го ползвам правилно и не съм го закоментирал.

Това ми е функцията. Почти не е променена. Само съм добавил .BaseType защото не работеше.

        public IProcessingData ProcessWaste(IWaste garbage)
        {
            Type type = garbage.GetType();
            DisposableAttribute disposalAttribute = 
                (DisposableAttribute)type
                .GetCustomAttributes(true)
                .FirstOrDefault(x => x.GetType().BaseType == typeof(DisposableAttribute));

            IGarbageDisposalStrategy currentStrategy;
            if (disposalAttribute == null 
                || !this.StrategyHolder.GetDisposalStrategies.TryGetValue(disposalAttribute.GetType(), out currentStrategy))
            {
                throw new ArgumentException(
                    "The passed in garbage does not implement a supported Disposable Strategy Attribute.");
            }

            return currentStrategy.ProcessGarbage(garbage);
        }

Тагове:
3
C# OOP Advanced
StaVykoV avatar StaVykoV 169 Точки

A добавял ли си написан от теб рефлекшън? Примерно за команд патърн или някое фактори ако си имплементирал.

Ако не си, този коментар е нормален. Скелета се оценява само за това дали е поправен да работи и според принципите на OOP. Рефлекшъна се гледа като част от това "Extend your program to be able to handle ANY garbage type - in other words newly introduced model classes should be able to work with your program without the need to rewrite any core logic." Реално е невъзможно без рефлекшън да направиш така, че да не трябва да се пипа Core логиката при добавяне на нов WasteType.

П.П. Може да има начин без рефлекшън, но не е било част от този курс...

 

1
18/08/2016 22:16:43
DonchoPatronski avatar DonchoPatronski 35 Точки

Ами в случая аз по какъв начин трябва да променя core локиката. Имам предвид че това ще продължава да работи.
1. Добавям си нов клас от тип Боклук. Анотирам го така че да работи с reflection-a
2. Добавям си клас тип стратегия за усвояване на боклука. Run

Защо ми е да добавям мое като в проекта има? Сложността даже беше да успеем да разберем как да го ползваме. 

Много хора даже вместо да ползват този reflection на готово, са го заобикаляли, например с enum, switch и т.н.

1
18/08/2016 22:58:58
StaVykoV avatar StaVykoV 169 Точки

Aми затова те питам - не знам как си направил добавянето. По принцип при добавянето на Waste в холдъра се добавя и неговата стратегия. Аз това го правя с рефлекшън по анотациата му, за да става автоматично. Там с рефлекшън ли го правиш или с ифове или си вкарал типа стратегия в самия waste ( което не е много ок ). ?

2
DonchoPatronski avatar DonchoPatronski 35 Точки

Не стратегиите ми не са в Waste. Различни класове са. Едните наследяват IGarbageDisposalStrategy, другите Waste. Анотациите съм ги сложил само над Waste класовете. IGarbageDisposalStrategy-ите ги добавям ръчно, ред по ред в StrategyHolder. Не съм си играл с тях. Ти и тях ли си оптимизирал с анотации? То кое по напред да направиш за 6 часа - като започнеш с 100те страници условие... Значи може да ползвам просто по-малко reflection, не липсва напълно...

1
19/08/2016 00:27:47
StaVykoV avatar StaVykoV 169 Точки

Ами то това е условието за тези 20 точки - да се направи автоматично. Реално се пише на има няма 5-10 реда. Взимаш анотацията на Waste-a и взимаш името й. По името викаш класа на стратегията й, инициализираш я и я добавяш заедно с waste-a. Пример - Paper -> @Burn -> BurnSrategy.

Taка се прави reusable и не е нужно да добавяш ръчно каквото и да е в холдъра

1
kosio197 avatar kosio197 104 Точки

Колега не го взимаи присърце.

То и аз писах щот бях изумен  - при мен и меин метода не са успели да открият.

Ето ти линк загледаи се в коментарите и си прави изводите !!!

"https://softuni.bg/forum/11257/java-oop-advanced-exam-vyprosi-otnosno-komentara-kym-ocenkata"

Просто са очаквали да видят точно опридилени имплементаций - респективно ако не си ги направил

точно по този начин или не си ги именовал точно по този начин или са в пакет които не е именован точно по този начин ......итн  значи липсват.

Дано да съм ти бил полезен

Поздрави, Косьо

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.