実用主義プログラマー-2022.03.26


DAY 9(p.207-266電子書籍ベース)

第五章。曲がり、折れ、Bend、or Break


📚 今日のTIL 3行の要約
  • グローバルデータを回避
  • 相続税を払わないでください.
  • 適応性と柔軟性を放棄する絶滅的なコード
  • は記述しないでください.

    覚えたい内容


    連結の削減


  • 少ない接続コードは変更しやすい

  • 列車事故
    メソッドとプロパティ

  • 聞かないで、言ってください.Don't Ask.TDA

  • Demeterの法則Law of DemeterLoD
    ▲一つのポイントになると変わる
  • // 좋지 않다
    amount = customer.orders.last().totals().amount;
  • グローバル・データの回避
    コードの結合度が向上し、コードを削除する際にも問題が発生します.
    -ワントンもグローバルデータ
    -外部リソースもグローバルデータ
  • リアルワールドの切り替え


    ≪イベント|Events|ldap≫


  • 有限状態機Finite State Machine.FSM

  • モニタモードObserver Pattern
    イベント発生の監視オブジェクトとイベントに興味のあるクライアント監視者
    監視者が監視時に登録する必要がある欠陥.
    監視対象が直接コールバックするため、同期特性上、監視対象は待ち続ける必要がある
    この問題はパブリッシュによるサブスクリプションの解決

  • サブスクリプションpubsubのパブリッシュ
    標準化された監視モード+より高い結合度により、パフォーマンスの問題を解決
  • パブリッシャーパブリッシャパブリッシャおよびサブスクライバサブスクリプションは、チャンネル
  • に接続されている.
  • チャネルは独立したコード(ライブラリ、プロセス、分散インフラストラクチャなど)を採用
  • パブリッシャーとサブスクライバ間の通信は、非同期でコード外で行われます.
  • 多くのクラウドサービスはpubsubサービス
  • を提供している.
  • は、追加の結合を必要とせずに非同期イベントを処理する良い技術である
  • である.
  • は、既存のコードを変更することなく、イベント処理コード
  • を追加、置換することができる.
  • <欠点>このシステムが現在何が起こっているのか理解しにくい

  • リアクションプログラミング、ストリーム、イベント

  • はんのうプログラミング
    値が変更されると、別の参照値に応答します.
    ex) React, Vue

  • ストリーミングメディア
    活動を一般的な資料構造のように扱うことができる.
    処理、組合せ、選別活動などの仕事は、資料構造などの方法を採用することができる.
    非同期実行可能
    イベント発生時にイベントフローが生成されます
    イベントフローは汎用APIを使用して同期と非同期処理を統合する
  • へんかんプログラミング


    Q . フォルダ内で最も長い5行のファイルを検索するプログラムを作成してください.$ find . -type f | xargs wc -l | sort -n | tail -6 | head -5ディレクトリ名
    -ファイル名リストの検索
    -行数とファイル名のリストwc
    -ソートリストsort
    -最長5行と合計行数tail
    -最大5個のヘッド

  • プログラミングはコードについてですが、プログラムはデータについてです.

  • フォーマットコピーの検索
    トップダウンアクセス:入力を出力に変更
    ex)Elm,F#,Swift|>,Closer->および->,Rは%>%
  • Q . 3、4文字の単語リストをいくつかのアルファベットで作成
    word
    |> all_subsets_longer_than_three_characters()
    |> as_unique_signatures()
    |> find_in_dictionary()
    |> group_by_length()
    要求を満たすために、前の変換で入力を受信し、処理後の結果を次の変換に渡す.しかし、オブジェクト向けのプログラミング経験がたくさんあると、データを隠してオブジェクトにカプセル化しているような気がします.これらのオブジェクトは互いに状態を変化させるため,結合度が高くなり,変化しにくい要因となる.しかし、転換の中で、このような思考を覆すことができます.
  • の状態を積み上げないで、伝えてください
    -データを巨大な流れと見なす.データは機能に等しい
    -任意の関数のパラメータが他の関数の出力結果と一致する場合、
  • を任意の場所で繰り返し使用することができる.

    エラー処理


    フォーマット・レプリカ間で値を渡すのではなく、データ構造やエンベロープとして機能するタイプで値を安く渡す
    -決定表現
    -変換ごとにエラーを処理
    -パイプライン内のエラーの処理
  • 変換プログラム
    コードが明確になり、関数が短くなり、設計が簡単になったので、試してみてください.
  • 相続税


  • 継承
    1.シミュレーション:組合せタイプのメソッドex)C++,Java
    2.ミニインタビュー:各種動作を組織する方法ex)Ruby,JS

  • なぜオブジェクト開発者向けに継承を使用するのですか?
    1.タイプが気に入らないため=入力した文字数を減らすために親-子クラスに渡す
    2.タイプが良い=継承でクラス間の関係を表す
    ===どちらにも問題がある
    =>>1は結合度の問題,2は多中心の問題である.

  • 相続税を払わないで!
  • <継承が不要な理由>
    1.インタフェースとプロトコル:継承しなくても多形性をもたらす
    2.委任:
    3.混入、流量、種別、プロトコル拡張等
  • ジャングル全体を引き付けるように気をつけてください
  • 外部設定

  • は、アプリケーションがソースコード以外の外部設定で
  • を調整できるように変更する.
  • アプリケーションを実行する場合、設定情報はアプリケーションの動作を制御する必要があります.
  • <設定データに入る>

  • DBまたは外部API等の外部サービスの認証情報
  • ログレベルおよびログ格納場所
  • アプリケーションで使用するポート番号、IPアドレス、マシンまたはクラスタ名
  • 特定運転環境の検証パラメータ
  • 外部指定パラメータ、例えば運賃
  • 領域詳細フォーマット
  • ライセンス鍵
  • 静的設定


    YAML, JSON
  • 設定情報は、より薄いAPIの後ろに隠される.これにより、コード
  • を詳細から削除できます.

    サービス設定


    私たちはサービスAPIの後で管理するのが好きです.
  • の利点
    -複数のアプリケーションが設定情報を共有できるようにします.認証とアクセス制御を追加することで、アプリケーションごとに異なる情報を表示できます.
    -複数のインスタンスで設定全体を同時に変更できます.
    -設定データを専用UIとして管理可能
    -動的変更可能設定データ
  • 感想


    有限状態機械p.218の部分はよく理解できないので、後でもう一度読みます.変換された部分についても明確な理解はありません.もう一度読んで資料を探します.また,結合を継承したり下げたりしない方法を再認識し,外部設定の必要性も感じた.適用の必要性は理論的には分かっているが、実際にはどう適用すればいいのか全く分からない.これも今後の課題です.まず本の中で必要な準備物を一つずつまとめたTILですが、これから私のTILを読むときは、キーワードを中心に、一つ一つ実戦に直接応用していくことが大きな基礎になると思います.正直、今までどうしたらいいか分からなかった.解題が分からないようだ.でもこれからはゆっくりしか来られない...がんばってください.

    気になる内容がよくわからない内容は?

  • 単頓p.217
  • FSM有限状態機p.218~
  • ストリーム関連使用例
  • ライン
  • 変換プログラミング
  • 今日読んだ他の人のTIL

  • RoxyのTIL