powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / MVC-архитектура в Android
16 сообщений из 16, страница 1 из 1
MVC-архитектура в Android
    #38178000
Wild
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Как кто считает, насколько правильным будет, при реализации MVC-архитектуры приложения, маппером получать курсор с данными (скажем из некоего DBAdapter'a) и насквозь отдавать его через контроллер во вью для отображения (скажем через SimpleCursorAdapter)?
Т.е. правильно ли вью завязывать на курсор?
Знакомый советует данные из курсора маппером преобразовывать например в массив, тогда вью станет более универсальным. Но как это скажется на производительности приложения и эффективности расходования памяти?
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178051
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildЗнакомый советует данные из курсора маппером преобразовывать например в массив, тогда вью станет более универсальным
все зависит от того, надо ли тебе подобные усложнения. кроме того, что есть универсальный вью? вьюха это xml файл с гуем - он по определению универсален в силу того, что в андроиде нет байндинга. т.е. один и тот же вью ты можешь заюзать в куче мест и всунуть внутрь других вью. не универсален именно процесс ручного байндинга на данные.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178142
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wild,
Универсализм для ГУИ Вообще - зло и оверхед.
И причем тут MVC. Там другие подходы, неУниверсальные.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178155
Wild
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я наверное не совсем правильно выразился насчет универсальности. Хотелось только лишь, чтобы скажем ListActivity не был завязан на конкретный тип источника данных (например БД) и также не был завязан на имена полей из этого источника.
Можно попробовать некий абстрактный пример:
1. Есть некая вью, для отображения карточки пользователя
на экране это, предположим, три текстовых строковых редактора с заголовками: user name, login, password
в классе определены три соотв. поля. При установке значения в поле - оно отражается на экране (в соотв. текстовом редакторе)
при редактировании значения на экране - значение меняется в соотв. поле
Всё. Вью не завязана на источник данных - это просто интерфейс для отображения и редактирования трех текстовых полей.
Код: java
1.
2.
3.
   myView.userName = "my user name"; 
   или
   userName = myView.userName;



2. Есть вью для отображения списка этих пользователей. Список хранится в некоем источнике данных (сейчас это может быть локальная БД, потом сетевой источник или еще что-то, не суть).
на экране - это просто некий ListView
xml для каждой строки - это отдельных три текстовых поля, выводящих те же значения: userName, login, password
Но, для отображения списка надо будет завести нужный адаптер. Если данные в массиве - адаптер для массива, если данные будут представлены курсором - адаптер для курсора и т.д. Кроме этого, надо будет указать какие имена полей из источника данных каким текстовым полям соответствуют - это уже нарушение слабой связанности, воспетой Фаулером.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178158
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не плодите велосипедов. Программисты из гугла вам все предоставили, самый эффективный способ использовать курсоры, да лень описывать все это руками, но это будет работать быстро. Сама архитектура уже подразумевает четкое разделение: layout-view,cursor adapter/custom adapter-model,activity/fragment (controller/presenter). На сайте разработчиков у гугла очень много полезной информации howto.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178162
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildХотелось только лишь, чтобы скажем ListActivity не был завязан на конкретный тип источника данных
если тебе действительно это нужно, то да - конвертируй данные из источника в Collection<User>

Wild1. Есть некая вью...При установке значения в поле - оно отражается на экране (в соотв. текстовом редакторе)
при редактировании значения на экране - значение меняется в соотв. поле
это как раз тот датабайндинг, которого в гениальном андроиде нет (почти). по факту тебе будет нужно
1) найти все контролы по их id
2) установить их значения в исходные
3) при валидации и/или перед сохранением записать текущие значения обратно в доменный объект


WildКроме этого, надо будет указать какие имена полей из источника данных каким текстовым полям соответствуют - это уже нарушение слабой связанности, воспетой Фаулером.
это придется делать в любом случае. Либо указывая названия полей как строки адаптеру курсора, либо опять же таки указывая поля как строки при конвертации курсора в список бизнес объектов - тут паритет, если в случае курсора использовать константы, а не реально строки.

Но в целом да, оперировать бизнес-объектами удобней, чем курсором.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178417
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpasha Но в целом да, оперировать бизнес-объектами удобней, чем курсором.
не соглашусь с вами. Если посмотреть в сторону ContentPrivider, то возможности, которые предоставляет данная технология,в определенных случаях превосходит объектный подход, а в некоторых единственный (например любое приложение может оперировать контактами из девайса, а возможность получать уведомления об изменении записей в БД это вообще уберфича).
Повторюсь еще раз Андроид-это отличная архитектура, которой просто надо следовать, и тогда вы получите гибкость, производительность, минимальные ресурсы на затраты.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178435
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troglodit,
+1
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178476
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditЕсли посмотреть в сторону ContentPrivider, то возможности, которые предоставляет данная технология,в определенных случаях
contentprovider это средства обмена данными между процессами. любимые инженеры гугл нерусским языком пишут

