タグ

あとで読むと設計に関するmasa8aurumのブックマーク (33)

  • 決済ステータス定義の最適解

    ネットスーパーシステムの決済ステータス表現 (状態遷移) は複雑だ。 その理由は要求要件が多いことに起因しているが、多いことが悪いのではなく、それに応えなければシステムとして真の価値を発揮できないからで。逆に問題解決できなければ、著しく利便性を落としてしまうので、必須要件という位置付けにある。 前提文脈を汲み取りづらいモデリングなので、問題解決例を示すのはあまり見かけないが、自分が考えた決済ステータス定義の答えを示す。 この内容は過去にブログや登壇で話した内容の延長でもあるので、過去の内容も参考にすると良いかもしれません。 「E-Groceryにおけるカード決済処理の難しさと設計戦略」 「ネットスーパーの買い物体験を支える工夫と決済機能実現の過程」 前提条件 注文から支払い完了まで時間差がある注文後に注文内容の変更ができる品切れが発生するケースがある販売員が注文内容を変更できる0円での支払

    決済ステータス定義の最適解
    masa8aurum
    masa8aurum 2024/04/11
    “名前付けは微妙なので参考にされないほうが良いと思います” / 泥臭い例
  • 履歴データテーブルとの向き合い方_PHPerKaigi2024

    PHPerKaigi2024 の登壇資料です。 履歴データテーブルとの向き合い方 https://fortee.jp/phperkaigi-2024/proposal/47cf9f17-825a-4021-bf33-86e4a62bc222

    履歴データテーブルとの向き合い方_PHPerKaigi2024
  • ゴメン!オレが悪かった!~技術的負債の懺悔~|あっきー

    ごきげんよう🙋‍♀️ツクリンクでエンジニアリングマネージャーをしているあっきー(@kuronekopunk)です。 この記事はツクリンク プロダクト部 Advent Calendar 2023 4日目の記事です。 前日はSRE泉田さんの「ECS スケジュールされたタスクが起動しなかったことを監視する」でした。 自社サービスのツクリンクは最初は自分がPHPで作っていましたが、エンジニアの参画と合わせて2014年からRuby on Railsにリプレースしています。 リプレースから10年弱経った今、とりあえずで作ったけどサービス成長で運用が辛く負債に感じる部分を紹介していきます。(2021年に書いたRails以降時のnote) メール、通知の設計管理者のアドレスをBCCに入れた0→1のサービス開発当初、「ユーザーさんに送ったメールの内容を知りたい」という動機からユーザーさん宛のメールのBCC

    ゴメン!オレが悪かった!~技術的負債の懺悔~|あっきー
  • 「良いコード/悪いコードで学ぶ設計入門」レビュー(6章のみ)

    「良いコード/悪いコードで学ぶ設計入門」レビュー 「良いコード/悪いコードで学ぶ設計入門」という書籍に色々と気になることが書かれていたので、今更ではありますが、特に気になる6章を中心にレビューしたいと思います。自分は著者を存じ上げませんが、この書籍を執筆中に下読みとして読んだつもりで、気になる点を列挙したいと思います。 なお、書籍のサンプルコードは Java で書かれていましたが、この記事内では Kotlin で書かせていただきます。 著者・関係者の方々の気分を害されたら申し訳ありません。 取り上げる題材の統一感 まず、6章全体で取り上げられている題材(サンプルコード)に統一感がありません。 6章で扱われている題材はざっと分けると次のようになっています。 6.1 魔法発動処理 6.1.2 生命状態判定処理 6.2 魔法種別による分岐処理 6.2.6 面積計算処理 6.2.7 魔法別コスト計

    「良いコード/悪いコードで学ぶ設計入門」レビュー(6章のみ)
  • どうやって技術的負債の雪だるまを生み出し、それを返済してきたか - 5年半越しの設計論

    恥の多い生涯を送って来ました。 システムを開発していると、当に多くの恥が生まれます。たとえば、こんな恥です。 テーブルの名前を付けミスったりは日常茶飯事。私が付けた変な名前が、自社の営業どころか他社のユーザーにまで浸透してたりもする。例えば、唐突に商品マスタに出てくる「グルーピングタグ」というカラムとか。(まじで意味不明) いま商品マスタと呼ばれているマスタの物理名が「kiosk_pricings」とか。日語でおk。kiosk_pricings.grouping_tagってなんだよ。 「pricing」テーブルにはpriceカラムがあるが、全てのレコードで0になっていて、システムでは一切使っていないとか。(そのうち消したい) システムで使われている"正解"はkiosk_pricings.priceでした〜。 親子関係を間違えた事もある。チケットと決済の親子関係を入れ替えたりもした。 ま

    どうやって技術的負債の雪だるまを生み出し、それを返済してきたか - 5年半越しの設計論
  • モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み|ハイクラス転職・求人情報サイト AMBI(アンビ)

    モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み 大規模なソフトウェア開発においてモノリシックかマイクロサービスかというアーキテクチャの議論がありますが、近年は第3の選択肢としてモジュラモノリスが話題になっています。いったんマイクロサービス化に舵を切りながら現在はモジュラモノリスに取り組むアソビューの考え方や進め方について、VPoEの兼平大資(disc99)さんによる寄稿です。 アソビューでは、現在の事業状況にマッチしていることや過去の経緯から、モジュラモノリスを中心としたアーキテクチャを採用しています。 今回は、なぜその選択をし、どのように実現しているかを紹介します。 記事の前半では、アソビューが提供する事業や、アーキテクチャに対する考え方、開発組織の歩みなどを説明します。 中盤以降は、アソビューにおけるモジュラモノリスへの取

    モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • システムモデリング言語SysMLの現状と可能性 ~ツールベンダーの視点から~ | 株式会社豆蔵

    河野 岳史(スパークスシステムズ ジャパン株式会社) はじめに この記事では、最近利用者が増えていると感じているシステムモデリング言語SysMLについて、ツールベンダーという立場・観点で最近の状況をお伝えします。 SysMLとは? SysMLとは、OMG(Object Management Group)によって公開されている、システムをモデリングするための記述言語(Modeling Language)です。 OMGはSysMLだけでなく、ソフトウェアの設計を視覚的に表現することを目的に定義されたUML(Unified Modeling Language)や業務の流れを可視化するBPMN(Business Process Modeling Notation)など、さまざまな記法・記述言語の定義や普及に努める国際的な団体です。SysMLの現在のバージョンは1.5で、次期メジャーバージョンアップ

  • xUnit Test Patternsから学ぶ12個のユニットテストの原則 - Qiita

    エントリは、xUnit Test Patterns: Refactoring Test Codeという書籍の「Chapter5 Principles of Test Automation」の内容をベースに、12個のユニットテスト原則についてまとめていきます。この書籍は、2007年に販売されたものですが、今でも十分役に立つユニットテストに関する原則を伝えています。 ウェブでは、次のURLでも内容を見ることができます。 自動ユニットテストの原則 ここで紹介されるものは、ユニットテストで確認したい quality のリストです。ですので、直接適用する「パターン」ではありません。 「何をやるか」よりも「なぜやるのか」という観点においてまとめられています。 エントリでは、xUnit Test Patterns: Refactoring Test Codeで紹介されている12個の原則をベースに、ほ

    xUnit Test Patternsから学ぶ12個のユニットテストの原則 - Qiita
  • 「DIは必ずしも善ではない」| Dependency injection is not a virtue by DHH

    DHHの Dependency injection is not a virtue(2013) という記事は有名ですが、ちゃんとした日語訳が意外とないようなので、書き出してみて思ったことを要約してみた。[1] Rubyエンジニアの中には、何も考えずに他のモデルのnewを書いてる人の割合が多いという(コードレビュー時のヒアリングによる)体感があり、また8年前の記事なので経験の浅い人は読んだことがない人もいると思う。該当する方は是非読んでほしい。 全部読む時間が無い人は要約へ. 原文と訳文 In languages less open than Ruby, hard-coded class references can make testing tough. If your Java code has Date date = new Date(); buried in its guts,

    「DIは必ずしも善ではない」| Dependency injection is not a virtue by DHH
  • サービス間連携のためのGraphQL APIをClojureで開発している話 - Opt Technologies Magazine

    社内共有のマスタデータ基盤としてのGraphQL APIをプログラミング言語Clojureで開発している事例をご紹介します。 あいさつ 新規API開発の背景 現行システムの問題点: 共有データベース 解決策: データベースをラップするサービス 技術選定の経緯 API方式: GraphQL メイン開発言語: Clojure アプリケーションのアーキテクチャ設計 The Clean Architecture コードの全体像 resolver use case entity boundary 主な要素技術 アプリケーション構成の整理とライフサイクル管理: Duct GraphQL APIサーバ: Lacinia + Pedestal 入力バリデーション: malli DBアクセス: clojure.java.jdbc + Honey SQL テストとカバレッジ計測: clojure.test +

    サービス間連携のためのGraphQL APIをClojureで開発している話 - Opt Technologies Magazine
  • Microservices における認証と認可の設計パターン

    マイクロサービスにおける認証と認可の、一般論としての設計パターンを調べたところ、Web 上の複数の記事で似たようなパターンが登場していた。ここでは、まず認証と認可が実現したい一般的な要件と、そのマイクロサービスでの難しさを整理し、認証と認可に分けて調査したパターンをまとめた。 あくまで “一般論” なので、実際には個々のドメインにあわせてアレンジが必要 往々にしてこの “アレンジ” に価値が宿るものだが、まずはセオリーを知っておきたいというモチベーションで調査した Web 上の記事を読んでまとめただけなので、手を動かしての確認はしておらず、理解が甘い部分はご容赦ください 具体的な通信方式やサービス間通信のセキュリティといった具体論までは踏み込めていない。このへんはサービスメッシュやゼロトラストネットワークといったトピックが登場すると思われる これらは次回以降の Todo としています その

    Microservices における認証と認可の設計パターン
  • 5年間 Laravel を使って辿り着いた,全然頑張らない「なんちゃってクリーンアーキテクチャ」という落としどころ

    この記事は Laravel Advent Calendar 2020 - Qiita 最終日の記事です。 TL;DR DDD や "真の" クリーンアーキテクチャは, Web 業界における大抵の現場ではオーバースペックだし,導入しても全員がついてこれるとは限らない app/UseCases ディレクトリだけ切って,ドメインごとに単一責務なクラスを置くと使いやすいよ ActiveRecord 指向のフレームワークで Repository パターンを無理に導入すると死ぬので, UseCase で Eloquent Model の機能を使うことを恐れるな はじめに Zenn では初投稿です。日Laravel コミュニティではもうお馴染みのようで実はあまり顔を出していない(?) @mpyw と申します。オンラインサロンの火付け役となった Synapse が最初の仕事でしたが,就職後すぐ会社が

    5年間 Laravel を使って辿り着いた,全然頑張らない「なんちゃってクリーンアーキテクチャ」という落としどころ
  • [翻訳] Shopifyにおけるモジュラモノリスへの移行 - Qiita

    こんにちは、べログシステム部長の京和です。 エントリでは Shopify の Engineering Blog から、Kirsten Westeinde による「Deconstructing the Monolith: Designing Software that Maximizes Developer Productivity」を翻訳して掲載します。 べログではユーザーや飲店に価値を届けるスピードを最大化するべく、マイクロサービス化などをはじめとしたこれまでの組織やアーキテクチャを刷新するための取り組みを始めています。しかし、マイクロサービスはアプリケーションアーキテクチャとインフラアーキテクチャが複雑に絡み合ったシステムで技術的難易度が非常に高く、適切に構築できなければ「分散されたモノリス」と呼ばれるアンチパターンに陥ります。1 Shopifyではマイクロサービスではなく、

    [翻訳] Shopifyにおけるモジュラモノリスへの移行 - Qiita
    masa8aurum
    masa8aurum 2020/12/23
    モジュラーモノリス。コードをビジネス分野ごとに分ける→境界をまたいでないか検出する仕組みを作る
  • GraphQLはサーバーサイド実装のベストプラクティスとなるか - Qiita

    この記事は GraphQL Advent Calendar 2020 14 日目の記事です。 前回の記事は @joe-re さんの 「ライブラリの実装からCursor-based paginationにおけるcursorのフォーマットのベストプラクティスを探る」 でした。 前置き GraphQLは2010年代後半に出てきた技術の中でも個人的に特に強力なアプリケーション実装パターンの一つだと思っているのですが、シンプルな実装なのに利用用途が豊富にあることと利用する立場が違うと全く印象を抱く事から全体像を掴みづらく、来持つべきポテンシャルに対してまだ認知が広がっておらず利用されていないように感じます。 今回はサーバーサイドからの視点を中心にGraphQLを構築する要素を分解して解説するのとともに、それを利用した際にWebアプリケーション開発やそれに関わるエンジニアに起きうる変化について書いて

    GraphQLはサーバーサイド実装のベストプラクティスとなるか - Qiita
    masa8aurum
    masa8aurum 2020/12/19
    GraphQL, gRPC, Microservices, Serverless
  • DDDとORMのEntityを混同しないための考え方

    2つの ”Entity” ある種の ORM では RDB のテーブルスキーマモデルとなるクラスのことをEntityと呼んでいます。例えば PHP のDoctrineや TypeScript のTypeORMなどがそうです。 そういった ORM を採用したプロジェクトで DDD に取り組むとき困るのが用語の衝突です。ORM の Entity は RDB のための定義を含むため当然 DDD の Entity とは異なるのですが、なにぶん同じ名前なので混同してしまいがちです。 記事では両者を混同せず扱うための考え方をまとめます。 Entity の定義 まずは定義から確認します。 DDD での定義 エヴァンスの日語訳から引用します。 主として同一性によって定義されるオブジェクトはエンティティと呼ばれる Eric Evans. エリック・エヴァンスのドメイン駆動設計 (Japanese Edi

    DDDとORMのEntityを混同しないための考え方
  • Smart UI パターンが再評価される世界 - id:onk のはてなブログ

    設計ナイト2020 を受けて、今どんなアーキテクチャを選ぶべきかという話をしたくなったのだ。 kichijojipm.connpass.com 設計ナイトで高ぶった結果1時間コースの発表資料が完成したので供養場所を探しています。聞いてくれ!!!— Takafumi ONAKA (@onk) 2020年11月1日 お前誰よ 2000年代前半に SI 2000年代後半にブログ、SNS 2010年代にソーシャルゲーム 2020年代に UGC サービス をやってきた人間。数百万〜数億行のデータ、月間数千万〜数十億 imp 程度を主戦場にしています。 今日の話 DDD と PofEAA から学ぶパターン/アンチパターン Rails によって発見された、密結合で速く走れるソフトウェア 今求められているアーキテクチャ 昂ぶって 15,000 字ぐらい書いてしまった。 DDD と PofEAA から学ぶパ

    Smart UI パターンが再評価される世界 - id:onk のはてなブログ
  • ウェブフロントエンドの設計力を高めるためにアプリケーションの構造を捉えてみる話 - Chatwork Creator's Note

    こんにちはー。 フロントエンド開発部の火村(ひむら/id:eiel)です。前回までは id:cw-himura で記事を書いていましたが、個人アカウントに切り替わりました。 よろしくおねがいします。 以前はサーバーサイド開発部に所属していましたが、2019年6月ぐらいからフロントエンドチームにヘルプとして無期限レンタル移籍中です。 主な担当している業務は「難しいバグ対応」と「これからChatworkのウェブフロントエンドをどうするかを考える」です。 昨日は期待の新人であるレオくんの入社して3ヶ月の熱烈な想いでした。アツいです。 さて、今回のお題は「レガシーフロントエンド脱却への挑戦」と雑に上から投げられたのですが、未来のことを考える作業をしているので書きやすいネタがありません。 あってもオチがつきません。 ということで、設計に役立つかもしれない話をラフに書くことにしました。 アプリケーショ

    ウェブフロントエンドの設計力を高めるためにアプリケーションの構造を捉えてみる話 - Chatwork Creator's Note
  • Clojure で Clean Architecture - Qiita

    Clean Architecture in Clojure is a joy. — Uncle Bob Martin (@unclebobmartin) 2016年6月26日 と言うことで、Clojure で Clean Architecture を意識した簡単な TODO アプリを作成してみたいと思います。 最終的なソースはこちら Clean Architecture とは? 他のアーキテクチャ1と同様、関心事の分離を目的としたアーキテクチャです。クリーンアーキテクチャでよく見かける以下の図は、この関心事の分離を実現するために外側から内側へ依存性のルールを持っていることを表しています。4つの同心円に目が行きがちですが、4つの同心円に特に縛りはなく、必要に応じで増減させて問題ありません。大事な点は、依存性のルールに従い、円の外側にあるフレームワークやDBといった詳細が、円の内側にあるビジネ

    Clojure で Clean Architecture - Qiita
  • チームのWeb API開発を最適化するSchema Driven Developmentの解説&実装例 - Qiita

    チームでのWeb API開発において、進行を妨げる要因は様々な形で噴出します。 「フロントはバックエンドのAPI実装待ちなので動けません...」「ドキュメンテーションのコストが重い...」「ドキュメントと実装が全然違うので参考にならない...」 また、APIスキーマ設定が不十分だと、ビジネスドメインの最低原則やクライアント側のニーズを理解せずに、バックエンド都合のAPIがそのまま実装される危険性もあります。 そうした問題を解決すべくSchema Driven Developmentと呼ばれる開発手法が生まれました。 Schema Driven Developmentとは? Schema Driven Development(以下SDD)とはチームにおけるWeb API開発フローを改善する開発手法の一つです。スキーマ駆動開発やSchema First Developmentとも呼ばれています

    チームのWeb API開発を最適化するSchema Driven Developmentの解説&実装例 - Qiita
  • the_timeless_way_of_building [the libarynth]

    masa8aurum
    masa8aurum 2020/10/04
    『オブジェクト指向のこころ』で紹介されていた本の要約。