私はMVCフレームワークで次のようなコードを書きました。
class Controller_Test extends Controller
{
public function action_index()
{
$obj = new MyObject();
$errors = array();
try
{
$results = $obj->doSomething();
}
catch(MyObject_Exception $e)
{
$e->getErrors();
}
catch(Exception $e)
{
$errors[] = $e->getMessage();
}
}
私の友人は、コントローラーはMyObjectについて何も知らないはずなので、MyObject_Exceptionをキャッチするべきではないと主張しています。
彼は、コードは代わりに次のようなことをするべきだと主張しています。
class Controller_Test extends Controller
{
public function action_index()
{
$obj = new MyObject();
$errors = array();
if($obj->doSomething())
{
$results = $obj->getResults();
}
else
{
$errors = $obj->getErrors();
}
}
私は彼のアプローチを確かに理解していますが、状態管理が意図しない副作用につながる可能性があるように感じます。
正しいまたは好ましいアプローチは何ですか?
編集:$ e-> getErrors();の代わりに誤って$ obj-> getErrors()をMyObject_Exceptioncatch句に入れました。