-
Список говнокодов пользователя eval_2009
Всего: 20
-
+111
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
public const string Message = "messagebox";
public const string Message_Error = "messagebox.error";
public const string Message_Question = "messagebox.question";
public void ProcessUrl(string url, object urlContext, EventHandler<ProcessUrlArgs> callback)
{
switch (url)
{
case Url.Message:
urlArgs.Result = XtraMessageBox.Show((string) urlContext, captionText, MessageBoxButtons.OK,
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
callback(this, urlArgs);
return;
case Url.Message_Error:
urlArgs.Result = XtraMessageBox.Show((string) urlContext, captionText, MessageBoxButtons.OK,
MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
callback(this, urlArgs);
return;
case Url.Message_Question:
urlArgs.Result = XtraMessageBox.Show((string) urlContext, captionText, MessageBoxButtons.OKCancel,
MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
callback(this, urlArgs);
return;
}
// дальше идет уже ручная разборка Url
Человек изобрел своего диспетчера контролов внутри формы. Вместо специфических методов вызывающий формирует строку вида
"command.subcommand.parameter1.parameter 2", передается диспетчеру а он уже парсит это обратно.
К примеру "prefix.persons.view.23.all" означает что нужно создать юзер контрол PersonDetail для персоны с id 23 и показать все опции. Но можно передать и "message" тогда покажется messagebox. Все это происходит внутри одного UI модуля, и все классы internal. более того, этих usercontrols всего 4 разных и все это говно можно заменить на 4 метода с парой параметров в каждом. Но там было бы слишком просто и легко отслеживать что откуда вызывается. А в случае единственного метода ProcessUrl (который не url :) ) все гораздо веселее.
eval_2009,
30 Марта 2011
-
+115
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
columnDomain.Visible =
(grid.MainView.RowCount >
0
&&
!String.IsNullOrEmpty(
((ListItem)
grid.MainView.
GetRow(0)).Domain)
&&
((ListItem)
grid.MainView.GetRow(0))
.Domain !=
((ListItem)
grid.MainView.GetRow(0))
.DisplayName);
Это реальное форматирование кода, очевидно сделанное для удобства чтения на узком и высокои мониторе :) И такого многие и многие экраны
eval_2009,
29 Марта 2011
-
+112
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
static Concept()
{
s_deserialize = new Dictionary<string, deserializationHandler>
{{"1.0", (deserialize_1_0)}};
}
private static void serialize(Concept concept, BinaryWriter writer)
{
writer.Write ( concept.Name );
writer.Write ( concept.Score );
writer.Write ( concept.Documents.Count );
foreach (var doc in concept.Documents)
writer.Write(doc.ToString());
writer.Write ( concept.Nested.Count );
foreach (var nested in concept.Nested)
serialize ( nested, writer );
}
public static List<Concept> Deserialize(Stream stream)
{
using (var reader = new BinaryReader(stream, Encoding.UTF8))
{
var version = reader.ReadString();
if (!s_deserialize.ContainsKey(version))
throw new NotSupportedException(String.Format("Unsupported version of format. Version: {0}", version));
var concepts = new List<Concept>(50);
s_deserialize[version](null, concepts, reader);
return concepts;
}
}
private delegate void deserializationHandler(Concept parent, IList<Concept> concepts, BinaryReader reader);
private static readonly Dictionary<string, deserializationHandler> s_deserialize;
private static int s_lastId = 0;
private static int getNextConceptId()
{
if (s_lastId == Int32.MaxValue)
s_lastId = 0;
return System.Threading.Interlocked.Increment(ref s_lastId);
}
private static void deserialize_1_0(Concept parent, IList<Concept> concepts, BinaryReader reader)
{
for (var i = reader.ReadInt32(); i > 0; i--)
{
var c = new Concept(reader.ReadString(), reader.ReadDouble(), parent);
concepts.Add(c);
for (var d = reader.ReadInt32(); d > 0; d--)
c.Documents.Add(Convert.ToInt32(reader.ReadString()));
deserialize_1_0(c, c.Nested, reader);
}
}
}
Человек в очередной раз изобрел свой велосипед, на этот раз как сериализовать _свои_ классы - с поддержкой версий! По тому что некоторые переменные в классе были помечены [NonSerialized] было похоже что он что то слышал про уже имеющиеся но решил как обычно что самописный - всегда лучше. Но аттрибуты оставил - на всякий пожарный :)
eval_2009,
13 Января 2011
-
+104
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
public class BuildActivity
{
private class RequestLimit : ICloneable
{
//несколько свойств
}
private class Request : IDisposable
{
// оберка вокруг stream
}
private class Response
{
// несколько методов
}
private class Document
{
// 4 простых свойства
}
//примерно с десяток методов
}
еще один пример навороченных структур на ровном месте. В достаточно простом классе имеем 4 (sic!) private вложенных класса - которые ниоткуда никем больше не используются. Все потому что человек не умел дизайнить классы так что бы не приходилось временные данные передавать из одной процедуры в другую. Страшно представить что он будет писать когда узнает про Tupels :)
eval_2009,
11 Января 2011
-
+126
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
if (_documentsCount < 0)
{
var docs = new HashSet<int>();
_manager.WalkThroughConcepts(delegate(Concept concept, CancelEventArgs cargs)
{
foreach (var doc in concept.Documents)
docs.Add(doc);
});
_documentsCount = docs.Count;
}
return _documentsCount;
Как сосчитать количество документов в дереве? очень просто - надо всех их добавить в один список (и для этого сделать цикл в каждом узле, разумеется) а потом вернуть количество элементов в списке.
eval_2009,
06 Января 2011
-
+116
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
public delegate IEnumerable<int> ProcessStrategy();
public class ProcessEventArgs: EventArgs
{
public ProcessStrategy { get; set; }
}
public IEnumerable<int> GetSelectedDocuments()
{
var args = new ProcessEventArgs();
if (args.Strategy == null)
{
args.Strategy = delegate()
{
var result = new HashSet<int>();
WalkThrough(
delegate(ConceptInfo concept, CancelEventArgs cargs)
{
foreach (var doc in concept.Documents)
result.Add(doc);
}, State.Selected);
return result;
};
}
return args.Strategy();
}
Обьявляем делегат, потом обьявляем класс от EventArgs в котором (в EventArgs!) будет передаваться этот самый делегат.
Потом в нужном методе создаем экземпляр класса ProcessEventArgs, проверяем делегат на null - откуда он берется не null в только что созданном непонятно, но помним про прикол с Manager singleton того же автора :), присваеваем его делегату собственно код который и совершает необходимые операции, а потом....
Потом просто вызываем свежесозданый делегат.
eval_2009,
06 Января 2011
-
+108
- 1
- 2
- 3
- 4
- 5
- 6
- 7
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
btnCancel_Click(sender, EventArgs.Empty);
}
}
Форма - модальный диалог, Cancel кнопка обычная - никаких причин просто выставить у нее DialogResult в Cancel не было. Но ведь так нагляднее!
eval_2009,
05 Января 2011
-
+117
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
#region methods
private bool _updatingState;
public class ProcessArgs : EventArgs
{
}
internal event EventHandler<ProcessArgs> OnBeforeProcess;
public abstract void Process(IEnumerable<DataSource> data);
// Тут еще много всего, на удивление есть и методы
#endregion
#region properties
private readonly IList<IResult> _results = new List<IResult>(100);
private void buildResultsList()
{
//код
}
// ну и немного свойств
#endregion
#region events
public delegate IEnumerable<int> Strategy();
public class StrategyEventArgs : EventArgs
{
public Strategy Strategy { get; set; }
}
public event EventHandler OnResultsLoading;
private void raiseOnResultsLoading()
{
foreach (EventHandler handler in OnResultsLoading.GetInvocationList())
handler(this, EventArgs.Empty);
}
#endregion
#region members
// пусто - все мемберы сидят по другим region
#endregion
За что я не люблю regions, особенно у говнокодеров. Зато если просто открыть файлик то выглядит все замечательно, чисто и аккуратно.
eval_2009,
05 Января 2011
-
+112
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
public static class EntryPoint
{
private class NotFoundException : ApplicationException
{
public FoundException(int id, SourceType type)
private SourceType Type { get; set; }
private int Id { get; set; }
}
private class InProgressException : ApplicationException
{
public InProgressException(int id, SourceType type)
{
Type = type;
Id = id;
}
private UserViewSourceType Type { get; set; }
private int Id { get; set; }
}
public static void Analyze(SourceType type, IEnumerable<int> dataId)
{
try
{
initialize(type, dataId);
}
catch (InProgressException)
{
// немного говнокода
}
catch (NotFoundException)
{
// немного говнокода
}
}
Для того что бы внутри статического класса между двумя процедурами наладить связь (Analyze - initilize) человек определил два новых типа exceptions (private) и дал им дополнительные свойства которые нигде не используются. Exceptions эти больше нигде кроме initialize не кидаются и нигде кроме Analyze не ловятся. Ну и initialize больше ниоткуда кроме Analyze не вызывается.
В итоге имеем два лишних класса и тучу кода который можно без помех удалить, чем я собственно и занимаюсь :)
eval_2009,
05 Января 2011
-
+125
- 1
- 2
- 3
- 4
- 5
- 6
- 7
static void Initialize()
{
if (Manager.Current == null)
{
new Manager();
}
}
человек изобрел новый тип singleton, instance которого выставляется при вызове конструктора его типа. Если вызвать два раза - второй перекроет первый. Тип public, конструктор тоже public
eval_2009,
05 Января 2011