|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
Всем привет! Как кто считает, насколько правильным будет, при реализации MVC-архитектуры приложения, маппером получать курсор с данными (скажем из некоего DBAdapter'a) и насквозь отдавать его через контроллер во вью для отображения (скажем через SimpleCursorAdapter)? Т.е. правильно ли вью завязывать на курсор? Знакомый советует данные из курсора маппером преобразовывать например в массив, тогда вью станет более универсальным. Но как это скажется на производительности приложения и эффективности расходования памяти? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2013, 10:38 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
WildЗнакомый советует данные из курсора маппером преобразовывать например в массив, тогда вью станет более универсальным все зависит от того, надо ли тебе подобные усложнения. кроме того, что есть универсальный вью? вьюха это xml файл с гуем - он по определению универсален в силу того, что в андроиде нет байндинга. т.е. один и тот же вью ты можешь заюзать в куче мест и всунуть внутрь других вью. не универсален именно процесс ручного байндинга на данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2013, 13:03 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
Wild, Универсализм для ГУИ Вообще - зло и оверхед. И причем тут MVC. Там другие подходы, неУниверсальные. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2013, 17:06 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
я наверное не совсем правильно выразился насчет универсальности. Хотелось только лишь, чтобы скажем ListActivity не был завязан на конкретный тип источника данных (например БД) и также не был завязан на имена полей из этого источника. Можно попробовать некий абстрактный пример: 1. Есть некая вью, для отображения карточки пользователя на экране это, предположим, три текстовых строковых редактора с заголовками: user name, login, password в классе определены три соотв. поля. При установке значения в поле - оно отражается на экране (в соотв. текстовом редакторе) при редактировании значения на экране - значение меняется в соотв. поле Всё. Вью не завязана на источник данных - это просто интерфейс для отображения и редактирования трех текстовых полей. Код: java 1. 2. 3.
2. Есть вью для отображения списка этих пользователей. Список хранится в некоем источнике данных (сейчас это может быть локальная БД, потом сетевой источник или еще что-то, не суть). на экране - это просто некий ListView xml для каждой строки - это отдельных три текстовых поля, выводящих те же значения: userName, login, password Но, для отображения списка надо будет завести нужный адаптер. Если данные в массиве - адаптер для массива, если данные будут представлены курсором - адаптер для курсора и т.д. Кроме этого, надо будет указать какие имена полей из источника данных каким текстовым полям соответствуют - это уже нарушение слабой связанности, воспетой Фаулером. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2013, 17:23 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
Не плодите велосипедов. Программисты из гугла вам все предоставили, самый эффективный способ использовать курсоры, да лень описывать все это руками, но это будет работать быстро. Сама архитектура уже подразумевает четкое разделение: layout-view,cursor adapter/custom adapter-model,activity/fragment (controller/presenter). На сайте разработчиков у гугла очень много полезной информации howto. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2013, 17:24 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
WildХотелось только лишь, чтобы скажем ListActivity не был завязан на конкретный тип источника данных если тебе действительно это нужно, то да - конвертируй данные из источника в Collection<User> Wild1. Есть некая вью...При установке значения в поле - оно отражается на экране (в соотв. текстовом редакторе) при редактировании значения на экране - значение меняется в соотв. поле это как раз тот датабайндинг, которого в гениальном андроиде нет (почти). по факту тебе будет нужно 1) найти все контролы по их id 2) установить их значения в исходные 3) при валидации и/или перед сохранением записать текущие значения обратно в доменный объект WildКроме этого, надо будет указать какие имена полей из источника данных каким текстовым полям соответствуют - это уже нарушение слабой связанности, воспетой Фаулером. это придется делать в любом случае. Либо указывая названия полей как строки адаптеру курсора, либо опять же таки указывая поля как строки при конвертации курсора в список бизнес объектов - тут паритет, если в случае курсора использовать константы, а не реально строки. Но в целом да, оперировать бизнес-объектами удобней, чем курсором. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2013, 17:48 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
chpasha Но в целом да, оперировать бизнес-объектами удобней, чем курсором. не соглашусь с вами. Если посмотреть в сторону ContentPrivider, то возможности, которые предоставляет данная технология,в определенных случаях превосходит объектный подход, а в некоторых единственный (например любое приложение может оперировать контактами из девайса, а возможность получать уведомления об изменении записей в БД это вообще уберфича). Повторюсь еще раз Андроид-это отличная архитектура, которой просто надо следовать, и тогда вы получите гибкость, производительность, минимальные ресурсы на затраты. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2013, 13:01 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
Troglodit, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2013, 14:10 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
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.
Trogloditминимальные ресурсы на затраты. это фразу вообще не смог осмыслить ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2013, 15:56 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
chpashaестественно два приложения ничего не знающие друг о друге могут обмениваться только знакомыми обоим объектами. вот только не надо путать необходимость с удобством. Дело не только в разных приложениях, у вас может быть несколько потоков, фрагментов и пр., не связанных друг с другом, при этом отлично взаимодействующими. как пример разные аки для facebook,twitter,vk и пр. сваливающие все в одну таблицу сообщения(пример абстрактный), каждый модуль синхронизируется тогда,когда захочет,создание ContentProvider сильно упрощает жизнь.Про поиск по данным ContentPrivider ,наверное, тоже нет смысла упоминать. приведенный вами ниже код как раз отлично заменяется объектами, гибкость которых зависит от задачи. Я ни в коем разе не утверждаю, что рекомендации гугл оправдывают себя в огромных проектах, но с другой стороны основная масса написанных приложений-это команда из 2-3 программистов, и для этого все это отлично вписывается. Здесь же на форуме, если поискать, народ использует ORM фреймворки, удивляюсь как это хибер еще не затащили на Андроид и прочие навороты, а потом удивляются как все тормозит.Видел приложение, в котором текст на кнопках был image, хотя шрифт обычный, при масштабировании -это был полный ужас, про дизайн, цвета -конечно разработчики тоже считали, что рекомендации гугла по дизайну-это чушь слоновья. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2013, 22:04 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
Trogloditудивляюсь как это хибер еще не затащили на Андроид да. Хибер делают на 3-х звенках. А андроид типичная 2-х звенка. Там стек технологий совсем другой. Как Delphi и Java )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2013, 14:05 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
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 снова последовательно. так что не надо делать ошибку, полагая, что там сидят некие небожители, точно знающие окончательную ИСТИНУ - любое "рекоммендуемое" средство нужно трезво оценить ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2013, 16:33 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
Petro123Trogloditудивляюсь как это хибер еще не затащили на Андроид да. Хибер делают на 3-х звенках. А андроид типичная 2-х звенка. Там стек технологий совсем другой. Как Delphi и Java )))) С трудом представляю себе Android приложение, котороые напрямую стучится в корпоративную БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2013, 18:33 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
Leonidv, просто у тех кто строит N-звеньев - гигантомания) Ты не ходи в корпоративные. Ходи в Eclipse - Меню Window->Show View->Other->Android->File Explorer. Далее по пути data/data/my.database.work3 т.е. в андроид уже есть БД: Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2013, 19:23 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
chpashaвсе тормозит, потому что все тормозит, а не только потому что это мы все такие криворукие. создатели андроида очень сильно спешили в свое время, почитай интервью той же Dianne Hackborn. и да, необходимость все делать руками и писать уродливые конкатенированные запросы к sqlite удручает. потому народу хочется байндинга, ioc-ов, и хоть какой-никакой activerecord, уже не говоря про орм. рекомендации гугла сам гугл уже неоднократно менял. особенно переход от 2.3 к 3/4 стал особо радикальным. и чем дальше, тем веселее. все больше и больше deprecated то тут, то там. так что создается впечатление, что они сами нихера не определятся, как дальше быть. ты например в курсе, что поведение AsyncTask менялось трижды!!! Сначала они запускались строго последовательно (Thread Pool = 1) , потом (начиная с андроид 1.6) параллельно, затем в Honeycomb снова последовательно. так что не надо делать ошибку, полагая, что там сидят некие небожители, точно знающие окончательную ИСТИНУ - любое "рекоммендуемое" средство нужно трезво оценить Я и не утверждал, что в гугле только радуга и единороги, не спорю, что в начале все было несколько сложнее , но это и называют детскими болезнями. Я говорил о 4 -й версии, которую имхо можно назвать полноценной, то что было раньше-это как мрачное средневековье, оно было и о нем лучше не вспоминать. Дело не в том, насколько удобен продукт для программиста, если вы его выбрали, нужно следовать советам разработчиков (даже если они и меняются). И кстати, в конкатенации sql нет ничего адского, иногда это сильно облегчает жизнь, когда sqlite оптимизатор начинает тупить. Насчет биндингов и прочего, я не знаю уровень ваших задач, но в небольших и средних задачах проще написать велосипед, либо сделать, о ужас, все руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2013, 12:00 |
|
MVC-архитектура в Android
|
|||
---|---|---|---|
#18+
TrogloditЯ говорил о 4 -й версии, которую имхо можно назвать полноценной она стала более дружелюбной к пользователю. с точки зрения программиста (в целом) только добавилось геморроя Troglodit, то что было раньше-это как мрачное средневековье, оно было и о нем лучше не вспоминать. как-то трудно не вспоминать о том, что по состоянию на 4 марта 43% смартфонов имеют версию 2.3 и, что характерно, большинство из них ничего более нового никогда не получат. TrogloditДело не в том, насколько удобен продукт для программиста этот вопрос все же имеет академический интерес. Если продукт сделан через жопу, или частично через жопу, следует это признать. Trogloditнужно следовать советам разработчиков (даже если они и меняются) если под советами разработчиков подразумевать примерчики из апи, то нет - не стоит следовать им слепо. Troglodit. И кстати, в конкатенации sql нет ничего адского, иногда это сильно облегчает жизнь, когда sqlite оптимизатор начинает тупить не ясно, какая связь между конкатенацией sql и тупежом оптимизатора. это совершенно перпендикулярные вещи. TrogloditНасчет биндингов и прочего, я не знаю уровень ваших задач, но в небольших и средних задачах проще написать велосипед велосипед редко проще, чем решение "искаропки". Troglodit, либо сделать, о ужас, все руками. ну да, терпению и труд все перетрут. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2013, 13:31 |
|
|
start [/forum/topic.php?fid=13&fpage=29&tid=1331799]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
others: | 251ms |
total: | 410ms |
0 / 0 |