Le score de difficulté des changements de code avec O est élevé

Disons que le site vend des produits sur le site. Nous souhaitons afficher les produits à 3 endroits: dans le catalogue, sur la page promo et sur la page de l'article de vente. Nous avons écrit 3 fonctions, et dans chacune nous avons fait une requête à la base de données:





Un exemple classique de changements dans les exigences de l'entreprise - un responsable vient à nous et dit: les produits sont maintenant divisés en actifs (avec l'indicateur actif = vrai) et inactifs. Les produits actifs doivent être affichés aux mêmes 3 endroits, inactifs - ne s'affichent nulle part.





Nous pouvons maintenant évaluer si notre architecture est mauvaise ou bonne. Nous n'avons que 3 fonctions pour la réception des marchandises, et dans exactement 3 fonctions, nous devons ajouter un contrôle pour active = true. Il s'avère que la complexité des changements dans notre code est O (n), où n est le nombre de fonctions. Il y aurait 5 fonctions: getProductsCatalog, getProductsByAction, getProductsByArticle, getRecommendedProducts, getMostViewedProducts - il serait nécessaire de faire des changements dans 5 fonctions, mais encore une fois, la complexité du code n'est que de O (n).





Si vous ajoutez 1 niveau d'abstraction, vous pouvez réduire le nombre de changements nécessaires dans le code à O (1)!





Dans cet exemple, nous avons introduit 1 niveau d'abstraction, et maintenant il est nécessaire de faire des changements seulement à 1 endroit.





, , 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, .





Dans cet article, je ne me suis pas préoccupé du nom des fonctions. Je vous conseille de lire l'article sur la dénomination des fonctions P / A / HC / LC et le suivi de cet article du participant Habr.








All Articles