Re[18]: [C#] горшочек, не вари
От: karbofos42 Россия  
Дата: 11.11.24 16:53
Оценка: +1
Здравствуйте, ·, Вы писали:

·>Отдельный set-get не настолько плох. Обычно такие простые тривиальные свойства составляют небольшую долю от объёма кода и лежат в отдельных model-классах в которые редко заглядываешь. Т.е. немного упрощают и так простую проблему. Ценность невелика. Зато лишняя когнитивная нагрузка.


На работу с данными отдельные методы плохо ложатся.
Имею ввиду всякие DTO для сериализации json, или маппинга строк БД.
Со свойствами в C# пишешь:
[JsonProperty("is_enabled")]
public boolean IsEnabled { get; set; }

и понимаешь, что значение свойства будет в json писаться/читаться в/из is_enabled. Всё в одном месте, коротко, понятно и удобно.
В Java без свойств это будет:
@JsonProperty("is_enabled")
boolean enabled;

public boolean isEnabled() {
  return this.enabled;
}

public void setEnabled(boolean value) {
  this.enabled = value;
}

В процессе коммитов от разных людей, разрешения конфликтов и т.п. это всё добро может разлететься в разные концы файла.
Сериализатору же либо придётся по соглашению именования методов ориентироваться и понимать, что при чтении из json поля is_enabled нужно вызвать метод setEnabled, т.к. вероятно он меняет нужное поле enabled.
Либо заставлять разработчика все методы помечать атрибутами и ещё больше писанины разводить и потом не забыть всё везде поправить при переименовании поля в json.
Либо напрямую некрасиво в приватные поля писать, что может привести к неприятным багам, если в set-методе всё же будет какая-то логика.
У меня вот как-то всех этих DTO/POCO/POJO достаточно ощутимая доля образуется и со свойствами в C# приятнее это всё писать, чем в Java с отдельными методами.
record'ы ещё завезли, но там свои нюансы хотя бы в плане поддержки разными библиотеками.

·>Вот эта неявная генерация — и есть магия. Если надо генерировать — так генерируй код явно.


Языки высокого уровня в принципе существуют из-за неявной генерации.
Вопрос в адекватности этой генерации и не слишком ли с ней легко выстрелить себе в ногу.
Те же автосвойства — это просто, понятно, никаких проблем с ними не вижу.
В секции set есть понятное по смыслу ключевое слово value, так же интуитивно туда ложится и field.

·>Они коллапсятся. IDE неплохо умеет упрощать чтение простыней, притом неважно, поле это или просто однострочный метод. Всё выглядит одинаково.


Мне такие IDE не попадались.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.