Closed9

良いコードを書きたい

shwldshwld

Reactのカスタムフックであるコンポーネントのpropsを生成するみたいなのたまに見る。
あれをやるときにはコンポーネントと命名に関連を持たせることと、近くに置いておくとわかりやすい。

- Dialog
  - Dialog.tsx
  - hooks.tsx
function useDialog()
function Dialog(): JSX.Element

Reactで凝集度を高める際に、同一ファイル、ファイル名、ディレクトリによって近くに配置することによっても凝集度を高められる。
GraphQLでよく言われるコロケーションもこの観点だと思う。

shwldshwld

ファイル内の変数、メソッドを数えて、ディレクトリをクラスみたいに考えるとLCOMで計算できる的な発想

shwldshwld

なので、技術駆動パッケージングといわれるものによって凝集度が下がることの説明もこれでできないかな。
フレームワークが技術要素ごとに分けてしまっているからそれに習って分けている人が多いやつ。

とはいえRailsであればMVCの3レイヤーは技術駆動でわけるべき(パッケージにするとしたら一緒にしないだろ感)
なので、Railsでこれをやるならmodels内で更に階層をわけるとかが良いと思う。
concernsはモデルと遠くなるので、ログ出力や、フォーマット変換などの本当に共通のメカニズムや、DSLを置く場所としたい

shwldshwld

また、応用としてディレクトリを分けない場合でも、命名によって凝集度を高めることもできそう。
Reactなら、

[ドメイン][コンテキスト]コンポーネント名[Type].tsx

みたいにすることで、良い感じでファイルがまとまって並ぶので意識すると良い。

例えば ACommunityAddToShortListButton なら

ACommunityAddToShortListButton.tsx
ACommunityEditToShortListButton.tsx
ChatConversation.tsx
ChatConversationName.tsx
Sidebar.tsx
...

みたいな感じ。うーん、命名規則はいいけど、ちょっと観点違う気がするw

REF: https://medium.com/@wittydeveloper/react-components-naming-convention-️-b50303551505

shwldshwld

Angular styleのcommitメッセージを取り入れてみる。
何回か取り入れようかと思ったけど結局定着しなかった。再度やってみる。

目的:

  • commit粒度と単位を改善する
  • OSSプロジェクトなどでなんとなくイケてる感を醸し出す

https://github.com/negokaz/git-fancy-message-prefix これを入れたので絵文字によって視認性とテンション上がって今度は定着しそう

よかったら周りにも布教していこっと

https://zenn.dev/szn/articles/angularjs-commit-messeage-convention-jp

feat: 新機能
fix: バグの修正
docs: ドキュメントのみの変更
style: コードの動作に影響しない、見た目だけの変更(スペース、フォーマット、欠落の修正、セミコロンなど)
refactor: バグの修正や機能の追加ではないコードの変更
perf: パフォーマンスを向上させるコードの変更
test: 不足しているテストの追加や既存のテストの修正
chore: ビルドプロセスやドキュメント生成などの補助ツールやライブラリの変更
shwldshwld

DDDの仕様パターンはとても読みやすいと思う

class AlcoholPurchaseController < ApplicationController
  def create
    なにかしらのエラーを返す処理 unless AlcoholPurchaseSpecification.can_purchase?(current_user)
    購入処理
  end
end
shwldshwld

なんかいいコードになりそうなフレーズ (出典: ミノ駆動本)

  • 現実の営みにはないメソッドを追加しないこと
  • 同じようなロジック、似ているロジックであっても、概念が違えばDRYにすべきではない
  • 疎結合高凝集をめざせ
  • 設計にbestはない!betterを目指せ
shwldshwld

YAGNIについて

検討まではやっておいてあえて作らないみたいなことが必要そうなケースが多そうなんですよね。
検討コストはかかってしまう。そこで損失回避性によってもったいなくなる(作らないけど)
実際みなさんどうしているんですかね。

エレベータピッチとかをよく自分の中に落とし込んで、先に使う必要性が出てくるかを予見できるようになるという高レベルな解決策もありそう

shwldshwld

例外

例外をキャッチすることで分岐をさせるな。例外という言葉通りの使い方をしなさいね。
予見できることは例外ではない。

ただし、繰り返し処理内などでは有用かもしれない。

このスクラップは2022/10/21にクローズされました