короче стремная контора
на меня сыпют инцеденты.
куча проектов. половина не собирается. везде говнокод типа
try
{
// куча кода
}
catch()
{
// тут кода нет
}
никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами.
задаешь простой вопрос на который можно ответить да-нет-не знаю
отклик день.
кто сталкивался? как вести себя? включить пофигизм?
по всемму коду раскиданы магические числа
переменные с сокращениями. короче так бы код писал ни одного собеса бы не прошел
Либо перенести во флейм (если истинная цель — покидаться какашками, выпустить пар и показать всем, какие они нехорошие, а ты д'Артаньян и весь в белом).
Либо же:
— успокоиться
— перестать истерить
— конкретно описать по пунктам, что не нравится, почему и своим вопросом
Пока ты просто истеришь без всякой конкретики и описал типичную работу и контору (в том числе из БигТеха).
Здравствуйте, undo75, Вы писали: U>короче стремная контора U>на меня сыпют инцеденты. U>куча проектов. половина не собирается. везде говнокод типа U>
U>try
U>{
U>// куча кода
U>}
U>catch()
U>{
U>// тут кода нет
U>}
U>
Заведи вспомогательный класс
типа AppHelper
public class AppHelper {
static string shortfilename(string fn) { return fn==null ? "" : Path.GetFileName(fn).ToLower(); }
static public void log(string fmt, params object[] args) {
Console.WriteLine(fmt, args);
}
static public Func<Exception, string, bool> hook_filter = null;
static public Action<Exception, string> hook_rethrow = null;
static string get_location(Exception e) {
string loc = "";
var st = new StackTrace(e, true);
if (st.FrameCount > 0) {
var f = st.GetFrame(0);
var m = f.GetMethod();
loc = String.Format("{0}:{1}:{2} {3}.{4}",
shortfilename(f.GetFileName()), f.GetFileLineNumber(), f.GetFileColumnNumber(),
m.ReflectedType.FullName, m.Name
);
}
return loc;
}
static public void exception(Exception e, string reference) {
bool skip = false;
var filter = hook_filter;
if (filter != null) skip = filter(e, reference);
if (skip) return;
var st = new StackTrace(true);
log("{0}(#{1}): {2}", e.GetType(), reference, e.Message);
string tab="";
for (var ce = e.InnerException;ce != null;ce = ce.InnerException) {
tab = tab + " ";
log("{0}{1}({2}): {3}", tab, ce.GetType(),get_location(ce), ce.Message);
}
for (int i = 1;i < st.FrameCount;i++) {
var f = st.GetFrame(i);
var m = f.GetMethod();
log("\t{0}:{1}:{2} {3}.{4}",
shortfilename(f.GetFileName()), f.GetFileLineNumber(), f.GetFileColumnNumber(),
m.ReflectedType.FullName, m.Name);
}
var rethrow = hook_rethrow;
if (rethrow != null) rethrow(e, reference);
}
}
И везде в коде catch() {} замени на catch(Exception e) { AppHelper.exception(e, "unique_name"); }
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день. U>кто сталкивался? как вести себя? включить пофигизм? U>по всемму коду раскиданы магические числа
Здравствуйте, undo75, Вы писали:
U>короче стремная контора U>на меня сыпют инцеденты. U>куча проектов. половина не собирается. везде говнокод типа U>
U>try
U>{
U>// куча кода
U>}
U>catch()
U>{
U>// тут кода нет
U>}
U>
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день. U>кто сталкивался? как вести себя? включить пофигизм? U>по всемму коду раскиданы магические числа U>переменные с сокращениями. короче так бы код писал ни одного собеса бы не прошел
Потихоньку приводить в порядок, ставить начальство в известность чем и почему занимаешься.
Упд: выше уже написали, что это как бэ норма. Ничего такого особенного. Потихоньку разгребать, наметить план работ и т.п.
Здравствуйте, undo75, Вы писали:
U>короче стремная контора U>на меня сыпют инцеденты. U>куча проектов. половина не собирается. везде говнокод типа U>
U>try
U>{
U>// куча кода
U>}
U>catch()
U>{
U>// тут кода нет
U>}
U>
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день. U>кто сталкивался? как вести себя? включить пофигизм? U>по всемму коду раскиданы магические числа U>переменные с сокращениями. короче так бы код писал ни одного собеса бы не прошел
Нужно уметь находить в каждой ситуации положительные стороны. Судя по тому, что ты пишешь, у этого кода нет настоящего хозяина и этим хозяином можешь стать ты. При желании, конечно.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Нужно уметь находить в каждой ситуации положительные стороны. Судя по тому, что ты пишешь, у этого кода нет настоящего хозяина и этим хозяином можешь стать ты. При желании, конечно.
Не факт, что нет, просто может хозяин не считает нужным отвечать всем джунам.
Сейчас ТС что-то сломает, поменяв какую-то неочевидную часть, и хозяин выскажет руководству — кого вы вообще тут наняли?
Здравствуйте, alzt, Вы писали:
A>Не факт, что нет, просто может хозяин не считает нужным отвечать всем джунам. A>Сейчас ТС что-то сломает, поменяв какую-то неочевидную часть, и хозяин выскажет руководству — кого вы вообще тут наняли?
Зато, может, хозяин обнаружится, наконец. Я ж говорю, в каждой ситуации можно найти что-то положительное.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, amironov79, Вы писали:
_>>И везде в коде catch() {} замени на catch(Exception e) { AppHelper.exception(e, "unique_name"); }
A>А почему просто не воспользоваться стандартным логгером?
A>
A>_logger.LogError(e, "skipped exception");
A>
Потому что помимо логирования иногда надо реагировать на эти исключения, причем выборочно или по определённым правилам.
Здравствуйте, kov_serg, Вы писали:
_>Потому что помимо логирования иногда надо реагировать на эти исключения, причем выборочно или по определённым правилам.
Такого в условии не было Но в любом случае реагировать лучше явно в catch.
Здравствуйте, amironov79, Вы писали:
A>Такого в условии не было Но в любом случае реагировать лучше явно в catch.
В условии сказано что таких мест чуть более чем дохрена, и сразу такие реакции не написать. Следовательно надо далать это постепенно, выявляя горячие места и последовательно раставляя заплатки.
И расставить подобные вставки можно скриптом. И их можно легко включить и отключить.
А централизованое реагирование позволяет анализировать и воздействовать на происходящее значительно проще.
Здравствуйте, m2user, Вы писали:
M>А вот эта самописная реализация Exception.ToString() она в каких случаях будет отличаться от встроенной?
Это просто прототип, стандартная не информативная. Более того она может быть разной в зависимость от локали.
Здравствуйте, kov_serg, Вы писали:
_>Заведи вспомогательный класс типа AppHelper
Это ты этот код писал что ли?
Вообще есть такое буддийское правило — все что имеет суффикс или префикс "Helper" или "Utils" должно быть утилизировано в первую очередь
Вообще обработка ошибок — признак сеньорского кода, так что это нормально.
Но конкретно с вот этим вот выше даже линтер справится.
В смысле, я бы начал с его добавления на сборке (у топикстартера же есть автоматическая сборка, да? ведь есть же?), чтобы хрень с пустым catch хотя бы не пропускало.
Здравствуйте, bnk, Вы писали:
bnk>Это ты этот код писал что ли? bnk>Вообще есть такое буддийское правило — все что имеет суффикс или префикс "Helper" или "Utils" должно быть утилизировано в первую очередь