Created
January 18, 2022 17:19
-
-
Save jultabary/94c8ce5b709d7074a71e9a4dfa6b0753 to your computer and use it in GitHub Desktop.
Sample in rust
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| trait Repository { | |
| fn save(&self); | |
| } | |
| struct ARepository {} | |
| impl Repository for ARepository { | |
| fn save(&self) { | |
| println!("has been save !!!"); | |
| } | |
| } | |
| trait UseCase { | |
| fn execute(&self); | |
| } | |
| struct UseCaseA<'a> { | |
| repository: &'a dyn Repository | |
| } | |
| impl<'a> UseCase for UseCaseA<'a> { | |
| fn execute(&self) { | |
| self.repository.save(); | |
| } | |
| } | |
| impl<'a> UseCaseA<'a> { | |
| fn new(repository: &dyn Repository) -> UseCaseA { | |
| UseCaseA { | |
| repository | |
| } | |
| } | |
| } | |
| struct UseCaseB<'a> { | |
| repository: &'a dyn Repository | |
| } | |
| impl<'a> UseCaseB<'a> { | |
| fn new(repository: &dyn Repository) -> UseCaseB { | |
| UseCaseB { | |
| repository | |
| } | |
| } | |
| fn get_repository(&self) -> &'a dyn Repository { | |
| return self.repository; | |
| } | |
| } | |
| impl<'a> UseCase for UseCaseB<'a> { | |
| fn execute(&self) { | |
| self.repository.save(); | |
| } | |
| } | |
| struct ControllerA {} | |
| fn move_and_drop(repository: ARepository) { | |
| } | |
| fn main() { | |
| let repository = ARepository { }; | |
| let use_case_b = UseCaseB::new(&repository); | |
| let use_case_a = UseCaseA::new(&repository); | |
| move_and_drop(repository); | |
| use_case_a.execute(); | |
| use_case_b.execute(); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment