あなたがIDEを助けるなら、あなたのIDEは助けます - 例


私はめったに読まないクリーンなコード アングルについて以前に書きました: .

これは視点の変更です.

Instead of scraping together the easiest to write code possible you think about how much the coding tools (particularly your IDE or typescript transpiler) are going to be able to make use of it.



これがあなたにとって異質に聞こえるなら、私は最近、実際に問題を引き起こす可能性のある、一見無害に見えることを発見しました.
koa ライブラリを使用して routing-controllers サーバーを起動するとします.あなたは controllersmiddlewaresinterceptors を持っています ...

また、2 つのオプションがあります.これらの関数を配列として追加するか、ディレクトリを追加すると、createKoaServer 関数が検索します.

ここで、 errorInterceptor があるとします.

// 'interceptors/error-interceptor/index.js'

export function errorInterceptor() { /* ... */ }


次に、ディレクトリを指定するオプションを使用します.

import * as path from 'path';
import { createKoaServer } from 'routing-controllers';

const app = createKoaServer({
  controllers: [path.join(__dirname, 'controllers/**/index.js')],
  middlewares: [path.join(__dirname, 'middlewares/**/index.js')],
  interceptors: [path.join(__dirname, 'interceptors/**/index.js')]
});

export { app };


いまいましいディレクトリから middlewarescontrollersinterceptors をすべてロードすることで、本当に将来を見据えたのですか?

すべて問題ありませんが、後で他の開発者が問題を追跡するようになります. 🤔.

したがって、彼らは errorInterceptorFind Usages オプションを使用します.

...そして「使用禁止」と書いてあります.次に、IDE を検索し、定義のみを見つけます.

「それじゃあ、どうやら本当にデッドコードだったようですね!では削除しましょう!」

そして、すべての地獄が解き放たれます.

または、削除せずに、1 つのフォルダーに 1 つのファイルが入っているのが面倒で、もったいないと思うので、errorInterceptor -> index.js の名前を変更して、1 つ上のフォルダーに移動して error-interceptor.js に...

これらはすべて問題を引き起こし、interceptors/error-interceptor.js ボタンを押すまでわかりません.

長所と短所



PRO: 新しいミドルウェア/コントローラーの追加やクリーンアップについて考える必要はありません.
短所: IDE は、これらのどれも使用されていないと言います.間違ったフォーマットを使用した場合、Run トランスパイラーは役に立ちません...基本的にすべての自動セーフガードをオフにしました.テストだけがあなたを救うことができます.

個人的には、実行前チェックは非常に便利だと思います.2 つのソリューションがある場合は、それらの数が多い方を好みます.

Runtime is a "weird quantum state" where we do not know what is there until we get there: the more we push into this realm that less our coding tools will help us find the landmines before we step on them.


他のオプションを使用して、アイテムを自分で渡すとどうなるでしょうか?


typescript ファイルはそのままにしておきます.以前のソリューションの「将来性」を維持するために、error-interceptor/index.js フォルダーに新しいファイルを作成しましょう.

// `interceptors/index.js`
import { errorInterceptor } from './errorInterceptor/.';
import { otherInterceptor } from './otherInterceptor/.';

export const interceptors = [errorInterceptor, otherInterceptor, /* ... */];


サーバーを作成するファイルの別の場所:

import { createKoaServer } from 'routing-controllers';
import { interceptors } from './interceptors/.';

const app = createKoaServer({
  interceptors: interceptors,
  // controllers: controllers, 
  // middlewares: middlewares
});

export { app };


👍

長所と短所



長所:
  • interceptorsIDE は、関数
  • の使用法を知るようになります
  • を削除/リファクタリングすると、警告が表示されることがあります
  • typescript/controllers/middlewares を移動すると、injectors を使用してパスを更新できます...

  • 短所:
  • 少し入力する必要があるかもしれません (ただし、あまり多くはありません)

  • ここには明確な勝者がいると思います.

    「しかし、コントローラーが 50 個以上ある場合はどうなるでしょうか?」



    この場合、それらをより小さなフォルダーにグループ化することも必要です.たとえば、次のようにします.

    \controllers
       \user-controllers
          \login
          \logout
          \...
          \index.js
       \product-controllers
          \add
          \remove
          \...
          \index.js
       index.js
    


    このソリューションでは、IDE が読み込まれ、配列にグループ化され、フォルダーからすべてのコントローラーがエクスポートされます.

    // controllers/user-controllers/index.js
    import { login } from './login';]
    // ...
    
    export const userControllers = [login, logout, /* ... */];
    
    // ------
    // /controllers/index.js
    import { userControllers } from './user-controllers';
    import { productControllers } from './product-controllers';
    
    export const controllers = [...userControllers, ...productControllers, /* ... */];
    


    最後に、サーバーを作成する場所はシンプルなままにできますが、非常に長いインポート/エクスポートをきれいで読みやすいファイルにまとめました.

    概要



    選択できるオプションがある場合は、使用しているコーディング ツールでより適切に機能するソリューションを選択する必要があります.彼らに愛情と気遣いを与えれば、彼らはあなたが必要なときにあなたを救ってくれます.

    🙃