Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Как насчет такой структуры класса? / 9 сообщений из 9, страница 1 из 1
20.10.2019, 19:30
    #39878902
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
Что думаете? Не противоречит ли это "best practice" и как оно вообще с вашей точки зрения?


Такой вариант приводится в примерах на YouToube
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

import android.widget.Button
import android.widget.TextView


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //объявления переменных
        val btnChangeText = findViewById<Button>(R.id.btnChangeText)
        val lblText = findViewById<TextView>(R.id.lblText)
        ...
        ...

        //обработчики событий
        btnChangeText.setOnClickListener{
            lblText.text = "Hallo"
            //... реальная функция будет, естественно, длиннее чем эта демка
        }
        
        ...
        ...        
    }
}



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

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

import android.widget.Button
import android.widget.TextView

class MainActivity : AppCompatActivity() {

    //объявления переменных (теперь видны для всех функций класса)
    lateinit var btnChangeText: Button
    lateinit var lblText: TextView
    ...
    ...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //инициализация объявленных выше переменных 
        btnChangeText = findViewById<Button>(R.id.btnChangeText)
        lblText = findViewById<TextView>(R.id.lblText)
        ...
        ...

        //компактно определяю обработчики событий
        btnChangeText.setOnClickListener{btnChangeText_OnClick()}
        ...
        ... 
    }

    //функции для обработки событий (теперь именованные)
    fun btnChangeText_OnClick(){
        lblText.text = "Hallo"
        //... реальная функция будет, естественно, длиннее чем эта демка
    }
    ...
    ...
}
...
Рейтинг: 0 / 0
21.10.2019, 12:02
    #39879211
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
Это скорее философский вопрос и по моему зависит от целей и задач.

Если в дальнейшем с объектом планируется работа, то повышать область видимости, а иначе - смысла особо нет. Разве что для красоты, но это уменьшает читабельность локального участка кода.
...
Рейтинг: 0 / 0
21.10.2019, 14:40
    #39879351
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
wadman,

ну может и я тогда так же буду .... надо только выветрить delphi-ское мышление на время.
...
Рейтинг: 0 / 0
21.10.2019, 22:15
    #39879610
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
хоть так, хоть эдак - все это овнокод, который гугл посеял на заре андроида и пожинает до сих пор. все вышеозначенное можно гораздо красивей наваять с помощью DataBinding и/или какого-нибудь framework типа Dagger/AndroidAnnotations - скорее всего для котлин существуют свои аналоги, я не в курсе, но точно должны быть. Вот эта прямолинейная инициализация через findViewById и добавление обработчиков событий врукопашную никуда не годятся.
...
Рейтинг: 0 / 0
21.10.2019, 23:10
    #39879621
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
chpashaВот эта прямолинейная инициализация через findViewById и добавление обработчиков событий врукопашную никуда не годятся.

Это моя самая большая претензия к Android Studio и программированию для Android. Не знаю, может в "Eclipse + ADT plugin" было иначе, но я не смотрел.
...
Рейтинг: 0 / 0
21.10.2019, 23:53
    #39879628
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
Сейчас уже можно делать иначе, главное заглянуть за край тарелки ;-)
...
Рейтинг: 0 / 0
22.10.2019, 00:21
    #39879630
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
chpashaСейчас уже можно делать иначе, главное заглянуть за край тарелки ;-)

вы что имеете ввиду?
...
Рейтинг: 0 / 0
22.10.2019, 00:28
    #39879631
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
Кроик Семёнвы что имеете ввиду?
То, что написал выше - databinding, androidannotations etc
...
Рейтинг: 0 / 0
22.10.2019, 08:46
    #39879654
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как насчет такой структуры класса?
chpashaandroidannotations
Это-то же по сути макросы, которые сокращают написание кода и улучшают читабельность.
Сам код после обработки становится немного (иногда много) мудренее.

Но в целом согласен. Я-бы даже сказал, что это mast have.

Устаревшая, пожалуй, информация, но представление поможет составить https://www.sql.ru/forum/1200790/androidannotations
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Как насчет такой структуры класса? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]