Clean Architecture |
, Clean Architecture . , , , . , . Clean Architecture .
, . . , . , , .
2011 Robert C. Martin, Uncle Bob, Screaming Architecture, , , , . , Uncle Bob . 2012 The Clean Architecture, .
.
, , Clean Architecture:
Android- Clean Architecting Android...The clean way?, Fernando Cejas. Clean Architecture . . Fernando :
, , domain - Interactors Boundaries, . . . ( - ). , - , - , ,
!
Clean Architecture , , :
Dependency Rule ( ).
Dependency Rule , . - , UI, .. , .
: (, , , ), , .
, , .
Uncle Bob 4 :
, , . .
Boundaries, : . (Input/OutputPort). , ( Dependency Rule), .
( ).
, Controller InputPort, UseCase, UseCase OutputPort, Presenter. , UseCase.
, ( D SOLID). , UseCase Presentera ( Dependency Rule), , Presenter .
, , UseCase Gateway/Repository. , UseCases.
, , . DTO HashMap, . ( ).
, Clean Architecture . , - , (, , , ). overengineering.
Controllers. - frontenda, Ruby On Rails. Controller, , Presenter, View.
, android- Controllers .
Uncle Bob , 4. , Dependency Rule .
Fernando Cejas, , . . , Domain Layer Interactors ( UseCase), Entities.
Fernando , Clean Android-, .
Uncle Boba c Fernando Cejasa . , . , . - , , Controller, . , !
.
, . Gateways Repositories, .. .
.
: , - .
, . Dependency Rule.
UI . , :
, Fernando Cejas. . . , .
, , Fernando.
c . , , , Fernando 4 . . Domain UseCases Entities.
. UI backend . :
.
Presenter, Use Case. Use Case Repository. Repository -, Entity, UseCase. Use Case Entity. , , , Presenter. , , UI.
( , , ) Boundaries, .
, , , .
, - , ( UseCases Entities). .
, . (Boundaries), DTO, (Interactors UseCases, ).
, , Uncle Boba. :
? . Entities UseCases , , ( ) .
C Boundaries , Gateway . Request/ResponseModel DTO . , .
Controller , . Presenter.
ViewModel ViewModel MVVM ViewModel Architecture Components. DTO View, View . .
UseCases Interactor, Boundaries , , DTO . , .
Entities .
, ( ) , , DTO.
, , Entity , JSON data-, DTO , Interactor
, .
Entities?
POJO-, Interactor. . .
Uncle Bob , Entities , , , .
- , Entities - , .
, : Entities , . , Interactor Entity Gateway. , POJO .
, Entity .
, , .
Uncle Bob, :
Uncle Bob , Entities -, . . Entities , , -, .
- , Gateways Entities , :
Gteway , , , Entities, Gateway .
class MyEntity { private MyDataStructure data;}
class MyEntity extends MyDataStructure {...}
, :
And remember, we are all pirates by nature; and the rules I'm talking about here are really more like guidelines
( : , , , , )
, , . - , .
, Entities :
, , Entities UseCases, .
UseCase Interactor. : Interactor . : Interactore UseCase?.
Interactora , . :
...interactor object that implements the use case by invoking business objects.
:
Interactor , use case ( ), - (Entities).
Use Case ?
Uncle Bob Object-Oriented Software Engineering: A Use Case Driven Approach, Ivar Jacobson 1992 , , Use Case.
Use case , , .
, :
Use Case , .
, , . .
Use Casea, .
:
Ivar Jacobson Use Case , ControlObject.
Uncle Bob , , Controller MVC Interactor. , UseCase.
.
, Interactor use case execute() , . .
.
- , Interactora . . .
Interactor , use case.
, , . Interactor, .
: UseCase, . .
, UseCase Interactor , .
Interactor UseCase, : Interactor/UseCase , use case ( ).
, , -, , Repository.
- , . Uncle Bob Gateway, Repository.
Repository?
, , ( Fernando Cejas ), .
Repository - . , , .
Android- Repository , .
Repository, , login()
(, Repository, , ).
, Gateway , . Gateway , API . , , .
, .
, . !
Repository Interactor.
, , , Repository Presentera, Interactor.
Repository , Dependency Rule Repository . Interactor . Interactor, , , proxy-interactor, , .
, , Interactor, , , Interactor , . .
, . .
DTO Entities . , . Dependency Rule .
. .
DTO :
+ ;
+ - ;
- ;
- .
DTO Enitities:
+ ;
+ ;
- ;
- DTO, .
:
, / , ( ). , API .
, , .
, . , c:
So when we pass data across a boundary, it is always in the form that is most convenient for the inner circle.
( , )
Interactor .
Interface Adapters, Presenter Repository.
. API . , login()
Profile OrderState. , , Repository.
LoginResponse Profile OrderState , Interactore Repository?
Interactore. , .. .
Repository. :
Interactor, , .
Interactor Repository. , Repository/Gateway Interactor?.
Clean Architecture .
:
, , . , . .
Android- RxJava. , Fernando Cejas , RxJava Clean Architecture.
, , , , Boundaries ( Dependency Rule) Observable Subscriber.
, RxJava , . , Clean Architecture.
, RxJava . Java 9 util.concurrent.Flow, Reactive Streams, RxJava2. - RxJava, .
, ? .
:
. Google Architecture Components.
- . . .
, . , , , . , .
, , .
. . Clean Architecture, , , !