Add section with basic service explanation

This commit is contained in:
Radoslav Georgiev 2018-07-26 12:07:52 +03:00
parent 3cb761831a
commit aebf4511ff

View File

@ -24,3 +24,31 @@ Expect often updates as we discuss & decide upon different things.
* If the model property spans multiple relations, it should better be a selector. * If the model property spans multiple relations, it should better be a selector.
* If a model property, added to some list API, will cause `N + 1` problem that cannot be easily solved with `select_related`, it should better be a selector. * If a model property, added to some list API, will cause `N + 1` problem that cannot be easily solved with `select_related`, it should better be a selector.
## Services
A service is a simple function that:
* Takes keyword-only arguments
* Is type-annotated (even if you are not using `mypy` at the moment)
* Does business logic - from simple model creation to complex cross-cutting concerns, to calling external services & tasks.
An example service that creates an user:
```python
def create_user(
*,
email: str,
name: str
) -> User:
user = User(email=email)
user.full_clean()
user.save()
create_profile(user=user, name=name)
send_confirmation_email(user=user)
return user
```
As you can see, this service calls 2 other services - `create_profile` and `send_confirmation_email`