タグ

設計に関するchibahiroのブックマーク (13)

  • GoFの23のデザインパターンを,Javaで活用するための一覧表 (パターンごとの要約コメント付き) - 主に言語とシステム開発に関して

    GoFデザインパターンの一覧表と,活用のためのコメント,および入門者が独学するためのリンク集(サンプルコード付き)。 入門者の独学を支援するために,このページのURLを提示して熟読させ,各パターンを短時間で効率よく学んでもらう。 デザインパターンはプログラマの常識だ。 Java使いかどうかは問わない。 にも関わらず,入門書を買ったまま,途中で挫折する人が多い。 挫折の原因は,パターンの数が23もあって,多いからだろう。 全パターンをすんなり覚えてもらうためには,各パターンごとに 「要するにこういう目的のパターンなんだ。」 「10文字で表現すると,パターンの意味はこうなんだ。」 という要点・質を,短いコメントで伝えれば助けになるだろう。 こういった学習を通して,Java言語の「設計思想」も併せて感じ取ってゆけるはず。 全パターンの一覧表(要約コメント付き) 全パターンについて,10文字以内

    GoFの23のデザインパターンを,Javaで活用するための一覧表 (パターンごとの要約コメント付き) - 主に言語とシステム開発に関して
  • JSON on HTTPやWeb APIを各言語でどうやって実装するのか

    HTTPでアクセスして、JSONを返すようなWebサーバを書きたいとする。 どんな言語を選ぶか。どんなミドルウェアを選ぶか。どんなライブラリを選ぶか。 たとえば、TIOBE Softwareが公表している「Programming Community Index(PCI)」という指標がある。人気のあるプログラミング言語の数値化。これを見ていて思ったのは、「多すぎだよね、プログラミング言語」ということ。これらのうち、どの言語を勉強し、どの言語をプロジェクトに採用すべきなのか。 その感触を得るために、 「同じ仕様のREST serviceを複数言語で実装したらいいんじゃね?」 と思った。いくつかの言語で実装を起こしてみている。 前提条件 大規模な開発を想定する。ユーザの規模が大規模。トランザクション数が大規模。そして、開発者が大規模。 実用的かつモダンな開発を想定する。プロジェクト毎のバージョン

    JSON on HTTPやWeb APIを各言語でどうやって実装するのか
  • Twitterはこのメモから6年前、すべてが始まった

    Twitterが生まれてから6年目となりましたが、その最初のアイディアの段階の貴重なスケッチが公開されました。このメモのスケッチから今のTwitterのすべてがはじまったわけなので、非常に歴史的価値の高いスケッチとなります。 Twitter Blog: Twitter turns six http://blog.twitter.com/2012/03/twitter-turns-six.html 以下がそのスケッチ。 twttr sketch | Flickr - Photo Sharing! http://www.flickr.com/photos/jackdorsey/182613360/ よくよく見ると最初の名前は「stat.us」だったことがわかります。「マイ・ステータス」、つまり今の自分の状況をお知らせする、という基的な部分のアイディアはこの時点からちゃんとあったわけです。 ま

    Twitterはこのメモから6年前、すべてが始まった
  • 先日倒産したメモリメーカーの友人と飲んできた話

    彼は純粋な技術屋といった感じで、 愚痴もまじっていたせいだろうか、何を言ってるかわからない部分もあったが、 いろいろと興味深い話を聞くことができた。 「結局、装置があれば韓国でも中国でもどこでも作れるようになって、値段のたたきあいになっちゃたんだろ」 という私に対して、彼は言った。 「体力勝負で負けたのは否定しない。だけどな、装置があれば誰でも作れるというのは大間違い」 「最大の要因は、やつらの技術力が高かったことだと思う。というかうちの規模の会社が研究開発で対抗できてたのがある意味奇跡。」 メモリは『装置があれば作れる汎用品』なわけではない。ということを彼は熱弁していた。 回路ひとつをとってみても、『アナログ』技術の塊で、 記憶素子のわずかな物理量(数10フェムトとか言ってた)の変化を 増幅する高精度なアンプだとか、 秒速数ギガビットの信号を処理するためにピコ秒単位で 信号のタイミングを

    先日倒産したメモリメーカーの友人と飲んできた話
  • iPhone「アプリの設計パターン」についてまとめてみる - ゆーすけべー日記

    iPhoneアプリの良いアイデアが出たので、これから作り始めようというところである。 さて、iPhoneアプリ開発童貞ってわけではないが、今までただ闇雲に作っていた感があるので、 実際にXcodeを起動してコードを書き始める前の設計をどうしていこうかと考えている。 ソフトウェアの作成はじめてではもちろん無いのでだいたい勝手は分かるものの、 iPhone特有の設計思考が必要な気がして、文献を漁っている。 ところが、世に出回っているiPhoneアプリにはUIKitをいじくるだけの解説ばかりではないか! で、つまるところ設計について有益だと思えたのは以下3つの文献だった。 「iOSアプリケーションプログラミングガイド」Appleのサイトからダウンロードできる 「iPhoneアプリ設計の極意 - 思わずタップしたくなるアプリのデザイン」のfladdictさんの章 「iOS開発におけるパターンによ

    iPhone「アプリの設計パターン」についてまとめてみる - ゆーすけべー日記
  • コードで学ぶドメイン駆動設計入門 〜エンティティとバリューオブジェクト編〜 - かとじゅんの技術日誌

    先日、DevLOVEで発表した「コードで学ぶドメイン駆動設計入門」ですが、入門としながらも難しかったかもしれません。モデリングの話は難しい方の話題なので仕方ないのですが、できるだけわかりやすく補足するブログを書いてみたいと思います。 まず、レイヤードアーキテクチャの話ですが、こちらのスライドを参照してください。 DEVLOVE HangarFlight で話したスライド&ソースコード - じゅんいち☆かとうの技術日誌 平たく言うと、そのアプリケーションが解決する問題の領域がドメインです。ドメインとそれ以外のものをごっちゃにしないようにしたのが、ドメイン駆動設計だと考えればよいと思います。 一般的に業務システムでは、対象業務がドメインに成り得ますので、ドメインは業務に準えて語られることが多いと思います。ドメインに登場する概念をユビキタス言語*1として定義し、モデルに落としこむというのが設計の

    コードで学ぶドメイン駆動設計入門 〜エンティティとバリューオブジェクト編〜 - かとじゅんの技術日誌
  • Jolt Awards 2011が選んだ、優れた設計/モデリング/アーキテクチャツール

    米Dor.Dobb's Journalが主催するJolt Awardsは優れた書籍を選出することでよく知られています。それについては記事「この1年の優れたIT系書籍はどれか?「Jolt Awards 2011」が6冊を発表」で紹介しました。 しかしJolt Awardsは書籍だけではなく、優れたソフトウェアについても選出しています。ちょうど先月10月26日に、設計やモデリング、アーキテクチャに関するツール分野で3つの製品が選出されたところです。 あまりこの分野のソフトウェアが注目されることが少ないので、どんな製品が選出されたのか見てみることにしましょう。各ソフトウェアの説明は、それぞれのWebサイトの説明と、Jolt Awardsでの評価を要約して組み合わせたものです。 Blueprint Requirements Center 2010 1つ目は、Blueprintの「Blueprint

    Jolt Awards 2011が選んだ、優れた設計/モデリング/アーキテクチャツール
  • 実行可能な仕様書は“設計できるプログラマ”が書く

    実行可能な仕様書は“設計できるプログラマ”が書く:“実行可能な仕様書”を作る!(2)(1/3 ページ) 前回、「実行可能な仕様書」を実現するための鍵が「機能パターンの確立」だと述べた。それらのパターンを有効活用するためには、DBを正規化するとともに、ビジネスロジックを機能側からDB側に移行しなければいけない。そして、ビジネスロジックを的確に仕様化するためには設計スキルとともにプログラミングスキルが必要になる。 DBを正規化することのインパクト 前回、業務システムに含まれる機能(データ処理プログラム)をいくつかの「機能パターン」に整理することで「実行可能な仕様書」が実現可能になると説明した。機能パターンごとに仕様情報のデータ様式を定め、これを処理する「仕様翻訳エンジン」と「仕様エディタ」を用意すれば、「実行可能な仕様書」のための基盤が完成する。この基盤を便宜上「アプリケーションドライバ(アプ

    実行可能な仕様書は“設計できるプログラマ”が書く
  • スレッドローカルを使うハメになるのは設計ミスだと言ってみる - R42日記

    スレッドローカルは便利なクラスです。 いつでもどこでもスレッドセーフなグローバル変数を定義することができます。 ごく稀にですが、スレッドローカルを使わないと解決できない問題もあるでしょう。 しかし、思うのです。スレッドローカルを使うのは基的に「負け」なのだと。 例えば 例えば、こんなコードがあったとします。 public class FooAction implements WebAction { // 入力フォームのバリデーションを行う。 @Override public void validate(Form form) throws ValidationException { if (form.get("name") == null) { throw new ValidationException("name is null"); } if (form.getInt("age") <

    スレッドローカルを使うハメになるのは設計ミスだと言ってみる - R42日記
  • プログラマーは"一線"を超えると急激に伸びる - Linux/Ruby 小崎氏(後編)

    プログラマーのスキルはある一定のラインを超えたところで急激に伸びるんです。そのラインは早く超えるには、OSSの開発に参加していろんな人が書いたソースコードをたくさん読むというのは有効な手段の一つだと思います」――こう語るのはLinuxカーネルおよびRubyの現役コミッターである小崎資広氏だ。 小崎氏には前回、LinuxカーネルやRubyの開発に関わった経緯や、コミュニティ活動を円滑にするポイントをうかがった。今回は、これからOSSコミュニティに参加しようと考えている若手エンジニアに向けたアドバイスをお願いしよう。 関連インタビュー 【インタビュー】コミュニケーション力向上に役立ったOSS活動 - Linux/Ruby 小崎資広氏 【インタビュー】言語は思考にも影響を及ぼす、だからRuby開発を選んだ--まつもとゆきひろ氏 【インタビュー】Rubyが大きくなれたのは、私に隙があるからかな

    プログラマーは"一線"を超えると急激に伸びる - Linux/Ruby 小崎氏(後編)
  • Strategic Choice

    Problemこのクラスは大きすぎて、もうこれ以上大きくしたくありません。「単一責務の原則」を適用してクラスを分割しようと思います。分割の具体的な方法がわかりません。Strategy「クラスの抽出」を適用します。どんなとき?「単一責務の原則」を適用してクラスを分割しようと思います。責務を把握したので、分割の実装を行いますが、具体的な方法がわかりません。どうする?「クラスの抽出」リファクタリングを適用します。ほとんどのレガシーシステムにおいて、最初にできることは、「実装レベル」で単一責務の原則を適用することです。つまり、大きなクラスから「クラスの抽出」をして、抽出クラスに委譲することです。「インタフェースレベル」で単一責務の原則を導入するには、より多くの作業が必要です。クラスの呼び出し側を変更しなければならず、テストも必要になります。まず、実装レベルで単一責務の原則を導入しておくと、将来イン

  • まつもと直伝 プログラミングのオキテ 第8回

    今回はソフトウエア設計に登場するパターンをまとめたものである「デザイン・パターン」について学びましょう。ソフトウエア設計において適切なデザイン・パターンをカタログから選び出すことで,複雑なプログラムでも効率良く設計できるようになります。 デザイン・パターンは設計上繰り返し登場するパターンを指すプログラミング用語です。元々は建築においてさまざまな建築物や街のデザインに共通して用いられる意匠や構成の組み合わせを意味するために使われていました。建築界においても,比較的近年になって使われ始めた言葉です。デザイン・パターンという考え方はChristopher Alexander氏が著書『The Timeless Way of Building』(Oxford University Press,1979)の中で初めて紹介したのだそうです。 通常,建築物は一つひとつ設計が異なり,また用途や建築条件などの

    まつもと直伝 プログラミングのオキテ 第8回
  • これからはじめるRuby on Rails

    はじめに Rubyと出会ったころ、その簡潔さに感動した著者は、「ここまで自然言語に近い形でプログラムが書けるのであれば、インターネットとPCの違いすら理解しないでも、少しはプログラミングができるようになるかもしれない」と、家庭での普及に挑戦したことがあります。 その試みは、渡した入門書を「はじめてのRUBAI」と読まれた時点で頓挫したわけですが、その経験から「Rubyの文法に従ってはいるが、何やら他言語の匂いを感じるコード」のことを、Rubyの潜在力を生かしきれていないという意味で「RUBAIコード」と呼ぶことにしました。 そして、社内のさまざまな分野のプログラマにRuby開発を指導してみて分かったのは、"RUBAIコード"には、実装レベルの間違いと、設計レベルの間違いがあるということです。 実装レベルの間違いとは、処理を他言語の習慣に従って記述することで引き起こされます。Javaプログ

  • 1