ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

詳細設計書は、対象言語で実装できる人が書かないと、とんでもないことに!

2009-12-27 13:43:45 | トピックス

 まえに、ちょっと書くといった話、
「詳細設計書は、実装できる人が書かないと、とんでもない設計書(そんなの、実装できるわけねーだろ的な)を書かれることがあるよね。」ってことについて。

 じつは、使用言語等によって、あることを実装しようとしたときに、ものすごーく手間になったり、超簡単だったりする。

 たとえば、入力エリアでクリックすると、プルダウンメニューが出てきたりする。
 このとき、

   ・プルダウンメニューにないものを入力できるもの(コンボボックスと呼ばれる)
   ・プルダウンメニューにないものは入力できないもの

 の2種類がある。
 前者のコンボボックスは、.net系のコンポーネントにはあるが、HTML、JSPなどではできない。そうとうなJavascriptを組み合わすことになる。
 しかし、コンボボックスを許してしまうと、選択項目がDB等に入っている場合、DB
に入力された項目を追加するという作業が入り、面倒というか、危険になる(テキトーな項目を入力される可能性があるので)。

 .netとJava、両方実装したことのある人なら、すぐに気付くんだけど、COBOLプログラマからSEになったような、JAVA、.net両方やってない人だと、HTMLでコンボボックスつくれみたいな、無茶ぶりをする。

 そーなると、たいへんなことに(>_<!)




 この手の、COBOLあがりのSEが、Web系をやってしまうと、やばやばな仕様を書きそうなのは、こんなかんじかな・・・

●画面設計

・タブキー移動
 C++などで、フォームだと簡単にできるけど、JavaでHTMLの場合、Javascriptでタブキー制御するのは、たいへん。
 ケータイだと、i-modeではたいへんっていうか、できたか?
 Brewだと、このブログのほかのページを見ると出ている。

・Enterキーをタブと同じように使う(次項目へ飛ぶ)
 JavaでHTMLの場合、Javascriptで、この操作をするのは、たいへん。
 Brewだと、このブログのほかのページを見ると出ている。
 i-modeでは、どーだったっけ?

・存在しないコントロール
 上記のコンボボックスや、ツリー上に出したものから選択させる。なお、表枠をだして、選択する方法はJavaでできるが、やりかたを知らないと難問(このブログのほかのページに書いてある)。なお、ドラッグアンドドロップしたものを選択させるのは、Javascriptでできる。
 一方、.netで実現しようとする場合は、DragPanelコントロールを考えるかもしれないが、このときは、自分の希望するイベントが取得できるかどうか確認のこと(ほしいイベントが取れないことがある)

・そのイベントは、とれない
 Javascriptや.netを使う場合、「そのイベントは取れない」ということがある。
 自分の欲するイベントが取れるかどうか、確認のこと。

・実現するには、サーバーアクセスが必要で、大量データを送ってくるが、
 それを、一瞬に処理しないといけない
   →1文字入力されるごとに、対象商品を絞り込んで、下に出す。

●画面以外のクライアント側
・ローカルのファイル保存
 セキュリティ上、Webからでは出来ないことが多い

・ローカルプリンタから出す帳票を、サーバーから送る。
 できることもあるが、一般論からすると、できない。一度PDFにする必要がある

・プッシュ型配信
 できることもあるが、ブラウザからはできないことが多い。アプリを組んだほうが早いこと多し。


●UI以外のサーバー側
・DB処理
 COBOLの人はカーソル処理したがるが、最近はSQLでいく、
 また、一部SEが、すべてSQLで片付けようとするが(.netからきて、DataGrid大好きな人とか)実質、これは無理なことが多い(全く観点が違う集計の場合)
 JavaであまりDB系のプログラム経験がなく、SEになってしまうと、トランザクションでロックをかけている期間が、無駄に長くなったり、データ矛盾のチェックが甘かったりする。
 それと、COBOLの人でも、JavaのDB系のプログラム経験が少ない人がSEになってもよくあるんだけど、ものすごい大きいデータを連続的に何回も取り、大きなガベージコレクションを起こしてしまい、処理時間が異常に長くなるケースがある(自分で適当なところでSystem.gc()を送る)


・SORT,マージアルゴリズム
 COBOLでならった、一般的SORT・マージ方法は、Javaでは使わない(キーが多くなると実は厄介になるから)。
 Javaの場合、レコードをBean化し、Comparableインターフェースを実装する。つまり、compareToメソッドを記述する。ここで、キーが3つだろうと、100子だろうと、その大小関係決定法を記述する。
 そうすれば、配列にして、Arrays.sort()をかければ、ソートしてくれる。
 大小関係の修正時も、そのBeanを書き変えればいいだけ。

・メモリ確保方法
 COBOLだとはじめにガーンととるが、他の言語だと、必要時に取る。なので、動いているときに、死ぬ可能性がある(動作中に死ぬのが嫌なら、汎用機+COBOLを使うしかない。汎用機なら、そのプロセスの起動時にJCLに書かれた資源を確保するから)。死ぬ時に安全に死ぬ記述が必要。
 このとき、Exceptionを挙げるが、Exceptionをあげる人と、エラーコードでReturnする人がいる。例外を使い慣れてないとReturnで戻りたがるかな。。

・入出力時のメモリ確保
 .netなど、C++において、大きな領域でStringをとろうとすると、時間がかかる場合がある。このことを知らないで、JPEG画像などを、
   ・1ファイル全部いっぺんに読み込み
   ・JPEG画像をライブラリに解析させて
   ・サムネイルを表示する
 などすると、えらい時間がかかることがあるが、C++をやったことがない人(いやC++でやっている人でも)上記の手法を取ろうとすることがある。
 この場合、1バイトずつ読み込み、適宜解析をかけていったほうが早い。
 ただし、大きなファイルでなければ、いっぺんに読んじゃう上記のやり方のほうが簡単。

●UI,帳票
・外字フォントの扱い
  フォントが存在しなくて表示できない
  簡略化された文字が現存するとき、外字と簡略化された字が異なるため、検索にかからない。

・帳票の作り方
  あーんど、外字フォントの取り扱い




 ざっとあげても、これだけのことは知らないと、詳細設計は書けない。
 だけど、知らない人のことが多いかも。。。

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ブックオフ、Tポイントから... | トップ | Google App Engine 実践リフ... »
最新の画像もっと見る

トピックス」カテゴリの最新記事