Kotlin for Android Developers


 Shaping the domain layer



Download 1,04 Mb.
Pdf ko'rish
bet51/125
Sana11.08.2021
Hajmi1,04 Mb.
#144654
1   ...   47   48   49   50   51   52   53   54   ...   125
Bog'liq
Kotlin for Android Developers Learn Kotlin the Easy Way While Developing an Android App ( PDFDrive )

10.2 Shaping the domain layer
Now we’ll create a new package representing the
domain
layer. It will contain some
Command
s in
charge of performing the use cases of the app.
First, a definition of a
Command
is required:


10 Parsing data
35
1
public interface Command {
2
fun execute(): T
3
}
These commands will execute an operation and return an object of the class specified in its generic
type. It’s interesting to know that every function in Kotlin returns a value. By default, if nothing
is specified, it will return an object of the
Unit
class. So if we want our
Command
to return nothing,
we can specify
Unit
as its type.
Interfaces in Kotlin are more powerful than Java (prior to Java 8), because they can contain code.
But for now, we don’t need more than what we could do in a Java interface. Future chapters will
elaborate this topic further.
The first command needs to request the forecast to the API and convert it to domain classes. This is
the definition of the domain classes:
1
data class ForecastList(val city: String, val country: String,
2
val dailyForecast:List)
3
4
data class Forecast(val date: String, val description: String, val high: Int,
5
val low: Int)
These classes will probably need to be reviewed in the future, when more features are added. But
the data they keep is enough for now.
Classes must be mapped from the data to the domain model, so the next task will be to create a
DataMapper
:
1
public class ForecastDataMapper {
2
3
fun convertFromDataModel(forecast: ForecastResult): ForecastList {
4
return ForecastList(forecast.city.name, forecast.city.country,
5
convertForecastListToDomain(forecast.list))
6
}
7
8
private fun convertForecastListToDomain(list: List):
9
List {
10
return list.map { convertForecastItemToDomain(it) }
11
}
12
13
private fun convertForecastItemToDomain(forecast: Forecast): ModelForecast {
14
return ModelForecast(convertDate(forecast.dt),
15
forecast.weather[0].description, forecast.temp.max.toInt(),


10 Parsing data
36
16
forecast.temp.min.toInt())
17
}
18
19
private fun convertDate(date: Long): String {
20
val df = DateFormat.getDateInstance(DateFormat.MEDIUM,
21
Locale.getDefault())
22
return df.format(date * 1000)
23
}
24
}
As we are using two classes with the same name, we can give a specific name to one of them so that
we don’t need to write the complete package:
1
import com.antonioleiva.weatherapp.domain.model.Forecast as ModelForecast
Another interesting thing about this code is the way to convert the forecast list from the data to the
domain model:
1
return list.map { convertForecastItemToDomain(it) }
In a single line, we can loop over the collection and return a new list with the converted items.
Kotlin provides a good set of functional operations over lists, which apply an operation for all the
items in a list and transform them in any way. This is one of the most powerful features in Kotlin
for developers used to Java 7. We’ll take a look at all the different transformations very soon. It’s
important to know they exist, because it will be much easier to find places where these functions
can save a lot of time and boilerplate.
And now, everything is ready to write the command:
1
class RequestForecastCommand(val zipCode: String) :
2
Command {
3
override fun execute(): ForecastList {
4
val forecastRequest = ForecastRequest(zipCode)
5
return ForecastDataMapper().convertFromDataModel(
6
forecastRequest.execute())
7
}
8
}

Download 1,04 Mb.

Do'stlaringiz bilan baham:
1   ...   47   48   49   50   51   52   53   54   ...   125




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish