例外データに強いプログラム?

先日、納品したシステムで例外が発生していると連絡を受けたのでログを調べてみると、超単純なミスだった。ファイル名の拡張子を取るのに

int indexOfPeriod = param.indexOf('.');
String fileId = param.substring(0, indexOfPeriod);

と記述されていた。そこでピリオドが無いファイル名が登録されたために例外が発生したのだ。
さて、此処で問題なんだけど。
最初に思った感想は、「ピリオドが無かった時のことくらい考えてコーディングして欲しい」だった。まあ普通の感想だと思う。でも、仕様では拡張子無しのファイル名が登録されることは無いということだった。じゃあ、ここでは落ちる(例外が発生する)のが正しいのかもしれない。まあせめて普通の例外じゃなくてこんな形で。

int indexOfPeriod = param.indexOf('.');
if (indexOfPeriod == -1) {
    throw new XxxxxxException("........");
}
String fileId = param.substring(0, indexOfPeriod);

ここでそんなおかしいデータを許してしまうと、そのデータがシステム内にばら撒かれて大変なことになってしまっていたのかもしれないのだから。
うーん、かといってこんなの毎回設計者に「もしファイル名にピリオドが無いデータが登録されていたらどうしますか?」なんて聞いてたらいつまで経っても終わらないから、ルールみたいなのを作ればいいのかなぁ。例えば、「登録系は例外データに厳しく、照会系は例外データでも扱えるように」…みたいな。それを指針にPGがんばれ(含む自分)。あぁ、でも照会からデータ引っ張ってきて登録したりするから一概にそうとも言えないんだなぁ。むーん…
ちなみに結局ここは設計者と相談してこうなった。

int indexOfPeriod = param.indexOf('.');
String fileId = null;
if (indexOfPeriod == -1) {
    fileId = param;
} else {
    fileId = param.substring(0, indexOfPeriod);
}

PGが自力でこのコーディングをするのは難しいなあ。ちょっとだけとは言え「PGが勝手に仕様を決めてる」からなぁ。やっぱ設計者がそこまで最初に考えておくべきなのか?でもそこまで考えてる設計書なんか見たこと無いな。てか、さっきのも勝手に例外投げてるんだけどな。例外投げようとするとメッセージIDが必要だから、勝手に投げにくいんだよなぁ。そういうのは直接投げたらいいか。いやでもなぁ(優柔不断)