Oによるコード変更の難易度スコアが大きい

サイトがサイトで商品を販売しているとしましょう。カタログ、プロモーションページ、販売記事ページの3か所に商品を表示したいと考えています。3つの関数を作成し、それぞれでデータベースにリクエストを送信しました。





ビジネス要件の変化の典型的な例-マネージャーが私たちのところにやって来て、次のように述べています。アクティブな製品は同じ3つの場所に表示する必要があり、非アクティブな製品はどこにも表示されません。





これで、アーキテクチャが悪いか良いかを評価できます。商品を受け取るための関数は3つしかなく、正確に3つの関数で、active = trueのチェックを追加する必要があります。コードの変更の複雑さはO(n)であることがわかります。ここで、nは関数の数です。getProductsCatalog、getProductsByAction、getProductsByArticle、getRecommendedProducts、getMostViewedProductsの5つの関数があります-5つの関数を変更する必要がありますが、コードの複雑さはO(n)のみです。





1レベルの抽象化を追加すると、コードに必要な変更の数をO(1)に減らすことができます。





この例では、1レベルの抽象化を導入しましたが、変更を加える必要があるのは1か所のみです。





, , front , . :





- front , O(1). - O(n) - .. , , . - 1 . front , O(1+n) - 1 - , n - . , O(n+m), n - , m - .





O(1+n) O(1) 1 , 2.





:





O(n^2) - . 2 , 1 , , .





O(n) - . .





O(n+m) - , O(n), 1 , 2 n 1 m 2 .





O(1) - , .





O(0) - CMS . .





:





O, .





この記事では、関数の名前は気にしませんでした。P / A / HC / LC関数の命名に関する記事と、Habr参加者からのその記事のフォローアップを読むことをお勧めします。








All Articles