文字列から番組のシーズンとエピソード番号に本質的に一致するシステムを実装する良い方法を見つけるのに苦労してきました。現在の作業コードはhttps://github.com/huddy/tvfilenameで確認できます
私は現在このライブラリを書き直しており、一致がどのように発生するかを実装するためのより良い方法が必要です。現在、基本的には次のように機能します。
その中にクラス (ハンドラーと呼ばれる) を含むフォルダーがあり、すべてのハンドラーは、match() と呼ばれるメソッドを保証するためのインターフェイスを実装するクラスです。存在する場合、この match メソッドは、(多数ある) そのハンドラ クラスのプロパティに格納されている正規表現を使用して、シーズンとエピソードの照合を試みます。
クラスは、プロパティに格納された配列に各ハンドラーをインスタンス化することにより、これらすべてのハンドラーをロードします。true を返す最初のものは、一致したシーズンとエピソードを含む結果セットで返されます。
私はこの方法があまり好きではありません。それは私にとって一種のハッキーであり、デザインパターンが役立つことを願っています。私の最終的な目標は、ベストプラクティスを使用してこれを行うことであり、どれを使用すべきか疑問に思いましたか?
存在する他の問題は次のとおりです。
複数のハンドラーが文字列に一致する可能性があるため、貪欲なものが最初に一致しないようにする必要があります。正規表現パターンの一部が貪欲でなければならないため、これが解決可能かどうかはわかりませんが、おそらくスコアシステム、何かこれは、一致が正しい可能性の割合を示していますが、実際にこれを実装する方法はわかりません。
これらすべてのハンドラーをインスタンス化することが良い方法であるかどうかはわかりませんが、速度は重要ですが、ベスト プラクティスを使用し、デザイン パターンに固執して、優れた拡張可能で保守可能なコードを作成することが私の究極の優先事項です。ハンドラークラスは、正規表現マッチング以外のことを行う場合があることに注意してください。一般的な単語などを削除して、一致する文字列を準備する場合があります。
どんな助けにも乾杯 ビリー