Loading...
mihayloff14 avatar mihayloff14 824 Точки

[Judge] OOP - Валидация и exception-и по време на изпит

Здравейте,

В момента се подготвям за изпита и забелязах един куриозен случай. Когато трябва да се валидира нещо, се изисква да се хвърлят дадени exception-и в определен формат. Например в моя случай:

Throw appropriate exception when data validation fails. When there is an error in a parameter (such as a missing required parameter), throw an ArgumentException, and when there is a forbidden or meaningless method, throw an InvalidOperationException.

The messages for the exceptions should be as follows:

  • For required parameters: The <parameter> is required.
  • For parameters with only positive values: The <parameter> must be positive.

Мисълта ми е, доколко съобщенията, които съдържат exception-ите трябва да отговарят на тези изисквания, тъй като всички знаем, че judge системата изисква абсолютна точност при форматиране на стрингове. Освен това, не ми е ясно какви точно exception-и се хвърлят в различните случаи. Според моето тълкуване, ArgumentException се хвърля винаги при валидация на някакви данни в property-та, докато InvalidOperationException - при грешки в някои методи. Така ли е наистина или се бъркам?

Като цяло, бих искал да разбера дали тези изисквания трябва да се спазват, за да може да минат тестовете в judge или може би те ще бъдат оценявани от проверяващите, за да знаем доколко да се придържаме стриктно към подобни изисквания.

1
C# OOP Basics 02/03/2015 10:36:24
a_rusenov avatar a_rusenov 1103 Точки

Задължително се прави валидация. Ако съобщенията трябва да бъдет в определен формат, то ще бъде казано в условието. В противен случай, правите си редовна валидация с подходящ тип exception + смислено съобщение.

Относно кога какъв exception да хвърляш:

  • ArgumentException - при невалиден аргумент (т.е. причината за възникналата грешка е подаденият аргумент)
  • InvalidOperationException - при изпълняване на някое непозволено действие

В случая на тази задача се изисква хвърлянето на тези 2 ексепшъна (предполагам, защото само те се catch-ват), но това далеч не означава, че са най-подходящите попринцип.

0
28/02/2015 16:52:04
RoYaL avatar RoYaL Trainer 6849 Точки

Long story short, като имаш примерно да създадеш AirTicket и рейнджа на цената е от 10 лв до 3000 лв и инпута идва то потребителя (judge-a) и ти съответно имаш във валидацията на пропъртито Price хвърляне на ексепшън ако value < 10 || value > 3000, този ексепшън ще се появи в конзолата когато някой ти подаде "AirTicket 8000 Sofia Varna". И ако е различен текста, от този който е заложен като expected output ще фейлнеш в judge-а. Така, че да - текстовете трябва да са същите. Типовете ексепшъни трябва да са подходящи, защото после ще има проверка на ръка - и съответно ще ти се вземат точки, ако примерно си хвърлил NullReferenceException за цената, при положение, че е примерно InvalidArgumentException по-правилният.

0
mihayloff14 avatar mihayloff14 824 Точки

Добре, но в случая форматите, които са казани в условието са:

 The <parameter> must be positive. или The <parameter> is required.

На повечето валидации, този формат е подходящ, но има случаи в които валидацията е ралична от това да провериш дали дадено число е положително или дали даден стринг е празен. Например както в случая с AirTicket, който даде като пример как трябва да бъде форматирано съобщението? 

The AirTicket must be between 10 and 3000 или The AirTicket cannot be less than 10 or more than 3000? - примерно.

0
28/02/2015 17:07:16
RoYaL avatar RoYaL Trainer 6849 Точки

Ако имаш такъв случай, най-вероятно ще ти е дадено и в условието какво трябва да пишеш :) Например ще пише, че всички задължителни са "The parameter <name> is required" и че всички, които са в даден рейндж са "The parameter <name> must be between <min> and <max>"

0
28/02/2015 17:28:56
mihayloff14 avatar mihayloff14 824 Точки

В случая не е дадено това.

Става въпрос за задача MusicShopManager от поправката по ООП - 19 януари.

Във частта, в която се казва каква да е валидацията пише следното:

Guitar validity rules:

  • Body and fingerboard wood are required (cannot be missing or blank)
  • Guitars generally have six strings (bass guitars have only four)

В посочените формати не е описано как трябва да изглежда съобщението за този exception. Това което съм направил е да изисквам точно 6 струни освен в случаите когато китарата е bass, но не съм сигурен как да го опиша.

 

0
iordan_93 avatar iordan_93 Trainer 407 Точки

Здравей,

Валидацията в тези задачи (Restaurant Manager и Music Shop Manager) е направена само заради ръчната проверка. Естествено, че в реална ситуация ще хвърляш подходящите exception-и.

Указанията за типовете exception-и, които трябва да се хвърлят в отделните случаи са само за улеснение на студентите, защото това е изпитна задача Така от една страна студентите не се чудят кой точно exception е най-подходящ, от друга страна проверяващите гледат по-малко бисери laughing.

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