Narzędzie do generowania kodu warstw domain i data.
Aby wygenerować klasę Dto dodaj adnotację [Dto
] na klasie domain.
Możesz podać argumenty do [Dto
] aby zmienić ustawienia generowanego kodu.
Możesz również zmienić ustawienia poszczególnych pól używając adnotacji [DtoConfigure
]
Wygenerowana klasa będzie miała nazwę <nazwaKlasyŹródłowej>Dto oraz wygenerowane zostaną extension na <nazwaKlasyŹródłowejDto> i <nazwaKlasyŹródłowej> z metodami odpowiednio toDomain i toDto.
klasa <nazwaKlasyŹródłowej>Dto będzie adnotowana adnotacją JsonSerializable
którą można przekazać jako argument do [Dto
].
Pola klasy <nazwaKlasyŹródłowej>Dto będą adnotowane adnotacją JsonKey
jeżeli zostanie ona podana jako argument do [DtoConfig
].
Aby wygenerować klasy useCase do metod danej klasy dodaj do niej adnotacje [DorGenerator
].
Możesz podać argumenty do [DorGenerator
] aby zmienić ustawienia generowanego pliku.
Możesz również zmienić ustawienia poszczególnych metod używając [DorConfigure
].
Wygenerowane klasy będą miały nazwy <nazwaMetody>UseCase i będą adnotowane injectable
.
Aby można było wygenerować useCase wszystkie argumenty metody muszą być argumentami 'named'.
Aby wygenerować klasę Implementującą, dodaj adnotacje [DorGenerator
].
Możesz podać argumenty do [DorGenerator
] aby zmienić ustawienia generowanego pliku.
Możesz również zmienić ustawienia poszczególnych metod używając [DorConfigure
].
Wygenerowana klasa będzie miała nazwę <nazwaKlasyŹródłowej>Impl oraz adnotacje @LazySingleton(as: <nazwaKlasyŹródłowej> )
Aby można było wygenerować metody wszystkie ich argumenty muszą być argumentami 'named'.
Klasa <nazwaKlasyŹródłowej>Impl jako argument konstruktora przyjmuje klasę <nazwaKlasyŹródłowej>DataSource którą importuje z pliku w tym samym katalogu co klasa źródłowa o nazwie <nazwaPlikuKlasyŹródłowej>.data_source.g.dart
Aby wygenerować klasę DataSource, dodaj adnotacje [DorGenerator
].
Możesz podać argumenty do [DorGenerator
] aby zmienić ustawienia generowanego pliku.
Możesz również zmienić ustawienia poszczególnych metod używając [DorConfigure
].
Argumenty [ApiMethod
] oraz path
są obowiązkowe.
Wygenerowana klasa będzie klasą abstrakcyjną o nazwie <nazwaKlasyŹródłowej>DataSource przygotowaną do tego aby z niej generować pliki przy użyciu paczki retrofit
i jest adnotowana @LazySingleton()
z paczki injectable
.
Argumenty metod można adnotować adnotacjami Path, Body i Query pochodzącymi z paczki retrofit.
- Upewnij się że masz dodane do projektu paczki
json_serializable
,json_annotation
,retrofit
orazinjectable
. - dodaj w pubspec.yaml
dependencies:
# dodaj dor_gen do swoich dependencies
dor_gen:
git:
#TODO dodaj link do projektu
url:
# numer wersji
ref: 0.5.0
Dodaj adnotacje do swojej klasy
// Dodaj adnotacje dto
@Dto()
class Cat {
final int id;
final String name;
final List<String> toys;
const Cat({
required this.id,
required this.name,
required this.toys,
});
}
Uruchom generator
# dart
dart pub run build_runner build
# flutter
flutter pub run build_runner build
Powinien wygenerować się plik <nazwa_pliku_źródłowego>.dto.g.dart z klasą CatDto oraz extension CatDtoToCat i CatToCatDto, oraz plik <nazwa_pliku_źródłowego>.dto.g.g.dart wygenerowany przez json_serializable.
Dodaj adnotacje do klasy
//dodaj adnotacje DorGenerator do klasy
@DorGenerator()
abstract class FooRepository {
//Dodaj adnotacje DorConfig do metod
@DorConfig(
apiMethod: ApiMethod.POST,
path: '/api/v1/foo/doNothing',
)
Future<Thing> doSomething({
required String id,
required String name,
});
}
Uruchom generator
# dart
dart pub run build_runner build
# flutter
flutter pub run build_runner build
Powinny wygenerować się pliki:
- <nazwa_pliku_źródłowego>.data_source.g.dart z abstrakcją klasy FooRepositoryDataSource
- <nazwa_pliku_źródłowego>.data_source.g.g.dart wygenerowany przez retrofit
- <nazwa_pliku_źródłowego>.use_case.g.dart z klasą DoSomethingUseCase
- <nazwa_pliku_źródłowego>.impl.g.dart z klasą FooRepositoryImpl z implementacją FooRepository
- Jeżeli nie chcesz aby generował się któryś z tych elementów ustaw na false odpowiedni argument:
- generateUseCase dla use_case
- generateDataSource dla data_source
- generateRepositoryImpl dla impl
- Jeżeli nie chcesz generować useCase dla konkretnej metody użyj znacznika adnotacji DorConfig z parametrem generateUseCase ustawionym na false.
- Jeżeli nie chcesz generować takiej metody w pliku dataSource użyj adnotacji DorConfig z parametrem generateDataSourceMethod ustawionym na false.
UnnamedParameterError
oznaczający, że któryś z argumentów w funkcjach lub konstruktorze nie jest 'named'.
BadArgumentsError
oznacza, że któryś argument został źle zastosowany.
MissingArgumentError
oznacza, że któryś z wymaganych argumentów w adnotacjach nie został podany.
- nieobsługiwane argumenty w JsonSerializable:
- converters
- nieobsługiwane argumenty w JsonKey:
- defaultValue obsługuje tylko typy
- null
- bool
- int
- string
- double
- type
- defaultValue obsługuje tylko typy
- w funkcjach wszystkie argumenty muszą być named
- jedyny typ po którym można iterować i jest obsługiwany to lista (nie obsługuje map, set itp)
- mogą pojawić się problemy gdy nasz typ jest parametryzowany - funkcjonalność nie jest przetestowana
Paczka jest we wczesnej fazie dlatego proszę raportować wszystkie błędy i pomysły na udoskonalenia i nowe ficzerki za pomocą githuba link
Link do pliku roadmap link