Loading...
a.angelov avatar a.angelov 1316 Точки

[Homework] High Quality Code - Refactoring - Problem {1} Clean the Smelly Code /Matrica/

Здравейте,

има ли хора направили тази задача?

Ако може някой да даде насоки за изпълнението на 2 и 3 подусловия... :) Търсих инфо от предния випуск, но не са пускали тема за домашното...

Тагове:
2
C# OOP Advanced
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки
Best Answer

Аз тази задача я пренаписах изцяло, защото за мен моят си начин е най-добрият. :)

За първото подусловие: Методите с ref и out са ненужни и доста объркващи. В много редки случаи може да се наложи да се ползва ref, а в още по-редки out. Пример е int.TryParse, който е странен, но е неизбежно и е такава идеята.

Метода CheckCell (proverka), който проверява дали имаме повече възможности (дори не съм сигурен дали това прави), е напълно ненужен. Броя стъпки в матрицата е равен на лицето и - нито повече, нито по-малко. Огромни поздравления за този, който го е написал - възможно най-сложен го е направил. 

Метода Change (change) според мен също е ненужен - аз написах логиката така че да не се налага да изнасям този код в друг метод.

Метода FindCell (find_cell) го направих да връща клас Position с 2 пропъртита, защото е по-разумно. Още по-разумно е Position да е struct, но нека да не издребнявам. Едит : издребнях и го направих struct.

За второто подусловие: В дадения код имаме Main метод, който създава матрицата и директно я принтира. Едно от правилата за качествен код е всеки метод да върши едно нещо. Main метода не прави изключение. По-добре е да направим 2 отделни такива - един за създаване на матрицата и друг за принтирането и в конзолата. След като имаме метод, който създава матрица и е публичен, можем да го ползваме извън това конзолно приложение - като например Unit Test.

За третото подусловие : В авторския код имаше бъг да се повтарят числа.

И накрая моето решение тук! Надявам се да съм бил полезен! :)

2
08/03/2015 05:45:27
a.angelov avatar a.angelov 1316 Точки

Хм..., никой ли не решава задачите по КПК? embarassed

0
Filkolev avatar Filkolev 4482 Точки

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

9
a.angelov avatar a.angelov 1316 Точки

Аз започвам да си мисля, че целта е да спазим принципа - ако е много омазано не рефакторирайте, а пренапишете програмата...

0
Filkolev avatar Filkolev 4482 Точки

Ми аз натам вървя...

0
aivian avatar aivian 51 Точки

Това е моят код:

http://pastebin.com/BfwhwV3P

Доколко е правилен, зависи от тоя, дето го е нагвацал.

0
Filkolev avatar Filkolev 4482 Точки

Някой направил ли е юнит тестове и ако да как? Аз хич не мога да измисля какво да тествам.

2
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Аз съм направил 3 такива тук. Идеята е с помощта на сивия процесор в главата да направиш такива матрици (и да бъдеш сигурен, че са вярни), след това да дадеш на програмата да създаде същите матрици (в случая със същия размер) и да ги сравниш дали са еднакви.

PS: Можеш да направиш и тестове с умишлено невалиден input, за да провериш дали програмата реагира адекватно в такива ситуации, дали хвърля exception, или връща омазана матрица, или просто зацепва и дава not responding. :D

2
08/03/2015 10:56:31
Filkolev avatar Filkolev 4482 Точки

Ами казано е, че входът е валиден и да не го проверяваме, т.е. излиза, че е излишно да се хвърлят ексепшъни, но това с проверката с конкретни стойности ще го направя :)

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