Misalkan situs tersebut menjual produk di situs tersebut. Kami ingin menampilkan produk di 3 tempat: di katalog, di halaman promo dan di halaman artikel penjualan. Kami menulis 3 fungsi, dan di masing-masing kami membuat permintaan ke database:
Contoh klasik dari perubahan dalam persyaratan bisnis - seorang manajer mendatangi kami dan berkata: produk sekarang dibagi menjadi aktif (dengan tanda aktif = benar) dan tidak aktif. Produk aktif harus ditampilkan di 3 tempat yang sama, tidak aktif - tidak ditampilkan di mana pun.
Sekarang kita bisa menilai apakah arsitektur kita buruk atau bagus. Kami hanya memiliki 3 fungsi untuk menerima barang, dan tepat 3 fungsi, kami perlu menambahkan tanda centang untuk active = true. Ternyata kompleksitas perubahan pada kode kita adalah O (n), dimana n adalah banyaknya fungsi. Akan ada 5 fungsi: getProductsCatalog, getProductsByAction, getProductsByArticle, getRecommendedProducts, getMostViewedProducts - perlu membuat perubahan dalam 5 fungsi, tetapi sekali lagi kompleksitas kodenya hanya O (n).
Jika Anda menambahkan 1 level abstraksi, maka Anda dapat mengurangi jumlah perubahan yang diperlukan dalam kode menjadi O (1)!
Dalam contoh ini, kami telah memperkenalkan 1 level abstraksi, dan sekarang perlu membuat perubahan hanya di 1 tempat.
, , 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, .
Pada artikel ini, saya tidak peduli dengan nama fungsinya. Saya menyarankan Anda untuk membaca artikel tentang penamaan fungsi P / A / HC / LC dan tindak lanjut artikel tersebut dari peserta Habr.