良いとは?
|
推測されにくく、総当たりされても大丈夫な“良いパスワード”を作るには「キャッチフレーズを日本語でパスワード化する」のが良いのではないか、という読者からの提案がありました。 オンラインサービスのパスワードを忘れることがよくあります。そんなときのために「秘密の質問」を用意するサービスも多いですね。しかしこれが簡単な単語だったりすると、パスワードをそのような推測されやすいものにするのとほとんど同じになってしまいます。気をつけたいものです。 記事「優れたパスワードの選定と記憶法」に対して、ブログ「とりとめもなく日記的雑記」では別の方法を提案しています。それは「キャッチフレーズを日本語でパスワード化する」こと。例えば、「ダイエット中の人なら“ato3kiroherasu(=あと3キロ減らす)”とか、“bi-ruha2haimade(=ビールは2杯まで)”」などになります。 このほか、方言や「88oki(早起き)」のように数字を混ぜた言葉を使うことも勧めています。パスワードの生成に悩んだり、忘れたりということは数多くありますが、キャッチフレーズや目標であれば覚えやすく便利そうですね。 記事「本のページを開いたまま固定する」で紹介したブックストッパーによく似たクリップを、ブログ「浮浪プログラマの始末書」で紹介しています。洗濯ばさみと重りで自作したそうです。しかし使い勝手はいまひとつだったので、結局書見台「ほんたった」を購入したとのこと。 以前はこのコーナーで、ハンガーから作ったブックスタンドを紹介しましたが、書見台もブックストッパーもお金をかけずに作れてしまえるのはいいですね。 記事「作業中にPCから離れる場合の“お作法”」では、PCをロックする方法や離席時に便利なフリーソフトウェアを紹介しています。ブログ「にっき」では、離席時には「ノートPCの場合はディスプレイパネルのバックライトが消灯する角度まで倒し、据置PCの場合はモニタの電源を手動で切る」とし、さらに電源を切り忘れた時の対策として「スクリーンセーバーは『スクリーンセーバー(画面暗転のみ)』で更に時限自動モニタ電源断の設定までしてあります」とのこと。 設定によりますが、ノートPCのディスプレイを手前に倒すとバックライトを消灯したり、スリープモードになったりします。ここまですると電気代の節約にもなりますね。 この1週間ほどの間には、ToDo管理のコツを紹介する記事がいくつかありました。読者によると、記事で紹介したToDo管理ツール以外にも便利そうなソフトがあったようです。 グループウェア「サイボウズ」にAjax導入した新版、携帯連携も強化サイボウズは11月28日、中小規模向けWebグループウェア「サイボウズ Office」シリーズの最新版「サイボウズ Office 7」を発売した。Ajaxを使い、ユーザーインタフェースを改善したほか、携帯電話との連携機能も強化した。 gooランキング:仕事に行き詰まりを感じたら、まずは「ソニー」から学べ!ビジネススキルを高めるための方法の1つが、カリスマ経営者たちが書いたビジネス書に触れること。ビジネスパーソンに聞いた、一度は読んでみたいと思う本とは? 文具王の「B-Hacks!」:黄色い紙は自分用筆者は色付きのコピー用紙を用途に分けて使っている。たとえば「黄色は自分用」と決めているのだ――。 ライフハック テンプレート:#057 自分ポスターあなたはキチンと自己PRできていますか? 自分を映画の主人公に例え、ストーリーを作ってみましょう。 以前は自分が伸びていた感じがあったのに、最近は伸びている感じがしない。意外なところにある自己成長を阻害するワナを解説する ビジネスでもプライベートでも多くの人がコミュニティに携わるHP。社員の自由な活動を支える企業文化と行動規範とは 情報処理技術者試験がITSS(ITスキル標準)と融合しようとしている。どこへ行く、情報処理技術者試験? jobtxt1 += '30代で派遣・フリーの仕事はなくなるのか?43歳エンジニアと派遣会社担当者に聞いた'; jobtxt2 += '匿名|最高25社から査定結果が届く。査定|プロが鑑定するあなたの市場価値'; |
[ 191] ITmedia Biz.ID:良いパスワードはどうやって作る?
[引用サイト] http://www.itmedia.co.jp/bizid/articles/0612/13/news052.html
|
「原点から未来へ良い仕事」をテーマとした、良い仕事とは何かを見つめ直す活動の一環として、ユニットごとに「良い仕事ワークショップ」が実施されています。 さらに、新しい視点を取り入れるためにはユニットの壁を越えて意見交換する機会も必要との声から、全社横断の「良い仕事ワークショプ」も月2回開催しています。 2006年8月17日、全社横断ワークショップに参加した社員23名は、各自の業務と照らし合わせながら、良い仕事について議論を繰り広げました。 全社横断ワークショップの目的は、部門を越えたさまざまな立場の社員同士が議論することで、良い仕事の切り口や課題解決の手がかりをつかむこと。さらにそれを各部、各部門に持ち帰り活用してもらうことです。当日はコーポレートスタッフ部門・営業部門から、さまざまな業務を担当する社員が、A・Bの2つのグループに分かれ、現在の仕事の内容ややり方などから始まり、「三井物産の良い仕事とは何か」について約2時間にわたって語り合いました。 Aグループは、「誰にとっての良い仕事なのかが見えにくい」、「良い仕事の定義は難しい」と結論。その理由は、「あらゆることに表と裏があるように、良い仕事にも両面がある」からです。例えば、電気のない地域に発電所を作り、電気を引けば、地域の人の役には立つが、地球環境には多少なりとも負荷をかけてしまいます。また、環境に良いとされる風力発電設備にも、場所によっては騒音などの問題が起こりかねません。一方で「需要がある以上、お客様にとっては良い仕事だ」との意見もあり、「100%良い仕事、あるいは悪い仕事というものは無く、区別は難しい」と結論付けたのです。 そして、「各部門で、自分たちの仕事が良い仕事かどうかを点検するシステムを持つべき。また自分の部門だけの考えにならないよう他の部門との横の連携も必要」との提案が出ました。 Bグループは、「すべての面で良い仕事ということはなく、家族に堂々と話せる仕事かどうかが基準になるのではないか」、「商社の仕事はステークホルダーが多様で、バランスを取るのが難しい」との意見が出ました。Aグループ同様、「良い仕事」の難しさを感じながらも、「良い仕事は非常に幅が広く、あいまいな概念。しかし、『良い仕事なら、もうからなくてもいい』ではなく、良い仕事の中でも頂点にある『誰からも喜ばれ、利益も出る』、そんな仕事を目指したい」との結論をまとめました。 Bグループでは、業務を定量面だけでなく定性面からも評価するようになった会社の取り組みを歓迎する声が多かった一方で、「利益が出なくなったら、また定量評価一辺倒に戻るのではないか」と不安の声も上がりました。「中長期的には良い仕事でも、最初はもうからない仕事もある。定性評価を今後も継続し、途中で打ち切るようなことはしないでほしい」との経営陣への要望もありました。このほかに、「商社の特徴を生かした良い仕事とは、世界の貿易がフェアであるように貢献することではないか」との意見も出ました。 ワークショップ終了後、オブザーバーとして参加した麗澤大学国際経済学部の高巖教授に講評を頂きました。「良い仕事というのは仕事の内容ではない。仕事に取り組む姿勢で決まる」という先生の言葉に、参加者は一様に感銘を受けていました。 ほかの社員がどのような問題意識を持っているのかよくわかり、今後部門内のワークショップのとりまとめをするためにも参考になりました。自分たちの常識が世の中の常識とは少し違う場合もあることを意識し、もっと高い志を持って取り組んでいかなければならないと思いました。 部門や年次の異なる方々が参加するワークショップでの意見交換はとても楽しかったです。先輩方が仕事に対する熱意や志について熱く語られているのを聞き、改めて夢や情熱を素直に語れる会社で働けることを嬉しく思いました。自分も喜んで人に語れる仕事をしていきたいと思います。 普段の職場を離れた場だったので、フラットに「物産マン」としての視点で議論ができました。それぞれが入社した時の「自分が会社を作っていく」「成し遂げていく」という気持ちを忘れずに、自らの考える「良い仕事」を責任もって進め、これからの三井物産を作っていくという姿勢を持ち続けられるといいですね。会社を辞めたあとに「良かったな」と思えるようにしていきたい。 |
[ 192] CSR(社会・環境) | 良い仕事ワークショップ - 三井物産株式会社
[引用サイト] http://www.mitsui.co.jp/csr/business/03/index.html
|
ソフトウェア開発ではこれまで、設計の重要性が繰り返し提言されてきた。良い設計ができれば、仕様を満たして正しく動作するだけでなく、理解や変更がしやすく、さらに再利用しやすいシステムとなる。逆に、そのようなシステムが実現できているのなら、それは良い設計であったといえるだろう。 では、良い設計が実践できているかというと、できていないことの方が多いのではないだろうか。例えば以下のような状況を聞くことは決して少なくない。 本稿では、ソフトウェアの良い設計を行うコツについて「NAgileの視点」で考察する(NAgileについての概要は第1回の記事を参照されたい)。また、それを実践するためのテスト系のN*ツールの紹介と、その効果的な利用方法を解説する。 以降の解説部分は、前回同様に会話形式の物語として話を進める。登場人物は以下の2人だ。なお本稿のサンプル・コードはすべてC#で記述している。 NAgiler(ナジャイラー=.NETにおけるアジャイル開発の実践者)。謎の多い人物。ちょっと偉そう。だが、実は弟子思い。 .NET開発者。ウォーターフォール型の開発を行っているが、アジャイル開発を明るく真摯(しんし)な態度で学ぼうとしている。 ※ご注意 ……本稿の物語やそこで交わされる会話はすべてフィクションであり、実在の人物、団体などとは一切関係ありません。登場人物の役柄はストーリー上の設定であり、筆者や読者を代表するものではありません。あくまでフィクションとしてお読みください。 さっそくですが師匠、NAgileによるアジャイル開発では、プログラミングだけに集中して、設計は行わないと聞きましたが、これは本当なんですか? それは、まったくの誤解だ。確かにアジャイル開発では、ウォーターフォール型の開発のように、開発ライフサイクル全体の前半に設計を集中的に行ったりはしない。だがアジャイル開発では、開発が継続される間、ずっと設計に投資するのだ。つまりNAgileでは設計がより重要視される。これは、開発期間中における仕様変更などのリスクを上手にコントロールするという考え方に基づいている。 ウォーターフォール型の開発では、後半の変更コストが増大するのを避けるため、できるだけ前半、できれば初期の段階で仕様を確定させ、後々に仕様の変更が発生しないようにします。これができなければ一人前のSEではないと教えられましたが、このやり方は間違っているんですか!? 必ずしも間違ってはいない。例えば開発の対象が明確で、仕様変更などのリスクがないケースなら、むしろそのやり方の方が有効だ。しかし現在では、そのようなシンプルな開発案件はほとんどない。なぜなら、顧客にとって高い価値を生むシステムというのは常に新しい挑戦であることがほとんどだからだ。そのようなシステムでは、未経験の仕様を決定せねばならないことも多く、当然ながらこれには多くのリスクが付きまとう。 要するにウォーターフォール型の設計スタイルが好ましいか、アジャイル開発型の設計スタイルを採用すべきかというのは、ケース・バイ・ケースであり、案件次第ということですね。 そのとおりだ。アジャイル開発では高いビジネス価値を生むシステムを対象としているので、ここでは仕様変更などのリスクの高いソフトウェア開発を対象として話を進める。 それでは話を少し戻して、なぜアジャイル開発が長期にわたって設計に投資し続けるのかを説明する。ビジネスで競争力を付けるためには、新しい挑戦が必要になる。新しい挑戦には、未経験の領域が存在する。また、ビジネスの提供速度や顧客ニーズへの対応速度も重要な価値となる。これらを極限まで高めるために必要となるのが そうではない。そもそも設計とは問題を解くことなので、あるのは唯一の正解ではなく、最適解にすぎない。状況が変われば問題も変わり、最適解も変わる。設計の本質は、変化を内在していることにある。変化を恐れていては、設計の本質を見極めることはできない。 この考え方は、特に未経験の領域に対するシステム開発においては合理的である。当然、未経験な領域に対する知識は、開発の初期段階では十分とはいえない。この状態で、十分な設計をすること自体にそもそも無理がある。 「あるものが全体として成長しているという時、その全体性こそが成長の絶え間ない創造者であり、起源であり、母体である。……中略……成長が始まった時点では、それがどのように展開するか予測できない」 と述べている。ビジネスを成長させることを命題とするとき、改善は避けて通れない重要な本質ということである。 具体的には、「変更容易性」を設計の最優先指針とする。つまり、変更を予測した設計ではなく、現時点で求められている最もシンプルな方法で設計することだ。そして、必要に応じて再設計する。 効果的な対処方法の1つが、「テスト容易性」(=テストできること)を設計時の指針とし、自動テストを作成するというものだ。設計段階で、「テスト対象は何か?」「利用方法はどうするか?」などを常に考えて、自動テストを作成する。このように自動テストを作成することで、変更することが簡単になるので、再設計時のコストを低減させられるのだ。 このような条件を満たしている良いテストは、以下のような「変更容易性」を高める効果があるので、良いテストを作ることが変更容易性のある設計への近道となる。 なるほど。アジャイル開発での設計の考え方やコツが少し理解できました。アジャイル開発ではこの良いテストが設計書になるから、やはりアジャイル開発ではドキュメント・ベースの設計は行わないんですよね? 違う。アジャイル開発では、良いテストのテスト・コードを重要な設計ドキュメントの1つとするだけだ。当然、UMLを用いた設計ドキュメントなども必要に応じて作成する。これについては数日前に、井坂 十蔵氏から(「開発をもっと楽にするNAgileの基本思想 第1回 アジャイル開発ではドキュメントを書かないって本当?」で)聞いたはずだが……。 また、設計と実装の時間ギャップをできるだけ少なくすることも重要だ。少しテストを作成したら少し実装を行う、というリズムが大きな効果を生む。このリズムによって、設計を検証しながら確実に開発を進めることができ、「日々設計を改善する」が実践される。 設計という行為としてテストを利用する場合、必然的にテストをまず初めに作成することになる。テストファーストは、NAgileの最初の一歩である。そこで、次に良いテストを実現するための基礎ツールについて話す。 マスタ/詳細テーブルにおける更新処理 (2007/11/27) 外部キー制約や自動インクリメント列を使いこなして、追加・更新・削除されたマスタ/詳細データをDBに反映する Google対抗? Microsoft Sync Frameworkの正体 (2007/11/20) 先日、マイクロソフトが発表した同期フレームワークは、.NETアプリケーションに何をもたらすのか? 実装サンプルを通して、その機能と特徴を簡単に紹介 技術者としての力量を数値で把握していますか?ITSSレベルを無料で判定、12月25日(火)まで ホワイトペーパー利用者に「Amazonギフト券」を抽選で100名様にプレゼント!――TechTargetジャパン リニューアル・キャンペーン @ITトップ|Insider.NETフォーラム トップ|会議室|利用規約|プライバシーポリシー|サイトマップ |
[ 193] ソフトウェアの良い設計を行うコツ − @IT
[引用サイト] http://www.atmarkit.co.jp/fdotnet/nagile/nagile03/nagile03_01.html
|
現在では、開発現場で「UML」という言葉が一般化し、「オブジェクト指向」という言葉もごく当たり前のように使われるようになりました。実際にプロジェクトの中で、UMLを用いて分析/設計を行い、開発を進めている開発者や、これから始めようとしている開発者もかなりの数に上ると思います。 しかし、「UMLの表記方法や、ビジネスモデルをオブジェクト指向で分析する方法は、ある程度理解できるのだが、実際に出来上がった分析モデルをどのように設計モデルにしていくか?」または「設計モデルは作成したが、出来上がった設計モデルは、実際にどれほど有効なのか?」という疑問を持っている方も多いと思います。本連載では「良い設計モデルとは何を意味するのか?」「どうすれば良い設計モデルを作ることができるのか?」というテーマについて、前後編の2回で皆さんと一緒に考えていきます。 前半は分析/設計モデルに関する概念的な解説を行い、後半で具体的な手法、例えば「メトリックス」「リファクタリング」「デザインパターン」などを取り上げ、実際に“良いモデル”を作成するノウハウをお伝えしようと思います。それではまず、分析モデルと設計モデルの作成方法の違いについて解説しましょう。 分析モデルの作成方法については、多くの設計者や方法論者がさまざまな方法を主張しています。ここでは詳細には述べませんが、例えば、ワード・カニンガム(Ward ユースケースや用語集から、名詞、名詞句を探し出して、クラスの候補とし、動詞、動詞句を探し出して、メソッドの候補として作成していく方法。 4つのアーキタイプ、瞬間―時間間隔、役割、パーティ/場所/物、説明に分類し、色分けして、パターンに当てはめて分析していく方法。特に分析モデルに限ったものではありませんが、最初のモデルを作成する場合の強力な手法となっています。 つまり、当然分析モデルなのですから、現状のビジネス(これから作ろうとするシステム)を実現することが可能なオブジェクトモデルを分析し、作成することになります。分析モデル作成の段階では、それぞれのオブジェクトがどんなに複雑に関連していてもよいわけで(依存性が少ないに越したことはありませんが)、「継承関係」や「関連の誘導可能性」(Navigatablility)を厳密に定義することは、実はあまり重要な作業ではないのです。それよりも、実際のオブジェクトがどのような関連にあり、協調作業によって何を(どのような機能を)実現しなければならないかということを明らかにするのが、正確で、分かりやすいモデルというわけです。この段階では目指すべきモデルとはまさにそのようなモデルであるといえます。 設計モデルの段階における理想的なモデルとはどんなモデルでしょうか。設計段階のモデルに従って実装が行われ、その結果システムが出来上がるわけなので、生産性が高く、保守性や拡張性が考慮されていなければなりません。そのうえで、実装担当者にとって理解しやすいモデルが「良い設計モデル」ということになります。 なお、ここでいう設計モデルとは、「実際に実装可能であり、(そのモデルから直接)コーディングが可能であるレベルに到達しているモデル」を指しています。設計モデルの在り方というのはかなりあいまいで、分析モデルを単に詳細化した状態が設計モデルであると考える人もいるのですが、本稿では、上記のように考えてください。 また、最近のアジャイル系開発プロセスでは、モデリングを分析段階と設計段階に分けず、モデリング=設計(Design)と考えたり、XPのように、コーディング作業にモデリング作業を含んでしまうプロセスもありますが、本稿では、分析と設計の考え方の違いを解説するために、あえて分析モデルと設計モデルを分けて表現しています。 アジャイル系開発プロセスが必ずしも、分析モデル(あるいはモデリング作業自体)を必要としていないわけではありません。 実際、モデリングを設計と同義だと仮定してみましょうか。その場合でも、設計モデル自体は、業務分析(システム分析といってもよい)を行い、その分析モデルをインプットとして作成しなくてはなりません。XPの場合でも、要求仕様(XPの場合にはストーリー・カードといいます)を固めてから、直接コーディング作業に突入するわけではありません。アジャイル系開発プロセスはあくまで、「分析、設計といったフェイズに分け、成果物として膨大なダイアグラムを管理する行為は無駄である」という認識の下に立っているだけなのです。本稿とは直接関係がないので詳しくは述べませんが、興味のある方は、Scott さて、ここで、あえて「オブジェクト指向設計って何がいいの?」という話をします。そもそも現在のオブジェクト指向言語は、後のPascalやModula-2などの構造化言語のもととなるALGOL60から派生しています。ALGOL60はブロック構造言語で、変数をブロック上にしか持てなかったのですが、SIMULA67で現在のように、メモリ領域に変数を確保できるようになりました。その時点で、現在のクラスや継承、属性の可視性といった概念が加わり、データの抽象化が可能となりました。 つまりオブジェクト指向とは「実世界を忠実に表現する」というよりは、構造化やデータの抽象化によってモジュール化を強化し、「プログラムの依存性を制御する」という概念から生まれています。『Agile Hall刊)の著者であるRobert C. Martinの言葉を借りるとオブジェクト指向技術とは「モジュール間の相互依存性を制御することができるソフトウェア開発のための設計手法であり、抽象化を用いることにより、依存性を制御する(モジュール間で、モジュール同士が直接依存することを避ける)壁を作り(独立性を高め)、ソフトウェアの陳腐化(保守や拡張ができなくなる状態)を防止する」となります。ここで、もう少しかみ砕いて、非常に簡単な例ですが、「抽象化を用いて、依存性を制御する」という具体的な例を紹介します。 図1では、ButtonクラスはLightクラスに依存しています。この状態で、新たなボタンによる操作でOn/Offできるようなクラス(例えば、TelevisionとかStereoなど)を導入すると、Buttonクラスは、新たに追加されたクラスに常に依存することになります。この例は、非常に単純です。実際のシステムでは、依存性が高くなれば、拡張性や保守性がどんどん低下していく状況が発生します。 次に、この例を「抽象化」を用いて、Buttonクラスが直接Lightクラスに依存しないようにしてみましょう。 図2では、ISwitchableというインターフェイスを登場させ、抽象化することにより、ButtonクラスとLightクラスの依存性を排除しました。つまり、Buttonクラスは、Lightクラスの実装がどのように変更されても、LightクラスがISwitchableインターフェイスを実装している限り、影響を受けない(依存していない)わけです(実際には、Buttonクラス自体はLightクラスがISwitchableクラスを実装しようがしまいが、この時点では、影響を受けないのですが)。また、こうすることにより、Buttonクラスは、ISwitchableインターフェイスを実装している任意のクラス(例えば、TelevisionとかStereoなど)を同様に扱うことができるようになり、ISwitchableインターフェイスを「プラグイン・ポイント」として、Buttonクラス自体を全く変更することなく、新たなクラスを追加可能となります。 これは、「Abstract Serverパターン」というもので、単純ですが「抽象化を用いて、依存性を制御する」ということを端的に示しています。 この場合の「抽象化」は「依存性を制御する」ためのものだと考える方が理解しやすいと思います。また、こういった抽象化は、分析レベルでは、あまり必要がないのですが、設計レベルでは、実際にそのモデルをシステム化する必要があるため非常に重要な要素になってきます。つまり、「依存性を制御する」とは、「それぞれのクラスは、ほかのクラス、またはほかのクラスの詳細をできるだけ知らないように制御する」ということなのです。こう考えると、オブジェクト指向技術も、昔ながらの構造化プログラミングも、そんなに、かけ離れた技術ではないような気がしませんか? ここで、設計がうまくなされていないシステムでは、どういった症状が起こるかを見ていきたいと思います。前述のRobert C. Martinによれば、 システムの一部を変更しようとすると、その変更のために、システムの非常に多くのほかの部分の変更が余儀なくされるため、変更が行いにくい システムの一部の変更が、論理的には、まったく関連のないはずの部分を動かなくする(壊す) システムが複雑に絡み合っており、ほかのシステムに再利用するためのコンポーネント化をすることが難しい 正しい(設計の見直しを含む)修正を行う方が、不正な(場当たり的な)修正を行うより難しい状況(環境や設計を含む) さて、皆さんも「1カ所を少し変更しただけなのに、その変更の影響が、どんどん波及して、なかなか修正が完了しない」という状況や「1つのバグを修正したら、全然関係ない個所が動かなくなり、そのバグの修正が、次々に新たなバグを生み出す」という状況に出くわした経験が少なからずあるのではないですか? これだけJ2EEベースのWebシステムが多い中で、Javaのシンタックスを使った、複雑に絡み合った(昔風にいうとスパゲティ・プログラムというやつです)手続き指向システムが少なからず存在することも事実ですね。また、再利用性とかコンポーネント化というのも同様で、「1つの部品(コンポーネント)をほかのプロジェクトで使用しようとしたら、あらゆる部分が関連していて、とてもその部分だけを切り出すことができず、仕方がないのでソースコードをコピーして、いらない部分を削って作り直した」という経験もあると思います。 こういった現象は「正しい設計がなされていない」ために起きているわけで、「オブジェクト指向技術を使って、正しく設計を行えば、こういった事態を減少させることができる」ということになるわけです。しかし、ここで重要なのが「正しく設計を行えば」という部分です。つまり、当たり前ですが、オブジェクト指向技術で、カプセル化や抽象化を使って、積極的にモジュールの依存性を制御したり、複雑性を排除していかないと、システムが大規模になればなるほど、モジュール間の依存性が高まり、手の付けられない状況に簡単に陥ってしまうということです。 ここで、よくあるWebシステムの例を考えてみましょう。「アーキテクチャにはMVCモデルを使用し、独自のフレームワークを作成して、データアクセスにはDAO(Data Access Object)を使用した」Webシステムです。これだけ聞くと、何か素晴らしい設計がなされているような気がしますね。 本来なら、図3のような、パッケージ間の依存性があり、ドメインオブジェクトはフレームワーク内の抽象化されたインターフェイスを通してのみ、DOAにアクセスし、DOAもドメインオブジェクトに直接依存しない形(同様にフレームワーク内のユーティリティ・クラスを使用するなど)が望ましいでしょう。 ですが、何も考えないで開発を行うと、図4のように、ドメインオブジェクトとDOAの間に双方向の依存性ができたり、直接ActionクラスからDOAを呼び出したりと、せっかくのパッケージングやモデルを台無しにしてしまう可能性もあるわけです。このように依存性の上に成立しているシステムでは、それがたまたま正常に動いていたとしても、何かを変更したら、どんなことが起こっても不思議はない気がします。 また、最近よく見掛けるのですが、「分析クラスを、そのままDBのスキーマに置き換え、それとマッピングしたJavaのクラスをValue Objectと称して、アクションクラスに直接ビジネス・ロジックを埋め込んでいるパターン」も、「正しく設計されている」とはいい難いと思います(そもそも、これでは、「正しいMVCモデル」ともいい難いのですが)。ビジネス・ロジックは、あくまで、ドメイン・モデル上にあり、コントローラは、それをViewと結び付けるために、ドメイン・モデル上のメソッドを呼び出すように設計すべきです。そうしないと、例えば、プレゼンテーション層のフレームワークが変わっただけで、システムの大部分を書き直さなければならないし、モデルの再利用性も極端に少なくなります。 この辺も、結局、正しい設計が行われていない(もう一度いいますが、設計とは、そのモデルに従って、実際のコーディングが可能というレベルを指します)ために起こる現象の1つです。オブジェクト指向分析を行って、分析モデルを作成し、後は「設計をせず」、一気にコーディングしてしまう(または、アウトソースして、コーディングを依頼する)と、こういった状況からなかなか抜けきれないかもしれません。 今回は、「良い設計モデルとは何か?」「どうすれば良い設計モデルを作ることができるのか?」について、概念的な話を中心に解説しました。当然のことですが、オブジェクト指向技術とは、ソフトウェアをより効率的に開発するために考え出された技術です。その技術を使ってより効率的にソフトウェア開発を進めることができなければ意味がないのです。次回は、もう少し具体的に、メトリックスにより、デザインパターンやリファクタリングを使って、設計を進める方法を解説します。 1990年Smalltalkに触れ、オブジェクト指向開発に興味を持ち、以降、C++による、OODB、CORBA関連の開発に従事、その後、J2EE関連のコンサルタントとして、多数のプロジェクトに参加。UMLやモデリングの重要性と、いかに効率よく開発を行うかを中心にコンサルティングに従事。 情報マネージャのための「今日のひと言」 - 2007/11/28『人脈』 自分1人の力ではどうにもならないことがあります。そういうときに頼りになるのは……>>続きはクリック 技術者としての力量を数値で把握していますか?ITSSレベルを無料で判定、12月25日(火)まで ホワイトペーパー利用者に「Amazonギフト券」を抽選で100名様にプレゼント!――TechTargetジャパン リニューアル・キャンペーン @IT情報マネジメント トップ|アーキテクチャ トップ|会議室|利用規約|プライバシーポリシー|サイトマップ |
[ 194] @IT:良い設計モデルの作り方(前編)
[引用サイト] http://www.atmarkit.co.jp/farc/rensai/goodmodel01/goodmodel01.html
