Существуют ли в opensource-проекты с хорошей архитектурой?

Хочу зарыться в какой-нибудь крупный opensource-проект с более-менее качественной архитектурой, чтобы увидеть, как на деле реализуются принципы SOLID, DRY, KISS, YAGNI и прочие. Особенно интересует сфера мобильной и десктопной разработки.

Начал с TelegramAndroid, т. к. сам пользуюсь им и было интересно, как реализованы те или иные фичи. Когда увидел ChatActivity.java на 30 тысяч строк кода, стало понятно, что это не то.

Как искать проекты с хорошей архитектурой? Как понять, что в том или ином проекте архитектурные решения хорошие?

Или может быть знаете конкретные проекты (на C#, Java) приложений и веб-сервисов, код и архитектуру которых можно считать более-менее качественными?
  • Вопрос задан
  • 402 просмотра
Решения вопроса 1
DollyPapper
@DollyPapper
Надо исходить из изначального посыла - что такое хорошая архитектура и надо различать понятия дизайн и архитектура. Архитектура это высокоуровневая концепция. Это вопрос какую БД выбрать, какой прокси сервер, определение нагрузки на приложение. Так же архитектура это то сколько и какие слои в вашем приложении будут. А вот SOLID это как раз про дизайн отдельных модулей и классов. Итак. Какие изначальные постулаты "хорошего дизайна"?
  1. Понятность/читаемость кода
  2. Слабая связанность и сильная связность (зацепление) отдельных модулей
  3. Разделение компонентов по ответственностям
  4. Возможность повторного использования компонентов
  5. Надежность (вопрос устойчивости и корректности ПО)


Исходя из этих критериев и нужно рассматривать архитектуру приложения. Но вот так просто "с улицы" зайти в проект и понять хорошая там архитектура или плохая ИМХО нельзя. Если пресловутые принципы SOLID нарушаются в приложении, то может так и задумано? Мартин вот категорично говорит, что нельзя зависеть от конкретных реализаций. Если у вас в зависимостях есть конкретный класс, а не интерфейс, то это якобы плохой дизайн, вы нарушаете принцип SOLID. Так ли это важно и нужно? Да не особо. Если нет смысла зависеть от интерфейса, то не надо пихать его. В этом и заключается чуйка архитектора. Если он считает, что реализация меняться не будет, то не нужно усложнять код. Если он считает, что требования будут меняться и следственно реализация, то вероятно стоит защитить конкретный компонент и выделить интерфейс. Если класс на 30к строк это не значит, что там плохая архитектура. Кто-то скажет, что это вполне себе Domain Model паттерн, вместо Anemic Model и это хороший дизайн, кто-то скажет что нарушается SRP. Нет четких правил, тут именно что нужно понимать предметную область с которой работаешь и вырабатывать чуйку.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
mayton2019
@mayton2019
Bigdata Engineer
SOLID может на каком-то этапе противоречить например KISS. Например вы, как старший разработчик можете видеть "вперед" и прогнозировать потребность бизнеса в расширении какого-то функционала. И будете закладывать Open/Closed и прочие философии. А разработчик уровня Junior который неделю назад пришел на проект - этого не знает и будет писать "как чукча". Тоесть буквально то что надо сделать - тои напишет. И между вами может возникнуть спор как раз на тему SOLID против KISS. Но вы можете ошибаться в своём прогнозе потребности бизнеса. Или бизнес может передумать. В этом случае правда оказалась на стороне святой простоты (Santa simplicitas).

Как вы понимаете такие антагонизмы не могут быть удовлетворены аж никогда. Поэтому вы никогда не найдете проекты которые удовлетворяют ВСЕМ философиям которые перечислены в списке одновременно.
Ответ написан
Комментировать
@AlexSku
не буду отвечать из-за модератора
Книга Александра Гранина "Функциональная архитектура"
Ответ написан
GavriKos
@GavriKos
Когда увидел ChatActivity.java на 30 тысяч строк кода, стало понятно, что это не то.


Ни в одной парадигме не написано, что нельзя делать класс на 30 тысяч строк. Если по парадигме ему надо быть таким - значит он будет таким, и все.

Мой посыл в том, что парадигмы там могут быть, и это нормально, и критерий 30к строк никак с ними не связан
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы