タグ

設計に関するt1mvverrのブックマーク (22)

  • ドメインモデルの完全性と純粋性 - kawasima

    ドメインモデルには、完全性と純粋性、そしてアプリケーション性能の3つ全てを同時に満足させることは難しい場合があるという話。

    ドメインモデルの完全性と純粋性 - kawasima
  • 「オブジェクト指向神話からの脱却」という特集をWEB+DB PRESSで書きました - きしだのHatena

    「オブジェクト指向神話からの脱却」というあおり気味タイトルの特集をWEB+DB PRESS vol.132で書きました。 12/24発売!クリスマスプレゼントです WEB+DB PRESS Vol.132 作者:きしだ なおき,加藤 尋樹,斉藤 洸紀,牟田 裕太郎,吉澤 政洋,朝日 リナ,鈴木 僚太(うひょ),川島 義隆,五十嵐 進士,末永 恭正,佐藤 雄太,吉井 健文,牧 大輔,西山 和広,吉田 花春,古川 雅大,岡林 大,池澤 春菜,和田卓人,日高 正博,はまちや2,竹原技術評論社Amazon 大まかには、「オブジェクト」でソフトウェアをぜんぶ考えるということに無理があったので、パーツそれぞれ適したやりかたでやっていこうぜ!という内容です。 ソフトウェアを切り出したときのパーツとしてのオブジェクトの特性が同質であるという暗黙の前提があって、だから「オブジェクトの話をすればソフトウェア開

    「オブジェクト指向神話からの脱却」という特集をWEB+DB PRESSで書きました - きしだのHatena
    t1mvverr
    t1mvverr 2022/12/09
    守破離の離みたいな事を伝えても正しく理解されなくて意味なさそうに感じる。オブジェクト指向の事を理解してる人じゃないと、オブジェクト指向からの脱却はできないのでは?
  • プログラマーのための原則(2 万字) - Qiita

    はじめに 今でも語り継がれる「原則」は、それだけ価値のあるコンセプトです。 歴史を振り返ることは、失敗を防ぐための効率の良い方法になります。 👑 DRY (Don't repeat yourself) 「同じことを繰り返すな。」 Andy Hunt と Dave Thomas の著書『達人プログラマー』(1999 年)で提唱された原則で、プログラミングに関する最も重要な原則といっても過言ではありません。 DRY 原則だけでなく、どんなデザインパターンやベストプラクティスでも、同じ処理が重複することは基的に許されていません。 これにはどういう意図が込められているのでしょうか。 🔖 表面的な理由 この原則は、コードの再利用性を高め、そのために疎結合な状態を保つことは、極めて有用なことを示唆します。 1 箇所を直せば済むべき箇所をあちこちに分散させてしまうのは、自分で事故を招いているのと同

    プログラマーのための原則(2 万字) - Qiita
    t1mvverr
    t1mvverr 2022/10/17
    "(実際には、我々の技量が足らないが故に問題が複雑化するケースの方が多いのですが、それでも我々自身が悩む他ないということに変わりはありません。)"
  • データベース設計におけるNULL - kawasima

    NULL絶対ダメ論や現実的には無理だから上手く付き合っていくしかないんだよ論など見られるが、せっかくCodd博士が上図の分類を提示しておられるので、これを元にもっと詳細化して考えてみよう。

    データベース設計におけるNULL - kawasima
  • 単一責任の原則(Single responsibility principle)について、もう一度考える | オブジェクトの広場

    単一責任の原則(Single responsibility principle)について、もう一度考える はじめに オブジェクトの広場をご覧の皆様ならば、「SOLID原則」という言葉を聞いたことがあるかもしれません。 SOLIDとは、以下の5つのソフトウェア設計原則を並べたバクロニムです。 Single Responsibility Principle:単一責任の原則 Open/closed principle:オープン/クロースドの原則 Liskov substitution principle:リスコフの置換原則 Interface segregation principle:インターフェース分離の原則 Dependency inversion principle:依存性逆転の原則 ソフトウェアエンジニアが知っておくべき設計原則のセットとして、Clean Architecture や

    単一責任の原則(Single responsibility principle)について、もう一度考える | オブジェクトの広場
  • 状態、結合、複雑性、コード量の順に最適化する - valid,invalid

    There’s No Such Thing as Clean CodeのHacker Newsコメント経由でコードやシステム設計・最適化についての良いコメントを見つけた。どうやらHacker Newsで何度も引用されているらしいが日語で言及された記事が見つからなかったので取り上げてみる。 コメントは2016年のSandi MetzのThe Wrong Abstractionに関するもので、発言者のcurun1rいわく「私は設計の優先順位をこの順序で学習することで、優れた開発者になれた」。*1 4つの基準と優先順位のガイドライン 状態 > 結合 > 複雑性 > コード量 私は状態 (state)、結合 (coupling)、複雑性 (complexity)、コード量 (code) の順に削減することでコードを最適化する。 コードがよりステートレスになるなら、結合を増やすこともいとわない 結

    状態、結合、複雑性、コード量の順に最適化する - valid,invalid
  • ドメイン駆動設計によるシステム開発 | 知的資産創造 | 野村総合研究所(NRI)

    システム構築にかかるコスト・期間は20年単位で倍々に増加している。これは「2025年の崖」で示されているレガシーシステムの問題も大きいが、ウォーターフォールモデルで専門家による分業制をとっているシステム開発生産ラインのありようも看過できない。一方、アジャイル開発によるコスト削減や開発期間短縮の効果について、大規模な金融系システムでの実例はまだ少ない。さらに、昨今のマイクロサービスを実現するための設計手法も確立できてはいないと考える。 今回、筆者らチームは「ドメイン駆動設計」を活用し、システム構築コスト・期間を大幅に削減し、かつマイクロサービスに適合するシステム開発の可能性についてのPoCを実施した。

    ドメイン駆動設計によるシステム開発 | 知的資産創造 | 野村総合研究所(NRI)
  • GitHub - Katsukiniwa/awesome-software-design-ja: 日本語でのソフトウェア開発・設計に関する記事や書籍をまとめたリポジトリです

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

    GitHub - Katsukiniwa/awesome-software-design-ja: 日本語でのソフトウェア開発・設計に関する記事や書籍をまとめたリポジトリです
  • 50年前にモバイルハウスやテレワークを予言!? 黒川紀章のカプセル建築が再注目される理由

    建築家・黒川紀章(1934~2007年)をご存じだろうか? 日を代表する現代建築の運動「メタボリズム」の中心的建築家の一人だ。1973年に黒川が手がけた別荘型モデルハウス「カプセルハウスK」が、クラウドファンディングによる再生のもと、2021年夏にも宿泊体験ができるようになる。黒川は、大阪万博で未来型カプセル住宅のパビリオンを手がけ、マンションにも応用、そしてカプセルホテルのあのカプセルベッドの原型にも関わった。黒川が世に送り出したカプセル建築のDNAは現代においても発展的に息づいているようだ。 黒川紀章の別荘型モデルハウスへの宿泊体験が可能に 黒川紀章、この稀代の建築家は、京都大学で西山卯三(寝分離の公営住宅標準設計「51C型」を開発)に師事、その後、東京大学大学院で丹下健三の研究室に学んだ。黒川は、若くして頭角を現し大学院在学中に自らの事務所を興し、浅田孝、大高正人、槇文彦、菊竹清

    50年前にモバイルハウスやテレワークを予言!? 黒川紀章のカプセル建築が再注目される理由
    t1mvverr
    t1mvverr 2021/09/21
    モンゴルの遊牧民みたく移動住居が主流になると予言してるのか。
  • 自然キー vs 人工キー 勝手に決着

    ブックマークサービスQiNeel関連の記事や身の回りのよしなしごとをそこはかとなく書きつくっています。 RDB界隈で時折バトル議論のネタになる「主キーには自然キーと人工キーのどちらを使うべきか?」というテーマについて。 「人工キーのほうがデータ量が少ないし高速だからこれでいいじゃん」 「いやいや、原則は自然キーで、人工キーはどうしようもないときにだけ使うべきだ」 「理論的には自然キーを使うべきなんだろうけど、効率とか考えたら現実的には人工キー使っちゃうよね」 現実を優先する人、原理原則を大事にする人、原則を尊重しつつも現実との折り合いをつける人…立場は様々ですが、これについて思うことが少々あるのでいつになく真面目に語ってみます。 まず用語を整理しようか。 自然キー、ナチュラルキー、人工キー、サロゲートキー、代理キー、複合キー…いろいろ出てきて混乱しますし、実際に混乱(混同)している人も少な

  • Clean Architectureで設計してRxJSを使った話

    歌舞伎座.tech#7「Reactive Extensions」での発表資料 http://kbkz.connpass.com/event/12597/

    Clean Architectureで設計してRxJSを使った話
  • 組織の問題も解決するアーキテクチャ BackendsForFrontends

    PIXTAは2007年にサービスを開始し、年々サービスとシステムの規模が大きくなっおり、それに伴い、組織的な規模も大きくなってきました。 今回はPIXTAにおいて規模が大きくなるシステムと組織をつなぐためのアーキテクチャとしてBackendForFrontend(以下BFF)の導入検討を始めているので、BFFの概要やユースケースを紹介し、ピクスタが抱える問題をどのように解決するかについて、まとめた資料です。 BFFは世の中にで初めてから日が浅く、そこまで認知が行き渡ってないのではないかと思うので、今回話のメインはBFFそのものに焦点を当てて紹介します。 この内容はWeb現場Meetup#4の発表資料です。Read less

    組織の問題も解決するアーキテクチャ BackendsForFrontends
    t1mvverr
    t1mvverr 2020/01/22
    ユースケース活用例がそれぞれ1ページに収まってて、分かりやすくて、良い。
  • CとRustで一から作るマイクロカーネルOS

    マイクロカーネルは浪漫に溢れる非常に作りがいのあるソフトウェアです。この記事は,「マイクロカーネルベースのOSの一から作ってIaaSで動かす」ことを目標に作ったマイクロカーネルベースのOS Resea(りーせあ)の設計と実装について軽くまとめた物です。 ソースコードはGitHubにあります。 マイクロカーネルとは Linuxのようなモノリシックカーネルでは色んな機能がカーネル空間で動きますが,マイクロカーネルではユーザプロセスたちが互いに通信しながらOSを作り上げます。プロセス・スレッド・仮想メモリ管理,プロセス間通信,タイマーといった必要最低限の機能だけをカーネルが担います。デバイスドライバやファイルシステムといった残りの機能は,独立したユーザプロセスとして動きます。たとえデバイスドライバが暴走しても他のコンポーネントを壊すことはないのです。マイクロカーネルは信頼性が高く,疎結合で美しい

    t1mvverr
    t1mvverr 2019/12/15
    自分に知識があったら、Rustで続行して、歪なコードが出来上がりそう。
  • 設計要件をギッチギチに詰めたValueObjectで低凝集クラスを爆殺する - Qiita

    /// <summary>契約金額</summary> public class ContractAmount { public int AmountIncludingTax; public decimal SalesTaxRate; } 当然データの入れ物(以後データクラスと呼称)だけでなく、税込み金額を計算するロジックが必要です。ここであまり設計を考えないと、この手の演算ロジックはデータクラスとは別のクラスに実装されることが多いです。以下のようにControllerに実装されることが多いのではないでしょうか。 /// <summary>契約コントローラー</summary> public class ContractController { private ContractAmount _contractAmount; /// <summary>税込金額を計算する。</summary>

    設計要件をギッチギチに詰めたValueObjectで低凝集クラスを爆殺する - Qiita
    t1mvverr
    t1mvverr 2019/11/15
    internalで外部から値を取れるように変えるのか、Valueという名のgetterを作って取れるようにするのか、似た目的に別々な手段を用意した意図が分からない。どっちかに統一したほうが良くね。
  • 宣言的UIはReact Hooksで完成に至り、現代的設計論が必須の時代になる - Qiita

    この記事は、ある程度以上の規模のGUI開発において、React Hooks以後の宣言的UIにより、大規模開発に用いられる設計論に完全に対応できるようになり「ビジネスロジックの変更や追加」に対応するコストを低く保つこと(技術的負債の抑制)ができるようになったことを解説するものです。 技術的負債の抑制には、技術的負債の原因となりがちな「広範囲の密結合」と「適切な疎結合を保つ仕組みの欠如」が欠かせません。それをカバーするのが、大規模開発をクリーンに行える設計論(ここでは「現代的な設計論」とよぶもの)です。クリーンアーキテクチャなんかでGUIによく適用されるHumble Object Patternのようにプレゼンテーションとビューを分離する必然性が無くなるでしょう。 ポイントは ある程度以上の規模で開発するなら設計論をうまく使い設計しないと、技術的負債を抱え込む(ビジネスロジックの変更や追加に対

    宣言的UIはReact Hooksで完成に至り、現代的設計論が必須の時代になる - Qiita
    t1mvverr
    t1mvverr 2019/09/07
    テーブルやボタンなどの汎用コンポーネントを実装したらstorybookで管理し、flux系ライブラリと組み合わせてページをさくっと作る、みたいな流れになるのだろうか。
  • ITmedia エンタープライズ:SEの道は仕様書に始まり仕様書に終わる (1/3)

    最近のシステム構築では仕様書をきちんと記述しないで、いきなりツールを使ってプログラムを作成することも多いようだ。否定する気はないが、駆け出しのころはしっかり自分の手で仕様書を書いた方がいい。 前回は、SEを目指している皆さんに向けて、仕事に取り組む姿勢の観点からアドバイスを書いた。今回は、SEに求められるより具体的な知識やスキルの向上に役立つ話を書いてみたい。 SEとして必要な知識やスキルは非常に広範にわたる。経験を積み、上級SEになってくればより経営的な知識が求められるが、最初のころは、システム構築に必要な知識やスキルが特に重要になる。今回は、システム構築における基礎的なスキルの開発方法を紹介しよう。 仕様書を書くこと 最近のシステム構築では、仕様書をきちんと記述しないで、いきなりツールを使ってプログラムを作成したり、システムを構築したりする手法が取られることも多いようだ。こういった手法

    ITmedia エンタープライズ:SEの道は仕様書に始まり仕様書に終わる (1/3)
    t1mvverr
    t1mvverr 2019/09/05
    リソース(CPU)の消費量が多い方法ができない、すべてのケースで処理が速いケース、一定の条件のときだけ処理が速ければいい、等のケースがあった。”今だとリソースも潤沢なので、選ぶケースも減っている気がする。
  • ドメイン駆動設計のリポジトリパターンをプロジェクトへ持ち込む時の話

    プログラミング道場生Hatajoeです。 ドメイン駆動設計読書会@大阪には初回から参加させて頂いています。 今回は、読書会で得られた知見を業務に導入する際の気付きをお話したいと考えています。 なぜリポジトリなのか話をする前に、なぜドメイン駆動設計な開発を導入しようと思ったのかの前提を説明させて下さい。 私は普段、チームでWebアプリケーションの開発を行っています。 チームには、自分を含めて3名のプログラマーが在籍しています。 言語はPHPで、CodeIgniterというWebアプリケーションフレームワークを使用しています。 現在、私達は以下の問題を抱えています。 ファットコントローラーコピペコードテスト無し既存機能の改修難易度が高く、機能追加でレガシーなソースが量産されるという悪循環です。 私は、これに対処するために、複雑で重複したビジネスロジックを切り出す必要があると考えました。 しかし

    ドメイン駆動設計のリポジトリパターンをプロジェクトへ持ち込む時の話
    t1mvverr
    t1mvverr 2019/08/19
    Java環境なら「PostgresからSELECTでデータ取得したりINSERTでデータ追加する」「CSVファイルからBuffedReaderで取得したりFileWriterで出力する」とかの処理をリポジトリクラスが担う認識で合ってるだろうか。
  • Elixir から Elm の流れで、いよいよオブジェクト指向に対する懐疑心が無視できないレベルに達した2017年冬。 – ゆびてく

    Elixir から Elm の流れで、いよいよオブジェクト指向に対する懐疑心が無視できないレベルに達した2017年冬。 – ゆびてく
  • プログラミング経験がない経営者のためのソフトウェア開発 11の事実 | Social Change!

    今やどんなビジネスでもITが関係している。ITを支えているのはソフトウェアだ。あらゆるものがソフトウェアで実現される時代になった。そんな事業や生活に密接に関わるソフトウェアだが、その開発について知られていないことも多い。 とくに経営者がプログラミング経験がないことで、ソフトウェア開発のリーダーシップをとるときに的外れなマネジメントをしてしまうことがある。あまねく経営者がプログラミング経験があれば良いのかもしれないが、それは現実的ではない。 プログラミング経験がなくても、せめてソフトウェア開発の特性について知っておくと良さそうなこともあると思い、なるべく専門用語を使わずに稿を書いた。 プログラミングは製造ではなく、設計である いまだにソフトウェア開発を、ビルや家屋の建築に喩える人がいるし、工場でモノを製造するようにプログラムが作られると思っている人もいる。 ここが間違いのもとだ。ハードウェ

    プログラミング経験がない経営者のためのソフトウェア開発 11の事実 | Social Change!
  • Inversion of Controlパターンでコンポーネント間の結びつきを弱める

    はじめに Inversion of Control(IoC:制御の反転)パターンはDependency Injectionパターンとも呼ばれ、最近のJ2EEコミュニティではよく利用されています。Spring 、PicoContainer、HiveMindのように、IoCパターンを使用して軽量J2EEコンテナを開発しているオープンソースプロジェクトもいくつかあります。 しかし、IoCは新しい概念ではありません。このパターンは数年前から利用されています。IoCパターンでは、インターフェイス、継承、ポリモーフィズムといったオブジェクト指向設計の原則および特徴を使用して、ソフトウェアコンポーネントの結び付きを弱め、コンポーネントの再利用とテストが容易になるようなソフトウェア設計を実現します。 稿では、IoCパターンの概要を説明し、オープンソースのIoCフレームワークをまったく実装せずにIoCパタ

    Inversion of Controlパターンでコンポーネント間の結びつきを弱める
    t1mvverr
    t1mvverr 2017/08/23
    何でCostomerを注入しないのか?と思ってたら説明があった