169 похожих чатов

Насколько фанатично стоит следовать правилу composition over inheritance? Я чёт

прям начал замечать, что в последнее время стараюсь избегать слова extend

6 ответов

7 просмотров

Для себя считаю данный совет самым лучшим https://stackoverflow.com/a/53354/474290 Есть два типа TypeA и TypeB 1) Если в TypeB требуется предоставить уже готовый интерфейс TypeA или ожидается что TypeB будет использован вместо TypeA - тогда выбираем наследование 2) Если TypeB требуется только часть интерфейса TypeA - выбираем композицию

Если не делать наследования реализации, то потом это очень сильно окупается: код становится расширяемым и подменяемым, реже ломается, стабильнее и понятнее работает. Особенно это заметно, когда требуется поменять поведение внешних зависимостей, так как мы не отвественны за их реализацию и она может в любой момент поменяться. Поэтому если новый класс не относится к семейству, например, им нельзя подменить другие классы по идеологическим причинам, или имеет отличный интерфейс или расширяет реализацию, или дополняет поведение, то тут однозначно композиция. Наследование хорошо применять от абстракции, когда мы реализуем семейство классов. Этим мы говорим, что новый класс относится ко всему семейству абстрактного класса и можем подставлять его вместо всех существующих.

Dilame-Bowzee Автор вопроса
Hey 👋, i'm 𝖙𝖍𝖊𝖐𝖎𝖇𝖆! キバ
Если не делать наследования реализации, то потом э...

Я пишу SDK для HTTP API. Реализую функционал постинга. В частности, можно запостить альбом из фотографий, а можно просто просто фотографию. Для того, что бы осуществить постинг, необходимо сначала аплоаднуть файлы, а потом уже делать запрос на создание поста. Загрузка файла происходит по одному эндпоинту, но с разными параметрами для альбома и для сингл поста. Соответственно, есть сущности Photo и AlbumPhoto. Должны ли они расширять базовый класс, типа UploadablePhoto, либо же они должны принимать его в качестве зависимости?

Dilame Bowzee
Я пишу SDK для HTTP API. Реализую функционал пости...

Тут хорошо подойдет интерфейс Uploadable, который будут реализовывать все сущности. Если сервис Upload будет принимать интерфейс Uploadable, тогда в него можно будет передать любой подобный объект. А Uploadable будет возвращать необходимые метаданные. Все, конечно, зависит от идеологии существующего API, но я бы сделал так

Dilame-Bowzee Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта