Найти тему

Android репозитарий шаблоны

Чыганак: Программалаштыру нюанслары

Менә иң еш очрый торган 5 хата (аларның кайберләре рәсми Android документларында):

Репозиторияне ничек дөрес тормышка ашырырга?

Бу шаблонның төп пункты, ләкин күп уйлап табучылар доменның нәрсә икәнен аңламыйлар.

Мартин Фаулердан өземтә китереп, без домен моделе дип әйтә алабыз:

Behaviorз-үзеңне тотышны (функцияләрне) һәм үзлекләрне (мәгълүматны) үз эченә алган домен объект моделе.

Домен модельләре корпоратив бизнес кагыйдәләрен күрсәтәләр. Мондый модельләрнең 3 төре бар:

Гади доменнарда бу модельләр мәгълүмат базасы һәм челтәр (DTO) модельләренә бик охшаш, ләкин аларның берничә аермасы бар:

Домен моделе үрнәге:

-2

DTO мисалы:

-3

Шулай итеп, домен моделе рамкалардан бәйсез, һәм аның структурасы күп бәяләнгән атрибутларны хуплый (логик яктан бәяләнгән) һәм Null Object шаблонын куллана ала, ә DTOлар каркас белән бәйләнгән (Gson, Бүлмә).

Бу аерылу аркасында:

Монда, DTOлар домен модельләренә һәм киресенчә үзгәртелә.

Күпчелек уйлап табучылар бу конверсияне кызыксыз һәм кирәксез процесс дип саныйлар, шуңа күрә алар бөтен код базасын, мәгълүмат чыганакларыннан кулланучы интерфейсына, DTO белән тоташтыруны өстен күрәләр.

Нәтиҗәдә, беренче чыгарылышлар тизрәк. Ләкин домен катламын атлау һәм кулланучы интерфейсын мәгълүмат чыганаклары белән бәйләү, бизнес кагыйдәләрен урнаштыру һәм презентация дәрәҗәсендә очракларны куллану (мәсәлән, Smart UI шаблоны) кайбер хаталарга китерә. Бу хаталарны производствода гына табып була (мәсәлән, арткы буш сызык урынына нуль җибәрә, һәм ул NullPointerException ыргыта).

Конвертерларны тормышка ашыру - күңелсез процесс, ләкин аларның булуы мәгълүмат чыганакларының тәртибе үзгәрүләре аркасында көтелмәгән хәлләр булмавын тәэмин итә. Әгәр дә сезнең конвертерлар ясарга вакытыгыз яки теләгегез булмаса, сез http://modelmapper.org/ кебек рамкаларны куллана аласыз.

Мин казан кодыннан саклану өчен рамкаларны кулланмаска тырышканга, минем һәр конвертер өчен универсаль карточка интерфейсы бар:

интерфейс Mapper <I, O> {

кызыклы карта (кертү: I): О.

}

Шулай ук универсаль ListMappers җыелмасы, моның аркасында сезгә исемлекнең һәр конверсиясен тормышка ашырырга кирәк түгел:

-4

Челтәр һәм мәгълүмат базасы өчен бер үк модель кулланыла дип уйлагыз:

-5

Башта, бу ысул ике төрле модель булдыруга караганда күпкә тизрәк кебек тоелырга мөмкин, ләкин бу ысул билгеле бер куркынычны үз эченә ала:

Шулай итеп, бу алым аерым модельләргә караганда күпкә ярдәм таләп итә.

Әйтик, сез ерак каталогта сакланган продуктлар исемлеген күрсәтергә телисез, һәм һәр продукт өчен классик йөрәк иконасын күрсәтегез, ул җирле теләкләр исемлегендә булса.

Моның өчен сезгә кирәк:

Домен моделе элеккеге кебек күренәчәк, ләкин, продуктның теләкләр исемлегендә булуын күрсәтүче кыр өстәп:

-6

Челтәр моделе бер үк күренәчәк, ләкин мәгълүмат базасы моделе кирәк түгел. Сез продукт идентификациясен җирле теләкләр исемлеге өчен SharedPreferencesда саклый аласыз. Логиканы катлауландырырга һәм мәгълүмат базасы трансфертлары белән эш итәргә кирәкми.

Резервуар шулай булачак:

-7

Кулланылган бәйләнешләрне түбәндәгечә сурәтләргә мөмкин:

-8

Ләкин теләкләр исемлегендә булган продуктларны гына алырга кирәк икән? Бу очракта шундый ук тормышка ашыру булачак:

-9

Шулай ук укыгыз:

Безне телеграммада һәм vk укыгыз

Денис Брэнди: Androidдагы "Реаль" репозитор үрнәге

https://zen.yandex.ru/media/nuancesprog/shablon-repository-v-android-5ecf950119bc9601d9e21115