「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 大きな泥の玉: アンチパターンの理解とそれを回避する方法

大きな泥の玉: アンチパターンの理解とそれを回避する方法

2024 年 11 月 8 日に公開
ブラウズ:116

おそらくフロントエンド開発における最も悪名高いアーキテクチャのアンチパターンは、大きな泥の玉です。 「大きな泥の玉」という用語は、認識できる構造やモジュール構成を持たないシステムに適用されます。コードベースは有機的かつ無秩序に成長し、メンテナンスの悪夢となっています。これは、多くの開発者が直面する状況であり、特に期限を守り、大量の機能を開発することに追われている場合に当てはまります。
それが現在の記事の内容です。フロントエンド開発から引用した例を使用した泥の大きなアンチパターン、それが非常に一般的な理由、いつ問題になるか、そしてこの問題にどのように対処するかについて説明します。

Big Ball of Mud: Understanding the Antipattern and How to Avoid It

大きな泥の玉とは何ですか?

Big Ball of Mud は、建築上の境界が明確に定義されていないシステムです。このようなシステム内ではコードが複雑に絡み合い、高度に結合しているため、プロジェクトの維持や拡張が問題になります。時間が経つにつれて、全体的な設計に注意を払わずに機能が追加されるにつれて、コードの操作がますます難しくなります。構造がなければ、システムの一部に変更を加えると他の部分が壊れやすくなり、開発の複雑さの基準をさらに引き上げるバグが不注意に導入されてしまいます。

大きな泥の玉では、次のような特徴がよく見られます:
NOAA は懸念事項を明確に分離します。ビジネス ロジック、UI、データの取得が絡み合っています。 NOAA 疎結合。コンポーネントは相互に絡み合っているため、変更を単独で行うのは困難です。 NOAA のモジュール性。システムのすべての部分は他のすべての部分に依存します。 NOAA グローバル変数または共有状態には予測不可能な副作用があります。

大きな泥の玉は、アーキテクチャに十分な注意を払わずに、早く納品するという高いプレッシャーの結果としてよく起こります。プロジェクトの開始時には、開発者は多くの場合、適切な計画を立てる時間がほとんどなく、できるだけ早く機能を構築することに焦っています。これにより、適合する場所に新しいロジックが挿入され、コードベースがあらゆる方向に成長します。時間が経つにつれて、より多くの機能をリリースすることを優先してリファクタリングが遅れたり無視されたりして、アーキテクチャが劣化します。

このアンチパターンのその他の要因には次のものがあります:

  • 調整の欠如: 開発者同士が調整していません。一貫性のないコーディングと分散した機能が発生します。
  • 確立された標準はありません、開発の指針となるアーキテクチャ原則も定められていません。
  • 技術的負債: すでに乱雑なコードを整理することなく、その上に新機能が追加されます。

平均的なフロントエンド プロジェクトで大きな泥の玉がどのように見えるかを詳しく見てみましょう。

フロントエンドの大きな泥の塊の例

これは、フロントエンド アーキテクチャにおける Big Ball of Mud アンチパターンの抽象的な例です。時間が経つにつれて混乱に成長した小さな React プロジェクトを考えてみましょう。

ファイル構造:

/src
  /components
    /Header.js
    /Footer.js
/Sidebar.js
    /MainContent.js
    /UserProfile.js
  /utils
    /api.js
    /constants.js
  /styles
    /globalStyles.css
  /App.js
  /index.js

このアーキテクチャの問題点:

  • モジュール境界の欠如: ヘッダー、フッター、ユーザープロファイルなどのコンポーネントは、それぞれが果たす役割をまったく考慮せずに、すべて 1 つのフォルダーに存在します。
  • 懸念事項の混在: コンポーネントはデータのフェッチ、つまり API 呼び出しと UI 要素のレンダリングを担当します。したがって、ロジック層とプレゼンテーション層の間の緊密な結合は維持されます。
  • グローバル スタイル: プロジェクトは 1 つのグローバル CSS ファイルに依存します。アプリケーションが成長するにつれて、スタイルの競合が発生する可能性があり、保守がさらに困難になります。 コンポーネントでの API の直接使用: データを取得および更新するメソッドは UserProfile.js などのコンポーネントに直接インポートされるため、データ取得ロジックと UI コードが混合されます。

UserProfile.js のサンプル コード:

import React, { useState, useEffect } from 'react';
import { fetchUserData, updateUserProfile } from './utils/api';
import './styles/globalStyles.css'; 

