たとえば、宅配便の配送料(出発と到着の都道府県により価格が決まる価格表)などを実装する場合、かつては二次元配列で価格表を実現していましたが、モダンな言語ではどのように実装するのがベストでしょうか。
なお、DB等の利用は行いません。
実装言語はC#の予定ですが、java,Ruby等言語は問いません。
プログラム自体より価格表の変更頻度が高い場合は、価格表を外部のテキストファイル(CSV形式など)に持たせ、プログラム起動時に配列に読み込むようにします。
価格表のようなものはExcelで作成した方がチェックがしやすいためです。
外部CSV自体は読み込んだあと、C#であればDataTableクラスあたりかな…?で、読み込んで処理をするということですね。
妥当な手段ですが、CSVを直接読まれたりしたくないような場合はどうするのが良いでしょうか。暗号化ZIPにするとかかな。
オブジェクト指向プログラミング言語(OOPL)での実装を前提に考えますと、クラスを定義してやるのが良いかと思います。
クラスとは「型」であり「振る舞い」ですので、「価格表」という振る舞いをする型、つまりクラスを定義します。
価格表クラスを定義するとして、どういうクラスを作るのでしょうか。
『価格表オブジェクト.get価格( 出発都道府県 , 到着都道府県)』
といったようなメソッドを定義するようなイメージでしょうか。
実装の隠蔽、引数が文字列でも内部で変換が可能、間違った文字列「例:土佐県」などを引数に与えた場合のエラーチェックが可能、などがメリットでしょうか
価格表のメンテナンスを考慮すると、エクセルなどの外部ファイルに持たせておくべきだと思います。現代的とかそういう以前に、ビジネス系ソフト設計の常識です。
大元のデータはExcelにて管理されています。また、Excelに管理されたデータをもとにマクロやワークシート関数を使ってソースコードへ変換するのは一瞬ですので。。
なお、価格表はユーザに閲覧不可という前提でお願いします。
CSVを直接読まれたりしたくないような場合はどうするのが良いでしょうか
そのようなビジネスアプリの場合、プログラム本体や価格表はサーバ側に配置するのが普通です。サーバには論理的/物理的アタック防止措置が施されるはずですから、無用な暗号化はしないのが普通です(バグの温床になるため)。
どうしても暗号化が必要なほどの機密情報でしたら、まずRDBMSを導入し、DBの暗号化機能を利用するでしょう。
外部ネットワークと切り離された状態になる可能性のあるアプリなのでって私書いてありま・・・せんね。書き忘れてました。
ノートPCを持ち運び、営業先等でネットワークにつながってなくても使用可能という話なので、その前提でお願いします。すみません。
データを読まれたくないのであれば、既出である、自作のクラスを作って、それを一旦バイナリ形式でのシリアライズをして、ユーザが使用する時はそれを読み込んで(デシリアライズ)、使用してはどうでしょうか。
配列をハッシュテーブルにするのが現代的な手法でしょうか。
また、二次元表のような物をハッシュテーブルにすると言うことは、ハッシュテーブルを要素として持つハッシュテーブルを定義する事になると思いますが?