В проекте, над которым я сейчас работаю, у меня возникла небольшая проблема с отличием ошибок от исключений (чтобы добавить к путанице, я не уверен, что мои определения ошибок и исключений также полностью верны).
Я запутался в том, как предотвратить исключение из ошибки. Скажем, у меня есть модельный класс, который содержит множество отношений. Модель имеет метод Model.AddRelationship()
, который может создать круговую ссылку в модели. Если пользователь пытается добавить отношение в пользовательском интерфейсе, который создает циклическую ссылку, ему необходимо заблокировать это и сообщить, почему. Поэтому я столкнулся с некоторыми вариантами, такими как:
// In the UI when the user tries to add a relationship:
var newRelationship:Relationship = new Relationship();
if(Model.AddingThisWillCreateACircularReference(newRelationship))
{
this.warnUserAboutCircularReference();
}
else
{
Model.AddRelationship(relationship);
}
Часть меня считает, что разработчик должен проверить вызов перед его вызовом. В конце концов, добавление отношения - это не то, что может привести к сбою программы, это когда другой код выполняет операцию, которая приводит к бесконечному циклу. С другой стороны, я чувствую себя обязанным постоянно поддерживать Модель в безопасном состоянии, и мне нужно заставить разработчиков справиться с ситуацией с плохой круговой ссылкой, выполнив что-то вроде этого:
// In the model itself:
public function AddRelationship(relationship:Relationship):Boolean
{
var success:Boolean = true;
if(this.AddingRelationshipWillCreateACircularReference(relationship))
{
success = false;
}
else
{
this.addRelationship(relationship);
}
return success;
}
Таким образом, они либо знают, что добавить невозможно, либо отношения просто не добавляются. Это также чувствует себя неправильно. Может ли кто-нибудь дать мне некоторые мысли, которые могли бы помочь дать мне некоторую ясность? Заранее спасибо.