const UserProfile = () => {
  const [user, setUser] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetchUserData()
    .then((data) => {
        setUser(data);
        setLoading(false);
      })
      .catch((error) => console.error('Error fetching user data:', error));
  }, []);

  const handleUpdate = () => {
    updateUserProfile(user)
      .then(() => alert('Profile updated!'))
      .catch((error) => console.error('Error updating profile:', error));
  };

  if (loading) return 
Loading.
; return (

{user.name}

); }; export default UserProfile;

コードの問題:

  • SoC なし: データの取得、状態管理、UI レンダリングはすべてコンポーネント内の 1 か所で実行されます。
  • 密結合: API とコンポーネントの間に抽象化レイヤーがないため、API を更新すると複数のコンポーネントが強制的に更新されます。
  • ロジック再利用なし: ユーザー データへのアクセスを必要とする別のコンポーネントは、API 呼び出しを再実装するか、自身をこのロジックに緊密に結合します。

この複雑に絡み合った相互依存のコードは、拡張や保守が難しく、まさに大きな泥の塊です。

問題はいつ始まりますか?

このタイプのアーキテクチャを特徴とするプロジェクトには、すぐには明らかな問題の兆候が見られない可能性があります。しかし、プロジェクトが成長するにつれて、問題も重なり合います:

  • 開発の遅れ: 変更が加えられた場所とは関係のないシステムの部分にバグが現れる可能性があるため、変更はより危険になります。
  • 技術的負債の増加: リファクタリングなしで設定された追加機能には、実現がより困難になるアーキテクチャの改善が含まれます。
  • 生産性の低下: 開発者は、このような乱雑なコードをナビゲートして意味のあるものを見つけ出すだけでより多くの時間を費やすようになり、その結果、機能の開発が遅くなります。

結び目が多くなると、ほどくのが難しくなります。もちろん、これは技術的負債の増大と生産性の低下という悪循環にすぎません。

大きな泥の塊を避ける方法

大きな泥の団子を回避するには、開発プロセス中に早期に適切なアーキテクチャ上の習慣を教え込み、厳密に施行する必要があります。いくつかの戦略が続きます。

  1. モジュラー アーキテクチャ: コードを責任境界のある論理モジュールに明確に分割します。たとえば、データの取得、ビジネス ロジック、UI レンダリングによって懸念事項を分離できます。

  2. 抽象化: サービスまたはフックを介して API 呼び出しとデータ管理を抽象化し、これらの懸念事項がコンポーネントから抽象化されるようにします。これにより、コードが分離され、API の変更の処理が容易になります。

  3. モジュール境界: コンポーネント間には明確に定義された境界が必要です。すべてのコンポーネントを 1 つのフォルダーに配置するのではなく、機能またはドメインごとに別のフォルダーを作成します。

  4. グローバル状態管理: コンポーネント間の共有状態管理には、Redux、MobX、または React の Context API などのライブラリを使用します。これにより、コンポーネントが状態自体を管理する必要性が大幅に軽減されます。

  5. リファクタリング: 定期的にリファクタリングします。プロジェクトがもう完全に処理不可能になる段階に達しないようにしてください。コードベースをクリーンに保ちながら、これらの懸念に対処します。

すでに大きな泥の塊にはまってしまった場合の対処法

あなたのプロジェクトがすでに大きな泥団子に発展している場合でも、希望はあります。解決策は、コードベースを少しずつリファクタリングし、可能な場合はアーキテクチャの原則を焼き込むことです。開始方法:

  • 問題点の特定: コードの中で作業や拡張が最も困難な部分に焦点を当てます。
  • コンポーネントのモジュール化: コンポーネントを段階的にリファクタリングして、懸念事項を分離し、依存関係を制限します。 次に、テストを導入します。単体テストと統合テストを追加して、リファクタリングによって既存の機能が損なわれないことを確認します。

要約すると、Big Ball of Mud は、フロントエンド プロジェクトで多くの問題を引き起こす非常に一般的なアンチパターンです。モジュラー アーキテクチャの導入、懸念事項の分離、定期的なリファクタリングは、このパターンによってもたらされる混乱をコードベースから遠ざけ、コードベースをよりクリーンで管理しやすくするためのステップであることは間違いありません。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/m_midas/big-ball-of-mud- Understanding-the-antipattern-and-how-to-avoid-it-2i?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3