ホームページ >ウェブフロントエンド >jsチュートリアル >より少ないファイル、より多くの行 vs. より多くのファイル、より少ないコード行
ああ、古典的な開発者の議論: **「より少ない行でより少ないファイル」対「より少ない行でより多くのファイル」。それはピザのトッピングを選ぶようなものです。人それぞれ好みがあり、完全に満足する人はいません。
プル リクエスト (PR) のコードを整理するとき、コードを 1 か所にまとめておくシンプルさを好む人もいますが、コードをより小さく、焦点を絞ったファイルに分割することを好む人もいます。
最終的には、これはあなただけの問題ではなく、将来のあなたとあなたのチームを、後で混乱したコードベースを解くことから救うことです。
実際的なシナリオを詳しく見てみましょう。開発者がダッシュボード ページにウィジェットのリストをレンダリングするという任務を負っていると想像してください。最初の実装は次のとおりです:
// Dashboard.js export default function Dashboard() { const widgets = getWidgets(); // Handles widget deletion const handleDelete = (id) => {}; // Handles widget title update const handleUpdate = (id, newTitle) => {}; return ( <div> <h1>Dashboard</h1> <div className="widget-container"> {widgets.map((widget) => ( <div className="widget"> <h2>{widget.title}</h2> <p>{widget.description}</p> <span onClick={handleDelete}>?️</span> <span onClick={handleUpdate}>✎</span> </div> ))} </div> </div> ); }
レビュー中に、誰かが個々のウィジェットをレンダリングするロジックを独自のコンポーネントに分離することを提案しました。開発者はコードを次のようにリファクタリングします。
// Dashboard.js export default function Dashboard() { const widgets = getWidgets(); // Handles widget deletion const handleDelete = (id) => {}; // Handles widget title update const handleUpdate = (id, newTitle) => {}; return ( <div> <h1>Dashboard</h1> <div className="widget-container"> {widgets.map((widget) => ( <Widget key={widget.id} widget={widget} onDelete={handleDelete} onUpdate={handleUpdate} /> ))} </div> </div> ); } // Widget component for individual widget function Widget({ widget, onDelete, onUpdate }) { return ( <div className="widget"> <h2>{widget.title}</h2> <p>{widget.description}</p> <button onClick={() => onDelete(widget.id)}>?️</button> <button onClick={() => onUpdate(widget.id, "New Title")}>✏️</button> </div> ); } // Can be even further moved to a separate file // Widget.js export default function Widget({ widget, onDelete, onUpdate }) { return ( <div className="widget"> <h2>{widget.title}</h2> <p>{widget.description}</p> <button onClick={() => onDelete(widget.id)}>?️</button> <button onClick={() => onUpdate(widget.id, "New Title")}>✏️</button> </div> ); }
最初の実装は、特に追加ロジック (分析処理など) がウィジェットに密接に結び付けられており、props やコンテキストの切り替えが増加する場合に、よりシンプルで簡単に思えませんでしたか? ?これにより、ダッシュボード コンポーネントはどのアプローチを取るべきかという重要な疑問が生じます。インライン実装を維持するべきでしょうか、リファクタリングされた構造を採用するべきですか、あるいはハイブリッドアプローチを選択するべきでしょうか? ?
このダッシュボードの例では、選択はプロジェクトの規模とコンポーネントの意図された役割によって異なります。これはウィジェットが再利用されない小さな例であるため、単一のファイルが適切に機能します:
// Dashboard.js export default function Dashboard() { const widgets = getWidgets(); // Handles widget deletion const handleDelete = (id) => {}; // Handles widget title update const handleUpdate = (id, newTitle) => {}; return ( <div> <h1>Dashboard</h1> <div className="widget-container"> {widgets.map((widget) => ( <div className="widget"> <h2>{widget.title}</h2> <p>{widget.description}</p> <span onClick={handleDelete}>?️</span> <span onClick={handleUpdate}>✎</span> </div> ))} </div> </div> ); }
大規模なプロジェクトや成長中のプロジェクトの場合、ウィジェットを分離することは柔軟性と保守性の点で有益です
「1 つのファイルにより多くの行を」と「より少ない行でより多くのファイルを」のバランスは、プロジェクトの範囲、チームの規模、成長の軌道によって異なります。決定する際は次の点を考慮してください:
PR レビュー中にコンポーネントを別のファイルに移動するよう誰かが提案した場合は、メリットがこれらの考慮事項と一致しているかどうかを再確認してください。
以上がより少ないファイル、より多くの行 vs. より多くのファイル、より少ないコード行の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。