авторYou don't need to develop your own provider if you don't intend to share your data with other applications....
You also need your own provider if you want to copy and paste complex data or files from your application to other applications


естественно два приложения ничего не знающие друг о друге могут обмениваться только знакомыми обоим объектами. вот только не надо путать необходимость с удобством.


Troglodit превосходит объектный подход, а в некоторых единственный (например любое приложение может оперировать контактами из девайса, а возможность получать уведомления об изменении записей в БД это вообще уберфича).
это совсем другая область применения, кэп

TrogloditПовторюсь еще раз Андроид-это отличная архитектура
не надо лозунгов. архитектура как архитектура, со своими тараканами, коих приличное количество.

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

Код: 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.
// Implements ContentProvider.query()
    public Cursor query(
        Uri uri,
        String[] projection,
        String selection,
        String[] selectionArgs,
        String sortOrder) {
...
        /*
         * Choose the table to query and a sort order based on the code returned for the incoming
         * URI. Here, too, only the statements for table 3 are shown.
         */
        switch (sUriMatcher.match(uri)) {


            // If the incoming URI was for all of table3
            case 1:

                if (TextUtils.isEmpty(sortOrder)) sortOrder = "_ID ASC";
                break;

            // If the incoming URI was for a single row
            case 2:

                /*
                 * Because this URI was for a single row, the _ID value part is
                 * present. Get the last path segment from the URI; this is the _ID value.
                 * Then, append the value to the WHERE clause for the query
                 */
                selection = selection + "_ID = " uri.getLastPathSegment();
                break;

            default:
            ...
                // If the URI is not recognized, you should do some error handling here.
        }



Trogloditминимальные ресурсы на затраты.
это фразу вообще не смог осмыслить
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178610
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaестественно два приложения ничего не знающие друг о друге могут обмениваться только знакомыми обоим объектами. вот только не надо путать необходимость с удобством.

Дело не только в разных приложениях, у вас может быть несколько потоков, фрагментов и пр., не связанных друг с другом, при этом отлично взаимодействующими.
как пример разные аки для facebook,twitter,vk и пр. сваливающие все в одну таблицу сообщения(пример абстрактный), каждый модуль синхронизируется тогда,когда захочет,создание ContentProvider сильно упрощает жизнь.Про поиск по данным ContentPrivider ,наверное, тоже нет смысла упоминать.
приведенный вами ниже код как раз отлично заменяется объектами, гибкость которых зависит от задачи.

Я ни в коем разе не утверждаю, что рекомендации гугл оправдывают себя в огромных проектах, но с другой стороны основная масса написанных приложений-это команда из 2-3 программистов, и для этого все это отлично вписывается.
Здесь же на форуме, если поискать, народ использует ORM фреймворки, удивляюсь как это хибер еще не затащили на Андроид и прочие навороты, а потом удивляются как все тормозит.Видел приложение, в котором текст на кнопках был image, хотя шрифт обычный, при масштабировании -это был полный ужас, про дизайн, цвета -конечно разработчики тоже считали, что рекомендации гугла по дизайну-это чушь слоновья.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178851
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trogloditудивляюсь как это хибер еще не затащили на Андроид
да. Хибер делают на 3-х звенках. А андроид типичная 2-х звенка. Там стек технологий совсем другой.
Как Delphi и Java ))))
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38178965
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditДело не только в разных приложениях, у вас может быть несколько потоков, фрагментов и пр., не связанных друг с другом, при этом отлично взаимодействующими.
внутри одного приложения eсть куча самых разных способов обеспечить взаимодействие без контентпровайдеров. например roboguice events. то что оно там будет на какие-то микросекунды медленней - плевать, зато код в разы лаконичней и проще.

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

Trogloditздесь же на форуме, если поискать, народ использует ORM фреймворки, удивляюсь как это хибер еще не затащили на Андроид и прочие навороты, а потом удивляются как все тормозит
все тормозит, потому что все тормозит, а не только потому что это мы все такие криворукие. создатели андроида очень сильно спешили в свое время, почитай интервью той же Dianne Hackborn. и да, необходимость все делать руками и писать уродливые конкатенированные запросы к sqlite удручает. потому народу хочется байндинга, ioc-ов, и хоть какой-никакой activerecord, уже не говоря про орм.


