Здравствуйте, Доктор ТуамОсес, Вы писали:
ДТ>Здравствуйте, YetAnotherOne, Вы писали:
YAO>>Говнокод ли это? ДТ>Такие вопросы лучше завать rl=http://govnokod.ru/cpp]ТУТ[u
а причем тут с++?
Здравствуйте, YetAnotherOne, Вы писали:
YAO>Как вы считаете, является ли данный класс говнокодом? Если бы вам предложили поддерживать проект с подобным кодом, вы бы были в восторге или огорчились бы? По сравнению с качеством кода в вашей конторе хуже или лучше? Во сколько бы оценили по 5-ти бальной шкале?
YAO>Код:
С точки зрения оформления/написания (а не банально работоспособности) я оцениваю код по тому, на сколько он последователен, не противоречив.
Что видно здесь: какие-то (private) методы названы в камеле, какие-то (internal) в паскале. Это в топку. Свойство, возвращающее string и при этом которое [CanBeNull] туда-же. Строковое свойство не должно возвращать null. Вместо него надо возвращать String.Empty, что бы избавить вызывающего от не нужных проверок (а когда проверка нужна, то проверка на null и на String.IsNullOrEmpty() — не велика разница). К тому же, если свойства реализованы явно (а не автосвойствами) принято снабжать get-accessor атрибутом [DebuggerStepThrough]. Без этого не редко отладка превращается в чёрте-что.
Дальше — разбить большие методы на несколько поменьше было бы полезно: невооружённым взглядом видно, что, например, вынесение вычисления энкодинга никому не помешает. Литералы так же полезно объявить заранее в виде констант, хотя бы в самом методе. Захардкоженный текст сообщений об ошибках я ещё почему-то могу понять, если он на _английском_, но на русском такое категорически не переваривается.
Вообще, если окинуть взглядом весь класс, видно, что вся его работа заключается в том, что бы из пары (StreamReader) получить тройку (HttpHeaders, string, Encoding). При этом зачем-то используются пара статических методов и один экземплярный, который меняет поля объекта, которому принадлежит. Я бы так и написал несколько бы статических методов, которые вычисляют
HttpHeaders в зависимости от того, какая фабрика вызвана: ParseRequest или ParseResponse
Encoding по вычесленному выше HttpHeaders
string и энкодинг по стриму, хидерам и энкодингу из хидеров.
Получилось бы три независимых метода. Вызвал их по очереди (не в конструкторе), получил три переменных, после этого создавай неизменяемый объект из трёх полей и возвращай его.
Учитывая же ошибки в коде (отсутствие проверок в стриме и то, что стрим может закрыться после того, как бдует передан в этот код) ценность его чуть больше нуля.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Nik_1, Вы писали: N_>Здравствуйте, Доктор ТуамОсес, Вы писали: ДТ>>Такие вопросы лучше завать rl=http://govnokod.ru/cpp]ТУТ[u N_>а причем тут с++?
----------------------------
Не хотите С++ там есть гавнокод ещё на 18-ти языках
Здравствуйте, YetAnotherOne, Вы писали:
YAO>Как вы считаете, является ли данный класс говнокодом? Если бы вам предложили поддерживать проект с подобным кодом, вы бы были в восторге или огорчились бы? По сравнению с качеством кода в вашей конторе хуже или лучше? Во сколько бы оценили по 5-ти бальной шкале?
Из минусов — сообщения об ошибках и комментарии на русском языке. По остальному — по-моему, нельзя давать оценки какому-то коду без учёта условий, в которых он писался, и целей, для которых он писался. В зависимости от них, один и тот же код может быть как хорошим, так и плохим.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, тс, Вы писали:
тс>>Это не говнокод, это говноязык
L>да шо ви говорите! и что же в ваших краях признается за не-говно язык?
Здравствуйте, тс, Вы писали:
тс>Здравствуйте, Lloyd, Вы писали:
L>>Здравствуйте, тс, Вы писали:
тс>>>Это не говнокод, это говноязык
L>>да шо ви говорите! и что же в ваших краях признается за не-говно язык?
тс>Естессно c++11
А Вы видели исходники либов, которые пишет мелкософт на этом НЕ-говноязыке?
Здравствуйте, Доктор ТуамОсес, Вы писали:
ДТ>Тем не менее это реальный код из микрософтовского инклуда c:\Program Files\Microsoft Visual Studio\VC98\Include\COMDEF.H студии MSVC++ 6.0
Предлагаю показать мастер класс, и показать, как написать этот майкрософтовский код более коротко и понятно. Уверен, что если получится, от предложений о работе просто отбоя не будет.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Доктор ТуамОсес, Вы писали:
ДТ>>Тем не менее это реальный код из микрософтовского инклуда c:\Program Files\Microsoft Visual Studio\VC98\Include\COMDEF.H студии MSVC++ 6.0 E>Предлагаю показать мастер класс, и показать, как написать этот майкрософтовский код более коротко и понятно. Уверен, что если получится, от предложений о работе просто отбоя не будет.
Своим сарказмом Вы, как я полагаю, хотите сказать что это невозможно?
Тогда почему Вы обиделись, когда я недвусмысленно намекнул, что с++ — это, вообще говоря гавноязык (хоть С++ программисты и являются самой многочисленной среди всех программистов группой)?
Здравствуйте, Доктор ТуамОсес, Вы писали: L>>>да шо ви говорите! и что же в ваших краях признается за не-говно язык? тс>>Естессно c++11 ДТ>А Вы видели исходники либов, которые пишет мелкософт на этом НЕ-говноязыке?
Здравствуйте, Доктор ТуамОсес, Вы писали:
ДТ>Здравствуйте, тс, Вы писали:
тс>>Здравствуйте, Lloyd, Вы писали:
L>>>Здравствуйте, тс, Вы писали:
тс>>>>Это не говнокод, это говноязык
L>>>да шо ви говорите! и что же в ваших краях признается за не-говно язык?
тс>>Естессно c++11
ДТ>А Вы видели исходники либов, которые пишет мелкософт на этом НЕ-говноязыке?
Что-то может видел.
Но зачем мелкософту c++, когда у него есть .Net
Здравствуйте, Доктор ТуамОсес, Вы писали:
ДТ>Своим сарказмом Вы, как я полагаю, хотите сказать что это невозможно?
Вот я и предлагаю показать, как это сделать. Навскидку я после 6 летнего перерыва не скажу, как написать равноценный макрос, который значительно сокращает вышеуказанный код (в идеале его можно укоротить в 3 раза). Покажите класс, напишите такой макрос прямо здесь, думаю как минимум на джуниора вас возьмут точно. Я бы взял, так как джуниор такого точно не напишет. ДТ>Тогда почему Вы обиделись, когда я недвусмысленно намекнул, что с++ — это, вообще говоря гавноязык (хоть С++ программисты и являются самой многочисленной среди всех программистов группой)?
Во первых, я ни на что не обижался, меня обидеть весьма непросто даже специально. А во вторых, я знаю только один говноязык. Это бейсик, который был в 80-х годах. Без процедур, с односимвольными переменными и тому подобным. Как на нем написать что то серьезное — не представляю, лично мне в то время на ассемблере было на порядок проще писать. Любой другой язык, включая Visual Basic, PHP — с моей точки зрения говноязыком не является.