Loading...
IliyanPopov avatar IliyanPopov 0 Точки

Въпрос относно ооп дизайна на 11 задача от Enumerations and Attributes - Inferno Infinity

Здравейте на всички.

Реших 11 задча Inferno Infinity и се чудя до колко ми е правилен дизайна.

Първо имах 3 каласа за gem, и gemfactory. След това реших да ги махна и останах само с 1 клас

Коректен ли е начина по който добавям и премахвам нови камъни към оръжието ?

Някак не ми се стори коректно в класът weapon да имам референция към gemFactory

Имам репоситори(мисля си че така може да се екстендне да пази в база данни сравнително лесно) в което при стартиране зареждам всички видове камъни .

Command pattern не съм имплементирал още, но ще го направя.

Иначе решението дава 100/100 в judge

Ще се радвам на градивни критики, поздрави

 

линк към файла със задачата;

https://drive.google.com/open?id=0BzPCsQoVRGpbWXloTEt2Yy1iM0E

 

линк към условието:

https://judge.softuni.bg/Contests/Compete/DownloadResource/1541

Тагове:
0
Module: C# Advanced 31/07/2017 17:18:22
vdim15 avatar vdim15 Trainer 43 Точки
Best Answer

Здравей, разгледах ти набързо кода и имам няколко въпроса и препоръки към теб:

Относно камъните (Gems) - подходът, който си избрал с това да имаш още едно поле, което да носи типа на камъка, вместо отделник конкретни класове за тези типове виждаш, че води до доста излишни switch-case конструкции на няколко места. Бих те посъветвал да ги изнесеш в класове, точно както си направил с оръжията. Ситуацията е аналогична.

Относно оръжията - имаш едни изнесени константи, не е лошо нещо...обаче трябват ли ти наистина някъде другаде освен при създаването на конкретното оръжие? Но това не е кой знае какво. Хубаво си ги разделил в класове, но в абстрактния клас виждам едни автоматични пропъртите и заедно с тях, едни методи, които заместват get-a, отново с доста switch-case конструкции. Точно затова ползваме енумерация, за да можеш да кажеш на съответното пропърти да върне резултат модифициран спрямо тази енумерация, каквато и да е стойността ѝ в конкретната инстанция на класа. За да се възползваш от това удобство разбира се, трябва да презапишеш стойността на членовете на съответните енумерации по този начин -> Common = 1, Regular = 2 и т.н., защото в случая не са последователни и дефолтните стойности отдолу не ти вършат работа.

И други неща мога да коментирам, но мисля, че ако поработиш над това, сам ще се сетиш как можеш да подобриш кода още повече от към четимост и ефективност.

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