Куда поместить выгоду попытки

Я полностью согласен с г-ном Колином Т. Бауэрсом, что MATHEMATICA делает нормировку так, что последнее значение EigenVectors становится единым. Используя MATLAB, если кто-то хочет получить результат EigenVectors, как MATHEMATICA, тогда мы можем сказать MATLAB. Нормализовать последнее значение результата EigenVectors на 1, используя следующий шаг нормализации.

M = [1, 2, 3; 4, 5, 6; 7, 8, 9];

[EigVec, EigVal] = eig(M);

sf=1./EigVec(end,:); %get the last value of each eigen vector and inverse for scale factor

sf=repmat(sf,size(EigVec,1),1); % Repeat Scale value of each element in the vector

Normalize_EigVec=EigVec.*sf;

Normalize_EigVec =

    0.2833   -1.2833    1.0000
    0.6417   -0.1417   -2.0000
    1.0000    1.0000    1.0000
19
задан Kb. 7 February 2009 в 15:15
поделиться

11 ответов

Мы следуем

, не ловят исключения, если Вы не знаете, что сделать с ним.

Мы никогда не обрабатываем исключений, которые мы не можем обработать или значение по умолчанию. Это пузырится, и мы обрабатываем его на прикладном уровне.

Говорят, можно ли принять значение по умолчанию значение для бизнес-объекта, затем можно обработать его в бизнес-слое.

42
ответ дан 30 November 2019 в 02:24
поделиться

определенно поместите выгоду попытки, самую близкую к пользователю - потому что в том месте можно перевести ее во что-то значимое для пользователя.

Более глубокие выгоды попытки могли только быть необходимы, если Вы намереваетесь сделать что-то с ними - например, обработать исключение, или возможно зарегистрировать и повторно бросить исключение.

6
ответ дан 30 November 2019 в 02:24
поделиться

Молитва обработки исключений: "Бросьте рано, поймайте поздно". Вы хотите поймать исключения в прошлый момент, но Вы хотите бросить их сразу (не выполняйте набор больше обработки после определения, что что-то неправильно, и затем выдайте исключение). Если Вы не можете "обработать" исключение, то не ловите его.

При большинстве обстоятельств, Попытке... Наконец блоки должны быть намного более распространены в Вашем коде, чем Попытка... Выгода.

4
ответ дан 30 November 2019 в 02:24
поделиться

Вероятно, лучше всего использовать выгоду попытки во всех слоях, но только тихо поймать исключения в уровне UI. В бизнесе и уровнях доступа к данным необходимо, вероятно, поймать исключение и записать информацию, прежде, чем повторно бросить, например,

try
{
    //do something 
}
catch(Exception ex)
{
    LogFile.WriteLine(ex.ToString());
    throw;
}  

Примечание: не пишите:

throw ex;

, поскольку это очистит все полезные данные стека от исключения.

2
ответ дан 30 November 2019 в 02:24
поделиться

Всегда пробуйте/ухватывайтесь верхний уровень или contoller уровень.

1
ответ дан 30 November 2019 в 02:24
поделиться

Это просто зависит от того, где Вы на самом деле хотите делать с этим что-то. Обычно я ловлю его в бизнес-слое, и затем регистрирую его и возможно вызываю некоторую ui функцию для отображения сообщения пользователю.

я рассматриваю, что сделать с ошибками бизнес-правило. Это должно быть отдельным от слоя данных или ui слоя.

0
ответ дан 30 November 2019 в 02:24
поделиться

Поместите выгоду попытки, где Вы уверены, что будете только глотать исключение. Несколько блоков try-catch в различных слоях могут быть в порядке, если можно гарантировать непротиворечивость.

, Например, можно поместить выгоду попытки в уровень доступа к данным, чтобы гарантировать, чтобы Вы очистили соединения правильно. Но поскольку Вы не можете сделать намного больше там, необходимо, вероятно, повторно бросить исключение.

Перемещение в бизнес-слой, можно поместить выгоду попытки через несколько операций базы данных, которые Вы хотите продолжить двигаться атомарно. В этом случае, можете быть Вы, должен откатывать все или поместить вещи в согласованное состояние, зарегистрировать исключение где-нибудь. Глотание или перебросок должны быть решены об индивидуальном основании.

Ваш уровень представления должен всегда ловить все исключения, быть этим некоторое веб-приложение, сценарий, работающий в браузере или некотором приложении толстого клиента. Вы не можете понимать исключение полностью, но по крайней мере можно удостовериться, что приложение не умирает перед лицом пользователя.

, Конечно, его просто совет. YMMV. :)

1
ответ дан 30 November 2019 в 02:24
поделиться

Общий ответ был бы: поймайте каждый раз, когда можно обработать то, что бросается. Таким образом, решение довольно просто. Например, поймайте исключения, которые возникают при создании объекта, в котором Вы нуждаетесь.

0
ответ дан 30 November 2019 в 02:24
поделиться

UI только для презентации. Вы не ловите исключения там, потому что выяснение, что сделать с ним, означает логику. Это принадлежит слоев контроллера или бизнеса. В худшем случае Вы ловите исключение и отображаете его на соответствующее, удобное для пользователя сообщение об ошибке, которое затем отправляется в презентацию для дисплея.

0
ответ дан 30 November 2019 в 02:24
поделиться

Когда у меня есть многослойная архитектура как это (который является много), у меня часто будет пробование/ухватывание больше чем одного слоя. Например, попытка/выгода в слое персистентности, который ловит SQLException, делает то, что должен сделать слой персистентности (как, уведомляют администратора, например) затем выдает новое исключение, которое будет иметь смысл к некоторому коду, который называет слой персистентности. Примером мог бы быть PersistenceException. Следующий слой не заботится о том, кто должен быть уведомлен для перезапущения базы данных, но это заботится, что не могло сохранить пользовательское состояние, таким образом, это могло бы поймать PersistenceException и сказать пользователю, что его новый номер телефона не был сохранен в базе данных.

0
ответ дан 30 November 2019 в 02:24
поделиться

Вы только хотите использовать выгоды попытки для управления необработанным кодом. Пример, у меня есть COM-объект, которым я общаюсь с, и я не хочу, чтобы он остался открытым и создал утечку памяти. Другая приемлемая альтернатива должна зафиксировать ошибки на событиях в Вашей базе данных прежде, чем позволить исключению продолжаться.

Вы никогда не хотите использовать выгоды попытки для обработки ситуаций, где Вы не уверены, Вы кодируете, будет работать и хотеть план резервного копирования.

Поэтому, где это оставляет Вас, когда приложения аварийно завершаются, используйте пользовательские ошибочные страницы, чтобы указать, что проблема произошла в Ваших веб-приложениях и для кода синтаксического анализа толстых клиентов прочь в рабочие потоки, таким образом, они не аварийно завершают Ваш основной поток, если они перестали работать.Удачи!

-1
ответ дан 30 November 2019 в 02:24
поделиться