Page 9 - 4252
P. 9

Нестійкість, крихкість (fragile) - система ламається в непередбачених мі-
            сцях, хоча зміни, були проведені до цього, зламані компоненти явно не зачіпа-
            ли.
                   Нерухомість або монолітність (not reusable) - система побудована таким
            чином і характер залежностей такий, що використовувати будь-які компоненти
            окремо від інших не представляється можливим.
                   В'язкість (high viscosity) - код проекту такий, що зробити що-небудь не-
            правильно набагато простіше, ніж зробити щось правильно.
                   Невиправдані повторення (high code duplication)  - розмір проекту наба-
            гато більший, ніж він міг би бути, якби абстракції застосовувалися частіше.
                   Надмірна складність (overcomplicated  design)  -  проект  містить  рішення,
            користь від яких неочевидна, вони приховують реальну суть системи, усклад-
            нюючи її розуміння і розвиток.
                   Майже  будь-який  більш-менш  досвідчений  розробник  може  пригадати
            приклад коду, який відповідав хоча б одному за цією ознакою.

                  Як зробити кращу архітектуру
                   За  довгі  роки  розумні  люди  виробили  деякі  основоположні  принципи
            ООП, дотримання яких дозволяє створювати кращу архітектуру:
                   Висока зчепленість коду (High  Cohesion)  -  код,  відповідальний  за  яку-
            небудь одну функціональність, повинен бути зосереджений в одному місці.
                   Низька зв'язаність коду (Low Coupling) - класи повинні мати мінімальну
            залежність від інших класів.
                   Вказуй, а не питай (Tell, Don't Ask) - класи містять дані і методи для опе-
            рування цими даними. Класи не повинні цікавитися даними з інших класів.
                   Не  розмовляй  з  незнайомцями (Don't  talk  to  strangers)  -  класи  повинні
            знати тільки про своїх безпосередніх сусідів. Чим менше знає клас про існуван-
            ня інших класів або інтерфейсів - тим більш стійкий код.
                   Всі ці рекомендації спрямовані на те, щоб постаратися розвести класи по
            сторонах, зосередити сильні взаємозв'язки в одному місці і провести чіткі роз-
            межувальні лінії в коді.
                   Але ці принципи надто розпливчасті, тому з'явився якийсь набір більш чі-
            тких правил, якими слід керуватися при формуванні архітектури.
                   Принцип персональної відповідальності (Single Responsibility Principle)
            - клас володіє тільки 1 відповідальністю, тому існує тільки 1 причина, що при-
            водить до його зміни.
                   Принцип відкриття-закриття (Open-Closed Principle) - класи повинні бу-
            ти відкриті для розширень, але закриті для модифікацій. Здається, що це немо-
            жливо,  однак  варто  згадати  шаблон  проектування  Strategy  і  стає  більш-менш
            зрозуміло.
                   Принцип підстановки Ліскоу (Liskov Substitution Principle) - дочірні кла-
            си можна використовувати через інтерфейси базових класів без знання про те,
            що це саме дочірній клас. Інакше - дочірній клас не повинен заперечувати по-
            ведінку батьківського класу і повинна бути можливість використовувати дочір-
            ній клас скрізь, де використовувався батьківський клас.

                                                            8
   4   5   6   7   8   9   10   11   12   13   14