Troglodit разработчики тоже считали, что рекомендации гугла по дизайну-это чушь слоновья.
рекомендации гугла сам гугл уже неоднократно менял. особенно переход от 2.3 к 3/4 стал особо радикальным. и чем дальше, тем веселее. все больше и больше deprecated то тут, то там. так что создается впечатление, что они сами нихера не определятся, как дальше быть. ты например в курсе, что поведение AsyncTask менялось трижды!!! Сначала они запускались строго последовательно (Thread Pool = 1) , потом (начиная с андроид 1.6) параллельно, затем в Honeycomb снова последовательно.
так что не надо делать ошибку, полагая, что там сидят некие небожители, точно знающие окончательную ИСТИНУ - любое "рекоммендуемое" средство нужно трезво оценить
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38179033
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Trogloditудивляюсь как это хибер еще не затащили на Андроид
да. Хибер делают на 3-х звенках. А андроид типичная 2-х звенка. Там стек технологий совсем другой.
Как Delphi и Java ))))
С трудом представляю себе Android приложение, котороые напрямую стучится в корпоративную БД.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38179076
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv,
просто у тех кто строит N-звеньев - гигантомания)
Ты не ходи в корпоративные.
Ходи в
Eclipse -
Меню Window->Show View->Other->Android->File Explorer. Далее по пути data/data/my.database.work3

т.е. в андроид уже есть БД:
Код: java
1.
public class DbOpenHelper extends SQLiteOpenHelper{
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38181010
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaвсе тормозит, потому что все тормозит, а не только потому что это мы все такие криворукие. создатели андроида очень сильно спешили в свое время, почитай интервью той же Dianne Hackborn. и да, необходимость все делать руками и писать уродливые конкатенированные запросы к sqlite удручает. потому народу хочется байндинга, ioc-ов, и хоть какой-никакой activerecord, уже не говоря про орм.

рекомендации гугла сам гугл уже неоднократно менял. особенно переход от 2.3 к 3/4 стал особо радикальным. и чем дальше, тем веселее. все больше и больше deprecated то тут, то там. так что создается впечатление, что они сами нихера не определятся, как дальше быть. ты например в курсе, что поведение AsyncTask менялось трижды!!! Сначала они запускались строго последовательно (Thread Pool = 1) , потом (начиная с андроид 1.6) параллельно, затем в Honeycomb снова последовательно.
так что не надо делать ошибку, полагая, что там сидят некие небожители, точно знающие окончательную ИСТИНУ - любое "рекоммендуемое" средство нужно трезво оценить

Я и не утверждал, что в гугле только радуга и единороги, не спорю, что в начале все было несколько сложнее , но это и называют детскими болезнями. Я говорил о 4 -й версии, которую имхо можно назвать полноценной, то что было раньше-это как мрачное средневековье, оно было и о нем лучше не вспоминать.
Дело не в том, насколько удобен продукт для программиста, если вы его выбрали, нужно следовать советам разработчиков (даже если они и меняются). И кстати, в конкатенации sql нет ничего адского, иногда это сильно облегчает жизнь, когда sqlite оптимизатор начинает тупить.
Насчет биндингов и прочего, я не знаю уровень ваших задач, но в небольших и средних задачах проще написать велосипед, либо сделать, о ужас, все руками.
...
Рейтинг: 0 / 0
MVC-архитектура в Android
    #38181200
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditЯ говорил о 4 -й версии, которую имхо можно назвать полноценной
она стала более дружелюбной к пользователю. с точки зрения программиста (в целом) только добавилось геморроя

Troglodit, то что было раньше-это как мрачное средневековье, оно было и о нем лучше не вспоминать.
как-то трудно не вспоминать о том, что по состоянию на 4 марта 43% смартфонов имеют версию 2.3 и, что характерно, большинство из них ничего более нового никогда не получат.

TrogloditДело не в том, насколько удобен продукт для программиста
этот вопрос все же имеет академический интерес. Если продукт сделан через жопу, или частично через жопу, следует это признать.

Trogloditнужно следовать советам разработчиков (даже если они и меняются)
если под советами разработчиков подразумевать примерчики из апи, то нет - не стоит следовать им слепо.


Troglodit. И кстати, в конкатенации sql нет ничего адского, иногда это сильно облегчает жизнь, когда sqlite оптимизатор начинает тупить
не ясно, какая связь между конкатенацией sql и тупежом оптимизатора. это совершенно перпендикулярные вещи.

TrogloditНасчет биндингов и прочего, я не знаю уровень ваших задач, но в небольших и средних задачах проще написать велосипед
велосипед редко проще, чем решение "искаропки".

Troglodit, либо сделать, о ужас, все руками.
ну да, терпению и труд все перетрут.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / MVC-архитектура в Android
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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