タグ

設計に関するgreenbowのブックマーク (31)

  • ビジネスロジックを「型」で表現するOOPのための関数型DDD / Functional And Type-Safe DDD for OOP

    Object-Oriented Conference 2024で発表した資料です。 https://fortee.jp/oocon-2024/proposal/b31c9818-3cb8-4350-adfe-cbc839cdf829 ビジネスの専門知識(ドメイン)を中心に据えたドメイン駆動設計に代数的データ型などの関数型のパラダイムを加えたよりタイプセーフな関数型DDDを紹介します。 セッションではドメインモデリングによって発見したモデルやビジネスロジックをソフトウェアに反映する際により型を重視した設計を加えます。 型で表現する範囲が広がることでビジネスロジックをより明確にコードで表現できるようになります。 さらには型で表現されているためコンパイルフェーズで気付けるミスが増え、ソフトウェアの品質向上にもつながります。 関数型の考えをいれるといってもただ単にHaskellなどに代表される関

    ビジネスロジックを「型」で表現するOOPのための関数型DDD / Functional And Type-Safe DDD for OOP
  • 保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発、その全体像 ~Software Design 2022年3月号「そろそろはじめるテスト駆動開発」より | gihyo.jp

    保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発⁠⁠、その全体像 ~Software Design 2022年3月号「そろそろはじめるテスト駆動開発」より 今回、Software Design 2022年3月号 第2特集「そろそろはじめるテスト駆動開発 JavaScriptでテストファーストに挑戦」の第1章「保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発、その全体像」をサイトに掲載します。第2章以降については、誌『Software Design 2022年3月号』電子版(Gihyo Digital Publishing、Amazon Kindle)をご購読いただければ幸いです。 第1章では、混同されることの多い自動テスト関係の概念を、自動テスト、テストファースト、テスト駆動開発の3つの段階に分け、それぞれの効果や注意点を説明します。ソフ

    保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発、その全体像 ~Software Design 2022年3月号「そろそろはじめるテスト駆動開発」より | gihyo.jp
  • 実録レガシーコード改善 / Working with Legacy Code: the True Record

    2024/01/15(月) 12:00 〜 13:00 t-wadaさんが後世に残したい、実録レガシーコード改善 https://findy.connpass.com/event/304101/ テストコードが無いコードを引き継いだところからはじまる、実際に2018年に行った受託開発案件のエピソードとコードをプロダクトオーナー(引き継ぎ前のコードを書いた人)の許可を得て使用しています。登場するコードは全て物、登場するデータは講演用の架空のものです。

    実録レガシーコード改善 / Working with Legacy Code: the True Record
  • RESTful のウェブ API 設計で避けるべき 6 つのよくあるミス | Google Cloud 公式ブログ

    ※この投稿は米国時間 2022 年 12 月 1 日に、Google Cloud blog に投稿されたものの抄訳です。 オンラインで、組み立て式のテーブルを注文したとします。ところが、パッケージを開けてみると、組立説明書が入っていません。完成品がどんなものかはわかっていても、それぞれのパーツをどう組み立てればいいのか、まるでわかりません。設計が不十分な API を使うコンシューマ開発者も、同じような経験をしているといえます。適切に設計された API なら、容易に見つけ、検索してアクセスし、使用することができます。高品質の API は、コンシューマ開発者がアイデアをひらめき、新しいユースケースを作り上げる手助けになってさえくれます。 もちろん、API 設計を改善する方法はあります。たとえば、RESTful のプラクティスに従うなどです。しかし、お客様が知らず知らずのうちに、ちょっとした不便

    RESTful のウェブ API 設計で避けるべき 6 つのよくあるミス | Google Cloud 公式ブログ
  • わかりやすくて最高だった「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」レビュー | DevelopersIO

    わかりやすくて最高だった「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基」レビュー 「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基」を読んだところ、とても良かったのでレビューしたいと思います。 私の状況 まずこのを読む前の私がどの程度ドメイン駆動設計について理解していたかご紹介します。 以前同僚が書いてくれたサンプルコードを手にレイヤードアーキテクチャみたいなTypeScriptLambda関数を書いている 「Service」とか「Repository」とかの単語を命名に使っているが、使い方あってるのか自信ない、というか意味をよくわかっていない 実装中「この構成でええんか?」と何度も思い悩む 時間かかるくらいなら雑にさっさと書いてしまったほうが良いのでは、と思うこともある。けどちゃんとしたコードを書きたいんや。 こういうのを読んで、テストしや

    わかりやすくて最高だった「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」レビュー | DevelopersIO
  • データベース設計におけるNULL - kawasima

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

    データベース設計におけるNULL - kawasima
  • 『良いコード/悪いコードで学ぶ設計入門』を読んで気になったことのメモ

    はじめに 話題となっている『良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方』 (出版社のページ) を読みました。 全体的には「うんうん、そうだよね」と同意できることが多かったです。 もちろん、初めて目にするような考え方, アイディア, テクニックもありました。 一方、気になったことやちょっと引っかかったこともありましたので、メモしておきます。 あくまでもメモなので結論のようなことはありません。 p.55: HitPoint.isZero HitPoint クラスに isZero メソッドがあります。 「ヒットポイントがゼロであれば true」という仕様で、実装は次のようになっています。

    『良いコード/悪いコードで学ぶ設計入門』を読んで気になったことのメモ
    greenbow
    greenbow 2022/05/05
    個人的には isNotEnabled の方が好み。isBefore/isAfter みたいに、単語として対義語でも論理否定じゃない場合もあるので読むとき少し迷うんですよね。
  • そもそもエンジニアは何を設計するのか? 『はじめての設計をやり抜くための本 第2版』から解説

    仕様に沿ったプログラミングができるようになったエンジニアが設計に取り組むために、その全体像と具体的な手順を解説した技術書が『はじめての設計をやり抜くための 第2版』(翔泳社)です。書では大きく外部設計と内部設計、さらにアーキテクチャについて取り上げ、システムをゼロから作り上げるためのノウハウを解説。今回は「第2章 設計の目的」から、そもそもエンジニアは何を設計するのかを説明したパートを紹介します。 設計ができるようになるには、設計とは何かを知る必要があります。世の中には、設計に関する書籍がたくさん出回っています。最近では、オブジェクト指向設計に関するものが多いようです。書店に行くと、「オブジェクト指向」「UML」「ユースケース」といった文字が目に留まります。他にも、「アーキテクチャ」「デザインパターン」「フレームワーク」などもよく見かけるでしょう。これから設計を学ぶ皆さんは、学ぶことが

    そもそもエンジニアは何を設計するのか? 『はじめての設計をやり抜くための本 第2版』から解説
  • ソフトウェアアーキテクチャの基礎

    ソフトウェアアーキテクチャとは、ソフトウェアシステムの成功に欠かせない重要な土台です。そのためソフトウェア開発者には、効果的なアーキテクチャを実現するスキルが求められます。書は、そうした効果的なアーキテクチャを設計、構築、維持するアーキテクトになるために必要なスキルや知識を、現代的な視点から整理して包括的に解説する書籍です。 ソフトウェアアーキテクチャの定義から、アーキテクトの役割、モジュールや結合、アーキテクチャスタイルといったアーキテクチャ設計の基礎、チームやステークホルダーと効果的にコラボレーションしていくために必要なソフトスキルまで、さまざまなトピックについて実践的な例とともに説明します。 正誤表 ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正

    ソフトウェアアーキテクチャの基礎
  • 予防に勝る防御なし - 堅牢なコードを導く様々な設計のヒント / Growing Reliable Code PHPerKaigi 2022

    PHPerKaigi 2022 2022/04/10 10:40〜 Track A レギュラートーク(40分) PHP はバージョンを追う毎に型宣言、例外、表明、列挙型などの機能が大幅に強化され、堅牢なコードを書くための機能が充実してきました。それらの機能はどう使うと効果的なのでしょうか。 講演では PHP 8.1 をベースにして、誤りを想定してチェックするのではなく、そもそも誤りにくい設計とはどのようなものか、つまり「予防」の観点を軸足に、堅牢なコードを導くための様々な設計のヒントをご紹介します。 Agenda - 型宣言 - 列挙型 - ドメインモデリング - 不変性と等価性 - 完全性 - レイヤーと責務

    予防に勝る防御なし - 堅牢なコードを導く様々な設計のヒント / Growing Reliable Code PHPerKaigi 2022
  • オオバ@UIエンジニア on Twitter: "仕様変更に強い命名は大事だ。ボタンを「OKボタン」や「Noボタン」と名付けていたらヤバいかも。ゲーム開発に仕様変更はつきもの。開発中盤「OKボタンの色を使ってキャンセルボタンを作りたい」というケースもある。結論、用途ではなく機械的… https://t.co/6nwzoBNKWR"

    仕様変更に強い命名は大事だ。ボタンを「OKボタン」や「Noボタン」と名付けていたらヤバいかも。ゲーム開発に仕様変更はつきもの。開発中盤「OKボタンの色を使ってキャンセルボタンを作りたい」というケースもある。結論、用途ではなく機械的… https://t.co/6nwzoBNKWR

    オオバ@UIエンジニア on Twitter: "仕様変更に強い命名は大事だ。ボタンを「OKボタン」や「Noボタン」と名付けていたらヤバいかも。ゲーム開発に仕様変更はつきもの。開発中盤「OKボタンの色を使ってキャンセルボタンを作りたい」というケースもある。結論、用途ではなく機械的… https://t.co/6nwzoBNKWR"
    greenbow
    greenbow 2022/02/23
    保守が辛くなるのでやめていただきたい…「Button_0」を変更したときの影響が予測できない。 / 開発期間が短くてリリース後に更新が入らないようなシステムなら有りかも。
  • なぜエンジニアが作る画面はダサいのか…?「理由」と「対策」を徹底解説【エンジニア向け画面デザイン講座】 - Qiita

    なぜエンジニアが作る画面はダサいのか…?「理由」と「対策」を徹底解説【エンジニア向け画面デザイン講座】UXUIDesignUIデザイン画面設計 1.はじめに エンジニアの私がデザインを気で勉強した結果、デザイナーとエンジニアはそもそも思考が大きく違っているということがわかりました。 今回は「それ」をデザインに苦手意識のあるエンジニア方にも理解してもらえたらと思い、わかりやすくまとめてみました。 2.アプリの画面デザインを考えてみよう まず、こんなアプリを考えてみてください。 フィットネストレーナーが使うアプリ トレーニングルームでお客様とお話しながら使う 端末はタブレット そして 会員の個人情報確認 前回までのトレーニング状況の確認 次回の予約受付 といったことをします。 使える情報としては、こんな感じです。 あなたならどう画面デザインをするか、もしお時間があったら考えてみてください。

    なぜエンジニアが作る画面はダサいのか…?「理由」と「対策」を徹底解説【エンジニア向け画面デザイン講座】 - Qiita
  • 実践! Typescript で DDD - マイクロサービス設計のすすめ - Leverages Tech Blog

    対象読者 マイクロサービス化を検討しており、実際に作る場合の構成を参考にしたい。 ドメイン駆動設計について、基的な用語の知識がある。 TypeScript を多少触ったことがある。理解がある。 はじめに こんにちは。エンジニアの吉村です。 現在、弊社が運営する teratail というサービスに携わっており、CakePHP で動作しているモノリシックな既存サービスをマイクロサービスに移行するというプロジェクトを進行中です。 この記事では、実務を通して得た知見として、マイクロサービス化によりどんな恩恵があるのか、具体的にどのような構成で実装をしているのかについてご紹介します。 TL;DR マイクロサービスのバックエンドサービスの実装に焦点を絞って、ドメイン駆動設計 + オニオンアーキテクチャをベースに設計をしました。 記事では、具体的に「ユーザ新規登録処理」の実装をする場合を例にとり、実

    実践! Typescript で DDD - マイクロサービス設計のすすめ - Leverages Tech Blog
  • SOAなのにトラブルが連鎖、みずほ銀行システム障害の謎

    疑問9 なぜe-口座への一括切替処理を2~3月に実施したのか みずほ銀行は2021年2月27日から6回に分けて、1年以上記帳が無い定期性預金の口座約259万件を、通帳を発行しない「みずほe-口座」へ一括して切り替える計画だった。1回につき切り替える口座は45万件だ。 しかし2月28日、定期性預金システムでは45万件のe-口座一括切替処理に加えて、月末取引のバッチ処理が25万1000件予定されていた。合計は70万1000件だ。それに対して、定期性預金システムの「取消情報管理テーブル」のインデックスファイルは、1日当たりの更新が64万2969件を超えると容量オーバーになる設定だった。 月末や年度末の処理がある2~3月にe-口座への一括切替を強行したのは、3月末までに259万件の通帳を廃止できれば、印紙税を年間約16億円削減できると見込んでいたためだ。 「突き抜け」の心配は無かった またみずほ銀

    SOAなのにトラブルが連鎖、みずほ銀行システム障害の謎
  • イーロン・マスクのロケット製造5つのステップがサイコーだった

    イーロン・マスクが YouTube チャネルでスペース X のテキサス工場スターベースの中を歩き回りながらロケット製造や電気自動車について説明しているのを観た。ツイートしたこの件。 これがめちゃくちゃに示唆に富んでいて面白かった。この日のイーロン・マスクは饒舌で楽しそうなので、かなり魅入ってしまった。きっと彼はカンファレンスや会議室の中でインタビューを受けるよりも、工場でみんながロケット作ったり作業している場で語った方が情熱を込めていろいろ説明してくれるんだと思う。 この中で製造工程の話があって、これはロケット製造などの特定分野だけでなく、IT やその他の分野にでも当てはまる普遍的な知見だと思ったので意訳してみた。ざっとビデオを観て印象に残った部分だけを意訳した。あくまで大枠で言ってることをまとめただけなので、もし詳細に興味があればぜひビデオを観てイーロン・マスクの話を直接聞いて確認してく

    イーロン・マスクのロケット製造5つのステップがサイコーだった
  • みずほ銀行システム障害を悪化させた、「エラー設計」と運用のミスを解説

    第3回である今回は、「(3)なぜ『二重エラー』が発生したのか」と、「(4)なぜ一度減ったATMのカード取り込みが急増したのか」を解説しよう。 (3)なぜ「二重エラー」が発生したのか みずほ銀行が2021年2月28日朝、定期性預金の口座約45万件について、通帳を発行しない「みずほe-口座」へ一括して切り替える処理を始めた。すると午前9時50分ごろ、定期性預金システムのDBにある「取消情報管理テーブル」のインデックスファイルが更新できなくなり、これをトリガーに定期性預金システムのDB全体が更新不能になった。 定期性預金システムのデータベース管理システム(DBMS)はトランザクションに際して、必ず複数のテーブルを更新しようとする。具体的には「定期明細テーブル」「定期口座残高テーブル」といった口座情報に関する「業務テーブル」と、業務テーブルに対する更新内容を記録しておく取消情報管理テーブルだ。 定

    みずほ銀行システム障害を悪化させた、「エラー設計」と運用のミスを解説
  • クラス設計本格入門 JJUGナイトセミナー 2021-6-16

    イベントの動画 : https://www.youtube.com/watch?v=2Z1CJhPk-f8 オブジェクト指向プログラミングはクラス設計。 クラス設計はプログラムの分割。 クラス設計の焦点は、ビジネスルールを表現するクラスと、ビジネスアクションを表現するクラス。 クラス設計やパッケージ設計の実証済の形を覚えると、出発地点の設計が楽になる。 リファクタリングを積み重ねて設計を改善していく。

    クラス設計本格入門 JJUGナイトセミナー 2021-6-16
  • ユーザー アカウント、認証、パスワード管理に関する 13 のベスト プラクティス2021 年版 | Google Cloud 公式ブログ

    ※この投稿は米国時間 2021 年 5 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。 2021 年用に更新: この投稿には、Google のホワイトペーパー「パスワード管理のベスト プラクティス」のユーザー向けとシステム設計者向けの両方の最新情報を含む、更新されたベスト プラクティスが含まれています。 アカウント管理、認証、パスワード管理には十分な注意を払う必要があります。多くの場合、アカウント管理は開発者や製品マネージャーにとって最優先事項ではなく、盲点になりがちです。そのため、ユーザーが期待するデータ セキュリティやユーザー エクスペリエンスを提供できていないケースがよくあります。 幸い、Google Cloud には、ユーザー アカウント(ここでは、システムに対して認証を受けるすべてのユーザー、つまりお客様または内部ユーザー)の作成、安全な取り扱い、

    ユーザー アカウント、認証、パスワード管理に関する 13 のベスト プラクティス2021 年版 | Google Cloud 公式ブログ
  • サロゲートキーと複合主キー | DBFlute

    一方で、Webサービス系などで論理設計と物理設計をもう一緒くたにやっていくような場合は、 正規化の論理に目の前にあるサロゲートキーを含めないようにすることが大切で、モデリングはナチュラルキーを基軸に考えていくとよいでしょう。 サロゲートキー (代理キー) サロゲートキー + (複合)ユニーク制約 ナチュラルキーをPKにせず、例えば連番となるようなカラムを用意して、それをPKにします。 これがサロゲートキーと言われるものですが、ナチュラルキーには別途ユニーク制約を付与する というのを忘れてはいけません。 ここでは、ナチュラルキーにユニーク制約を付けずにサロゲートキーだけを導入する方式は、業務的・実装的に意味はないと考え、ここでは取り扱いません。 議論の対象にすらしません。ユニーク制約を付けることで業務的なユニーク性を保ちつつサロゲートキーの恩恵を得ることができ、同時にナチュラルキーを明示する

  • HTTP検索条件、GETにするか?POSTにするか? | フューチャー技術ブログ

    はじめにTIG DXユニット 1真野です。 RESTfullとかRESTishな方針でWebA PIの横断検索を設計する際にチーム内で方針について議論したやり取りの備忘記事です。 注意としてB2C向けなWeb APIを提供するというよりは、主に企業間または企業内部で使われるようなAPIの設計のバイアスがあります。LSUDs(Large Set of Unknown Developers)かSSKDs(Small Set of Known Developers)で言えば、確実にSSKDs脳で記事が書かれています。 REST API広く使われているため日語記事も多数です。実践RESTful HTTP - InfoQ や、0からREST APIについて調べてみた など良さそうな記事が沢山でてくるの読むと良いでしょう。一般的な設計方法はやや古いですがWeb API: The Good Parts

    HTTP検索条件、GETにするか?POSTにするか? | フューチャー技術ブログ
    greenbow
    greenbow 2021/05/19
    個人的にはGETでリクエストボディあり、が意味的にもしっくりくるから好き。でもライブラリが対応してなかったりするので結局POSTに落ち着く。