Avatar
Avatar
koher
理想的には、すべてのレイヤーでそのレイヤーのセマンティクスで抽象化されたエラー型が定義され、そのエラー型で throw されるべきだと考えています。それであれば上層が下層の実装に依存することはなくなります。 でも、その型付けにはコストがかかり、多くの場合、アプリでは一回か多くても数回程度しか利用しないことが多いので、型付けのコストが価値を上回らないと考えています。ライブラリの場合は無限回利用され得るのでコストに見合う価値があります。
そのレイヤーのセマンティクスで抽象化されたエラー型が定義され
例えばAPI呼び出しなら、通信のレベルと、JSONを処理するレベル、APIに応じたバリデーションのレベル、みたいに整理する、という事でしょうか? そうだったとして、この抽象化されたエラー型の中に、具体的な実装に依存したエラー型が渡せるように、 any Error が混ざり込みませんかね? // こういうのは列挙できたとしても・・・ enum ProtocolError { case brokenJSON case invalidFormat(String) ... } enum APICallError { case protocolError(ProtocolError) // ↓こっちは実装変更に対応しようとすると列挙できない case networkError(any Error) }