mirror of
https://github.com/HackSoftware/Django-Styleguide.git
synced 2024-11-11 04:06:46 +03:00
Reword the initial services section
This commit is contained in:
parent
fbd7ca14cb
commit
61f6eea6db
33
README.md
33
README.md
|
@ -363,18 +363,29 @@ A few things to note here:
|
||||||
|
|
||||||
## Services
|
## Services
|
||||||
|
|
||||||
A service is a simple function that:
|
Services are where business logic lives.
|
||||||
|
|
||||||
* Lives in `your_app/services.py` module
|
The service layer speaks the specific domain language of the software, can access the database & other resources & can interact with other parts of your system.
|
||||||
* Takes keyword-only arguments
|
|
||||||
* Is type-annotated (even if you are not using [`mypy`](https://github.com/python/mypy) at the moment)
|
A service can be:
|
||||||
* Works mostly with models & other services and selectors
|
|
||||||
* Does business logic - from simple model creation to complex cross-cutting concerns, to calling external services & tasks.
|
- A simple function.
|
||||||
|
- A class.
|
||||||
|
- An entire module.
|
||||||
|
- Whatever makes sense in your case.
|
||||||
|
|
||||||
|
In most cases, a service can be simple function that:
|
||||||
|
|
||||||
|
- Lives in `your_app/services.py` module.
|
||||||
|
- Takes keyword-only arguments, unless it requires no or one argument.
|
||||||
|
- Is type-annotated (even if you are not using [`mypy`](https://github.com/python/mypy) at the moment).
|
||||||
|
- Interacts with the database, other resources & other parts of your system.
|
||||||
|
- Does business logic - from simple model creation to complex cross-cutting concerns, to calling external services & tasks.
|
||||||
|
|
||||||
An example service that creates a user:
|
An example service that creates a user:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def create_user(
|
def user_create(
|
||||||
*,
|
*,
|
||||||
email: str,
|
email: str,
|
||||||
name: str
|
name: str
|
||||||
|
@ -383,13 +394,15 @@ def create_user(
|
||||||
user.full_clean()
|
user.full_clean()
|
||||||
user.save()
|
user.save()
|
||||||
|
|
||||||
create_profile(user=user, name=name)
|
profile_create(user=user, name=name)
|
||||||
send_confirmation_email(user=user)
|
confirmation_email_send(user=user)
|
||||||
|
|
||||||
return user
|
return user
|
||||||
```
|
```
|
||||||
|
|
||||||
As you can see, this service calls 2 other services - `create_profile` and `send_confirmation_email`
|
As you can see, this service calls 2 other services - `profile_create` and `confirmation_email_send`.
|
||||||
|
|
||||||
|
In this example, everything related to the user creation is in one place and can be traced.
|
||||||
|
|
||||||
### Naming convention
|
### Naming convention
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user