Лондон как столица Парижа ([info]zencd) wrote,
@ 2008-07-21 02:24:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Вот посмотрю я на такой код… Ну глупо это. Глупо и расточительно на такие очевидности тратить драгоценные строки кода.

    @XStreamAlias("person")
    public class Person {

      @XStreamAsAtribute
      private Long id;

      @XStreamAsAttribute
      private String name;

      @XStreamAsAttribute
      @XStreamAlias("family")
      private String sername;

      @XStreamImplicit(itemFieldName="e-mail")
      private List emails;

      public Person() {
      }

      public Person(Long id, String name, String sername) {
        this.id = id;
        this.name = name;
        this.sername = sername;
      }

      public List getEmails() {
        return emails;
      }

      public void setEmails(List emails) {
        this.emails = emails;
      }

      public Long getId() {
        return id;
      }

      public void setId(Long id) {
        this.id = id;
      }

      public String getName() {
        return name;
      }

      public void setName(String name) {
        this.name = name;
      }

      public String getSername() {
        return sername;
      }

      public void setSername(String sername) {
        this.sername = sername;
      }
    }


Так не должно быть,
Но снова я взгляд твой ловлю
И понимаю что все это глупо и странно.
Так не должно быть,
Но сердце стучит неустанно.
...


(Post a new comment)


[info]redee
2008-07-21 08:05 am UTC (link)
а что не понравилось? геттеры и сеттеры? и чем так драгоценны строки кода? нужна экономия - прикручивай обфускатор)

(Reply to this)(Thread)


[info]zencd
2008-07-21 11:02 am UTC (link)
да. геттере и сеттеры. они банальны как картошка, а их столько! вообщем степень выразительности такой конструкции очень мала. КПД 15%

обфускатор не пойдёт — ведь именно с точки зрения читабельности такой код плох

(Reply to this)(Parent)(Thread)


[info]redee
2008-07-21 11:15 am UTC (link)
смотря где читать )) если ты пользуешься IDE, то проблем не будет. Если ты в блокнотике, грубо говоря, код правишь, то проблемы будут с большими исходниками всегда)

(Reply to this)(Parent)(Thread)


[info]zencd
2008-07-22 09:10 am UTC (link)
Ну вот когда я читаю книжку, я предпочитаю чтобы лишней воды не было налито. Ну ладно если со смыслом налито: эстетично там или ради достижения каких-то конкретных, осознанных целей. А если на двух страницах изложено то для чего хватит и абзаца — я такое читать не буду, чтобы не «утонуть».

(Reply to this)(Parent)(Thread)


[info]redee
2008-07-22 09:23 am UTC (link)
то есть ты считешь, что геттеры и сеттеры не имеют целей? это же сокрытие реализации. Клиент класса имеет доступ к полям только через них, а не напрямую. Базовые вещи прямо, я не знаю.

(Reply to this)(Parent)(Thread)


[info]zencd
2008-07-22 05:16 pm UTC (link)
Имеют и цели, и смысл. Но то как это используется в C++/C#/Java (C++-подобия) — это ж XIX век! А на дворе уже XXI.

Столько слов, и всё ради того чтобы написать по смыслу это:

property: name
property: sername
property: id
property: emails

Ну прям графоманские записи в дневниках благородных девиц.

А энтропия-то растёт!

Если тебе интересно что я прочу на замену — это properties. Но только которые зашиты в язык, и зашиты элегантно (видел я их в C# — тот же страх и ужос). С возможностью навешивать set/get по мере необходимости. И это (теоретически) возможно даже в узких рамках С++.

(Reply to this)(Parent)


[info]steel_ice
2008-07-22 08:07 am UTC (link)
а завтра возникнет необходимость, что если мы меняем у объекта ID - то надо сделать внутри объекта какие-то действия

и вот не будь тут сеттеров - случится жопа. для начала нам всеравно придется написать сеттер, а потом надо будет обойти весь код, и поменять везде прямое обращение к .id на сеттер.

так что лучше писать их сразу

ну и это спасает от всяческих ошибок в дальнейшем - например в выражении if(obj.getName() = 'Foo') ошибка, что мы забыли поставить еще один значек равно, всплывет на этапе компиляции
а в случае if(obj.name = 'Foo') - только на этапе пересмотра кода или даже отладки.

разделяй и властвуй. так везде. тотже MVC, разделение стилей и hml - это все та же опера - разделение.
так и тут. для чтения используй геттер. для записи - сеттер.

хотя должен согласится, выглядит немного идиотски, когда пример типа такого.

мне вот в object pascal нравится решение - там довольно удобная система property

(Reply to this)(Thread)


[info]zencd
2008-07-22 09:02 am UTC (link)
А я не призываю отказаться от сеттеров/геттеров :-).

Мне больше нравится идея properties с возможностью опционального переопределения set/get.

В C# properties типа есть, используются, но те же чудовищные раздутые сеттеры/геттеры с таким же низким КПД точно так же присутствуют. Или это мне тупой код попадался…

(Reply to this)(Parent)(Thread)


[info]zencd
2008-07-22 09:05 am UTC (link)
/* Мне больше нравится идея properties с возможностью опционального переопределения set/get. */

Конечно, клиентский код остаётся неизменным и в случае добавления set/get.

(Reply to this)(Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…