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

Начал читать Элегантные объекты Егора Бугаенко и Object Thinking Дэвида

Уэста. Кто знаком с книгами, насколько эти подходы актуальны в рамках андроида и можно ли вообще ориентироваться на мысли этих авторов? Некоторые моменты кажутся мне нерациональными или это я их не так понял:

В ООП все операции надо делать через класс и избегать статические методы. Например, для сложения двух чисел или нахождения синуса надо писать классы.
Но такой подход с созданием объекта на каждый плюс занимает лишнюю память, и статический метод из Math работает быстрее.

Не использовать Dto классы, потому что они нарушают инкапсуляцию. А ключевая идея ООП заключается в сокрытии данных за объектами. Объекты должны иметь доступ только к тем данным, которые они инкапсулируют, и никогда к данным, инкапсулированным другими объектами.
Это правильно про инкапсуляцию, но в Clean Architecture Dto везде используются (модели Data, Domain, Presentation слоёв, если я правильно понял). А клин вроде как стандарт.

Не должно быть публичных переменных. Как тогда получить какой-нибудь ид или использовать мапперы, если класс сам будет маппером, то это нарушение SRP.

Dao противоречит ООП, так как вместо того, чтобы инкапсулировать взаимодействие с базой данных внутри объекта, Dao извлекает его, а это превращает объекты в процедурные контейнеры данных.
Не могу понять, что тут не так, да и в Room Dao используется. И даже аннотация есть. На мой взгляд, это удобно. Если работать с базой в самом объекте, то получается, ее надо тащить во все слои, и смысл в слоях пропадает?

Не должно быть приватных методов, любой дублирующийся код надо выносить в классы.
А если код дублируется только в одном классе, то что плохого в приватном методе?

Полный отказ от использования null.
Но если где-то важен перформанс, то null ведь лучше, чем класс обозначающий отсутствие данных, многие функции SDK могут вернуть null. И почему проверка на null плохо, а проверка является ли объект инстансом класса пустых данных хорошо?

3 ответов

39 просмотров

очень интересный вопрос, тоже увлекся этим недавно

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

Элегантные объекты вообще не применимы в Android

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно 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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта