DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
Scala in Model-Driven development for Apparel Cloud Platform
1.
2. Agenda
• Apparel
Cloud
– Cloud
pla.orm
for
apparel
industry
• Scala
– Scala
in
model-‐driven
development
– Scala
in
cloud
pla.orm
architecture
– Scala
features
in
real
system
development
2
3. Vision
for
EverforthPla.orm
Web
• UX,
IA(InformaEon
Architecture)
• Document
DB
Everforth
Framework
Enterprise
Computer
• OOAD,
Data
Science
Modeling,
Business
• FP,
Logic
Modeling,
SOA
• Concurrent,
• OLTP,
OLAP
Parallel,
Distributed
• RDBMS
• Columnar
DB
3
7. Everforth
Scala
Products
• EverforthModeler
– Model
Compiler
for
EverforthFramework
and
Web
UI
Framework
– Based
on
SimpleModeler
• EverforthFramework
– Cloud
Service
Framework
– Derived
from
g3
experience
• Web
UI
framework
– JavaScript
&
Scala
(Server
side)
7
9. Scala
is
not
'beRer
Java'
• Trait
• Case
class
• Monad
• Type
class
• DSL
– embedded
DSL
and
external
DSL
• Actor
(concurrent)
• Future
Monad
(concurrent/parallel)
9
10. OOP
vs.
FP
• Our
approach:
– OOP
is
dominant
paradigm
in
our
development
• Large
scale
sofware
development,
• CollaboraEon
with
business
modeling
in
OOAD
– OOP
over
FP
• Even
though
FP
is
very
comfortable
in
coding
for
model
compiler
and
server
side
frameworks.
– Tree/graph
structure
transformaEon
– Parser
combinator
for
external
DSL
– FP
over
ImperaEve
programming
– Using
FP
in
OO
Paradigm
• OOP
&
FP
(and
syntax
sugers)
strongly
supports
Embedded
DSL
10
11. Trait
• Trait!
Trait!
Trait!
• trait
vs.
abstract
class
– Now,
abstract
class
is
not
used
so
much
to
me.
• Cake
paRern
– (Type-‐safe)
Dependency
InjecEon
11
12. Case
class
• (almost)
algebraic
data
structure
• Nevertheless,
case
class
can
be
used
with
OOP's
polymorphism
(very
very
comfortable)
• Coding
strategy:
case
class
should
be
immutable
object
• Useful
features
with
DSL
– Default
parameter
– copy
constructor
– Implicit
parameter
• PaRern
Matching!
12
13. Try
• Big
enhancement
in
2.10
• Monad!
(i.e.
flatMap
method)
• "Try"
everywhere
(instead
of
Either
or
scalaz.ValidaEon)
• required
feature
in
actor
programming
to
convey
error
state
13
14. Monadic
programming
• Scala
Standard
– Functor
– Monad
• Scalaz
– Monoid
– ApplicaEve
Functor
– Traverse
• Handling
excepEon
state
as
Try
monad
instead
of
throwing
ExcepEon.
• Monadic
programming
features
like
ApplicaEve
Functor,
Traverse
are
very
useful.
14
15. Concurrent/Parallel
• Features
– Actor/Akka
– Scalaz
Promise
– Scala
2.10
Future
and
Promise
– Scala
2.10
Try
– Parallel
CollecEon
• Techniques
– Algebraic
datatype
• case
class
– Persistent
data
structure
• List,
Vector
• Scalaz
Tree
– ConEnuous
passing
style
15
16. Conclusion
• Scala
is
a
suitable
language
for
– Model-‐Driven
development
– Building
cloud
pla.orm
frameworks
16