Ответ
SOLID, DRY, KISS, YAGNI.
SOLID:
- Single Responsibility - компонент делает одну вещь.
- Open/Closed - открыт для расширения, закрыт для изменений.
- Liskov Substitution - наследники не ломают поведение родителя.
- Interface Segregation - узкие интерфейсы лучше одного "жирного".
- Dependency Inversion - зависимости на абстракциях, не на реализациях.
DRY (Don't Repeat Yourself):
// Плохо: дублирование
const ButtonA = () => <button className="primary">Click</button>;
const ButtonB = () => <button className="primary">Submit</button>;
// Хорошо: переиспользуемый компонент
const Button = ({ text }) => <button className="primary">{text}</button>;
KISS (Keep It Simple, Stupid): избегаю избыточной сложности там, где можно решить проще.
YAGNI (You Aren't Gonna Need It): не добавляю функциональность "на будущее".
Ответ 18+ 🔞
Да блядь, ну вот, опять эти ваши буквы, как в детском саду, только для взрослых дядек, которые код пишут. Слушай сюда, разжую, как есть.
SOLID, говоришь? Ну ладно, поехали.
- Single Responsibility — это как в армии, блядь: один солдат — одна задача. Не должен твой компонент и кнопку рисовать, и на сервер данные слать, и чай тебе заваривать. Одна хуйня — одна ответственность. Иначе он превращается в этого мутанта, который всё умеет, но нихуя нормально не делает.
- Open/Closed — штука хитрая. Твой модуль должен быть как банковское хранилище: чтобы его расширить (новую дверь приделать) — пожалуйста. А чтобы его переделать (стену ломать) — нихуя, забудь. Закрыт для изменений, блядь. Подходи с умом.
- Liskov Substitution — а это про наследственность, епта. Если у тебя есть функция, которая работает с
Птицей, то ты должен суметь подсунуть ейВоробья,Страусаили даже этого ёбанногоПингвина, и ничего не должно разъебаться. Если послеПингвинавсё летит к чертям — ты мудак и неправильно наследовался. - Interface Segregation — не делай интерфейс-монстра, который знает всё на свете. Лучше двадцать маленьких и точных, чем один жирный, от которого всем тошно. Это как нарезка в магазине: ты же не покупаешь полтуши, если тебе нужен только хуй с горы — стейк, понимаешь?
- Dependency Inversion — высший пилотаж, блядь. Твои высокоуровневые модули не должны ползать на коленях перед низкоуровневыми. Пусть оба смотрят в небо, на какую-то абстракцию, на интерфейс. Класс
Поварне должен зависеть от конкретнойСковородкиТефаль, он должен зависеть от интерфейсаСковорода. А там уж хоть тефаль, хоть чугунок бабушкин — похуй.
DRY (Don't Repeat Yourself) — это вообще святое, ёпта. Не повторяйся, а то будешь как этот Герасим, который только "Муму" мычит.
// Плохо: два однохуйственных куска
const ButtonA = () => <button className="primary">Click</button>;
const ButtonB = () => <button className="primary">Submit</button>;
// Хорошо: один компонент, а текст передаёшь, куда хочешь
const Button = ({ text }) => <button className="primary">{text}</button>;
Видишь разницу? В первом случае — пиздец и дублирование. Во втором — красота, один раз написал и юзай, куда влезет.
KISS (Keep It Simple, Stupid) — а это, сука, главный принцип. Не умничай. Не городи восьмиэтажную хуйню с чертежами, если задачу можно решить парой строк. Самый сложный код — это простой код. А самый пиздецовый код — это "гениальный" код, в котором через полгода ни ты, ни кто другой нихуя не понимает.
YAGNI (You Aren't Gonna Need It) — вот это, блядь, бич всех архитекторов-потеряшек. "А вот на будущее сделаем возможность отправлять уведомления голубиной почтой!" Не-а. Не понадобится. Сделаешь — и эта неиспользуемая хуйня будет висеть мёртвым грузом, путаться под ногами и отнимать время на поддержку. Делай только то, что нужно сейчас. Будущее, оно, блядь, ещё не наступило, а вот говнокод — уже здесь.
Вот и все принципы, ебать мои старые костыли. Кажется, что заумно, а на деле — просто правила, чтобы не выстрелить себе в ногу, а потом охуевать от боли.