Я бачу деякі серйозні проблеми з цим питанням. Давайте розпочнемо.
Як перестати витрачати час на проектування архітектури
Це питання досить завантажене. Крім того, ви не проектуєте архітектуру. Ви архітектор . Архітектура та дизайн є взаємодоповнюючими та спорідненими видами діяльності, але вони не однакові, навіть якщо вони можуть перетинатися.
Аналогічно, так само, як можна витрачати час на архітектуру (за рахунок надмірного архітектури), ви також можете витрачати час на надмірну розробку та перекодування (кодуючи речі набагато складнішими, ніж це потрібно, або не виконавши код необхідних речей.)
Власна архітектура має на меті запобігти відходженню в кодуванні. Це робиться шляхом обмеження, звуження та документування можливих шляхів створення складної системи: 1) спроектовано, 2) кодує та випробує її, 3) доставить, 4) підтримує, 5) відновить після відмови та 6) врешті-решт виведене з експлуатації.
Мій досвід полягає в тому, що люди, які просто люблять кодування, вони просто кодують, не замислюючись про те, як система працює і підтримується в довгостроковій перспективі, переходячи до наступної гарячої картоплі, залишаючи деяку бідну душу, щоб підтримувати потворного голема.
Але я відволікаюсь ...
У цьому справа: для систем досить простої архітектури є само собою зрозумілими і випливають із здорових практик проектування та впровадження.
Лише для великих систем, в яких задіяна досить велика кількість людей або програмне забезпечення на системному рівні, дуже складні речі, які потребують явної архітектури.
Нещодавно я закінчив університет і почав працювати програмістом. Мені не важко вирішувати "технічні" проблеми або робити налагодження, а речі, які я б сказав, мають 1 рішення.
Це мінімум, необхідний для цієї професії, і я радий, що у вас немає проблем їх виконувати (я б хвилювався, якщо ви це зробили.)
Але, здається, існує клас проблем, який не має одного рішення
Це хліб і масло нашої професії, тип проблем, за які роботодавці готові платити наші (як правило) набагато вище середньої зарплати.
Власне кажучи, проблеми, які варто вирішити, - це ті, які можуть мати більше одного рішення. Проблеми з реальним світом, вони такі. І світ вимагає від нашого досвіду, як розробників програмного забезпечення, придумати прийнятні компроміси.
- такі речі, як архітектура програмного забезпечення.
Архітектура речей - неминуча характеристика складної системи, будь то віртуальна / програмна чи в конкретному світі. Кожна система, яка працює, яка приймає вклад і виробляє вихід, вона буде складною і матиме архітектуру.
Коли ми розробляємо програмне забезпечення для таких систем (банківська система, система моніторингу електроенергії, система продажу квитків тощо), ми прагнемо створити частину програмного забезпечення, що імітує функції та вимоги такої системи.
Ми просто не можемо просто крилати його і кодувати його стиль ковбоя. Нам потрібна якась архітектура. Особливо це стосується, якщо для проекту потрібні десятки інженерів, якщо не більше.
Ці речі мене бентежать і завдають мені великого лиха.
Що це нормально. Вивчити чи викладати це непростий предмет, не без багато практики.
Я витрачаю години і години, намагаючись вирішити, як "архітектувати" свої програми та системи. Наприклад, чи я поділяю цю логіку на 1 або 2 класи, як я називаю класи, чи повинен я зробити це приватним чи загальнодоступним і т. Д. Такі питання займають стільки мого часу, і це сильно мене засмучує. Я просто хочу створити програму, архітектура буде проклята.
На жаль, це не архітектура програмного забезпечення.
Це навіть не дизайн, а просто кодування. Я дам кілька пропозицій внизу цієї публікації.
Як я можу швидше пройти фазу архітектури та перейти до фази кодування та налагодження, що мені подобається ?
Мені важко знайти спосіб відповісти на це, бо це досить емоційно.
Ми намагаємося влаштуватися на роботу чи намагаємось просто насолоджуватися практикою? Чудово, коли обидва є одними і тими ж, але в реальному житті багато разів це не так.
Чудово робити речі, які нам подобаються, але в такій складній такій професії, як наша, орієнтуватися лише на те, що нам подобається, це не веде до плідної кар’єри.
Ви не будете прогресувати, не дозрівати чи здобувати нові знання.
У армії є така приказка: «обійми смоктання».
Інші фрази мають подібні поради. "Якщо вона не смокче, не варто", і моя улюблена, "Якщо вона смокче (і це важливо), робіть це, поки вона не перестане смоктати".
Мої рекомендації:
Мені здається, ви все ще намагаєтесь зрозуміти відмінності між
кодування (як кодувати свої класи, модулі чи що ні, називати конвенції, видимість доступу, область застосування тощо),
дизайн (скільки рівнів, передній / задній / кінцевий / дб, як кожен спілкується, що йде куди) та неявні архітектурні рішення, що випливають із проектування простих систем,
архітектура (як це зустрічається у складних системах, що вимагають тисяч, якщо не сотень тисяч людино-годин.)
Тому я б запропонував вам глибоко заглибитися в перший предмет (кодування), щоб перейти на наступний рівень.
Чистий код
"Чистий код" Роберта "Дядько Боб" - це гарне місце для початку.
Згуртованість програмного забезпечення
Додатково я пропоную ознайомитись із конкретною метрикою програмно-орієнтованого програмного забезпечення під назвою LCOM, а точніше LCOM4.
Це може бути досить математичним, і це не захищено від кулі, але ваша мета повинна бути емпірично зрозуміти та виявити (або куля, якщо ви хочете), якщо клас є згуртованим або якщо йому не вистачає згуртованості.
http://www.aivosto.com/project/help/pm-oo-cousion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
Принципи програмного забезпечення
Це тісно пов'язане з "Принципом єдиної відповідальності" або СРЮ, з яким ми всі повинні бути знайомі. SRY - один із 5 "твердих", з якими ми всі повинні бути знайомі, якщо ми хочемо стати досвідченими в кодуванні.
Коли ми рухаємося через принципи SOLID, нам також потрібно ознайомитись з принципами "GRASP" , які керуються, а точніше - керувати тим, як ми кодуємо класи.
Додаткові книги
Нарешті, я також пропоную наступне:
"Рефакторинг" Мартіна Фаулера та Кена Бека був би наступною книгою, яку я прочитав у цьому списку.
"Дизайн за контрактом, за прикладом" Річарда Мітчелла, Джима Маккіма та Бертран Мейєра (пізніше про славу Ейфеля.) Ця книга вийшла з друку, але ви можете знайти дешеві, використані примірники в Амазонії.
З цим ви повинні добре зрозуміти, як почати кодування та дизайн, а також на практиці перемістити та опанувати (або принаймні зрозуміти) архітектуру програмного забезпечення.
Я впевнений, що будуть інші професіонали, які додаватимуть, віднімати чи заперечувати проти цих пропозицій. Вони запропонують інші пропозиції, ймовірно підтверджені власним досвідом.
Все, що я можу сказати, це - ярликів немає.
Все найкраще.