Использование кода для исключения. Полезный?

По моему опыту, с LINQ к SQL и LINQ к Объектам DataContext синонимичен с соединением с базой данных. Таким образом, если бы необходимо было использовать несколько хранилищ данных, то необходимо было бы использовать несколько DataContexts. Моя реакция пищеварительного тракта - Вы, не заметил бы к большой части замедления с DataContext, который охватывает большое количество таблиц. Если бы Вы сделали однако, то Вы могли бы всегда разделять базу данных логически в точках, где можно изолировать таблицы, которые не имеют никаких отношений к другим наборам таблиц и создают несколько контекстов.

6
задан Tower 3 July 2009 в 18:50
поделиться

3 ответа

The error code was a feature used when there was no object oriented language. The only thing that could aid you to understand what went wrong was the error code. In an object oriented language, the object IS your error code. Unless, in specific cases, more than one thing can throw the exact same error AND they are treated in different ways, drop it. Also, you would provide much better explanation to whomever is debugging your code if you left a message instead of a meaningless error code, so if you feel like the exception needs more information, fill the Error Message field instead.

14
ответ дан 8 December 2019 в 03:28
поделиться

The error code is a field that can be used to provide more detailed information. If for example you have two things that can generate the same exception, the code could be used to give more detail.

10
ответ дан 8 December 2019 в 03:28
поделиться

Если у вас есть «источник ошибок», который работает с кодами ошибок, и вы «продвигаете» его в исключения, вы можете включить в исключение фактический код ошибки. а) это не причиняет вреда и б) возможно, вы не хотите иметь класс исключения для каждого отдельного кода ошибки, который может или не может произойти (и практически никому нет дела до работающей системы).
В качестве примера возьмем ошибки сервера MySQL . Вы можете создать один класс для каждого из этих кодов

class MySQLException_ER_HASHCHK extends MySQLException
class MySQLException_ER_NISAMCHK extends MySQLException
class MySQLException_ER_NO extends MySQLException
class MySQLException_ER_YES extends MySQLException
class MySQLException_ER_CANT_CREATE_FILE extends MySQLException
class MySQLException_ER_CANT_CREATE_TABLE extends MySQLException
class MySQLException_ER_CANT_CREATE_DB extends MySQLException
class MySQLException_ER_DB_CREATE_EXISTS extends MySQLException
class MySQLException_ER_DB_DROP_EXISTS extends MySQLException
....

, но на самом деле ... кого это волнует? Кто на самом деле поймает их по отдельности? Почти во всех случаях в коде приложения будет только перехват (MySQLException $ mex) , и, возможно, он просто ищет один конкретный код, где для кодировщика практически нет разницы, есть ли два catch-блоки или блок if / switch. Теперь у вас много «мертвых» классов, и никому, кроме парсера, наплевать на них. (с другой стороны, «все, что стоит сделать, стоит того, чтобы переборщить»)
И даже если вы обеспечиваете некоторую степень детализации, я думаю, нет смысла выходить за рамки, например, наличия одного класса исключений для каждого SQLState (имеет ли это смысл? Sqlstate? Не знаю, просто пример)

class MySQLException_HY000 extends MySQLException
class MySQLException_HY001 extends MySQLException
class MySQLException_XA100 extends MySQLException
class MySQLException_XA102 extends MySQLException

И снова вы, вероятно, хотите включить код ошибки - зачем терять эту информацию, даже если / даже если ваш код обычно не оценивает ее?

4
ответ дан 8 December 2019 в 03:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: