Skip to content

Commit f947625

Browse files
authored
Added info about logical blocks and refactoring
1 parent 0597230 commit f947625

File tree

1 file changed

+67
-1
lines changed

1 file changed

+67
-1
lines changed

README.md

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
- [Про код](#про-код)
1010
- [Основные принципы](#основные-принципы)
1111
- [Атомарность операций](#атомарность-операций)
12+
- [Логические блоки](#логические-блоки)
1213
- [Размеры методов, функций и модулей](#размеры-методов-функций-и-модулей)
1314
- [Импорты](#импорты)
1415
- [Файлы `__init__.py`](#файлы-__init__py)
1516
- [Докстринги](#докстринги)
1617
- [Про Pull Request](#про-pull-request)
1718
- [Создание Pull Request](#создание-pull-request)
19+
- [Рефакторинг и Pull Request](#рефакторинг-и-pull-request)
1820
- [Размер Pull Request](#размер-pull-request)
1921
- [Про тулинг](#про-тулинг)
2022
- [Пакетный менеджер (poetry)](#пакетный-менеджер-poetry)
@@ -83,6 +85,64 @@ result = calculate_weather(hello)
8385
**Почему?** Потому что код становится более читабельным, не нужно исполнять несколько выражений в голове во время чтения кода. Разбитый до простых атомных операций код воспринимается гораздо лучше, чем сложный уан-лайнер. Постарайтесь упростить свой код настолько, насколько это возможно - код чаще читается, чем пишется.
8486

8587

88+
### Логические блоки
89+
90+
Постарайтесь делить код на логические блоки - так глазу программиста будет в разы проще прочитать и уловить суть.
91+
92+
Плохо ❌:
93+
```python
94+
def register_model(self, app_label, model):
95+
model_name = model._meta.model_name
96+
app_models = self.all_models[app_label]
97+
if model_name in app_models:
98+
if (model.__name__ == app_models[model_name].__name__ and
99+
model.__module__ == app_models[model_name].__module__):
100+
warnings.warn(
101+
"Model '%s.%s' was already registered. "
102+
"Reloading models is not advised as it can lead to inconsistencies, "
103+
"most notably with related models." % (app_label, model_name),
104+
RuntimeWarning, stacklevel=2)
105+
else:
106+
raise RuntimeError(
107+
"Conflicting '%s' models in application '%s': %s and %s." %
108+
(model_name, app_label, app_models[model_name], model))
109+
app_models[model_name] = model
110+
self.do_pending_operations(model)
111+
self.clear_cache()
112+
```
113+
114+
Хорошо ✅:
115+
```python
116+
def register_model(self, app_label, model):
117+
model_name = model._meta.model_name
118+
app_models = self.all_models[app_label]
119+
120+
if model_name in app_models:
121+
if (
122+
model.__name__ == app_models[model_name].__name__ and
123+
model.__module__ == app_models[model_name].__module__
124+
):
125+
warnings.warn(
126+
"Model '%s.%s' was already registered. "
127+
"Reloading models is not advised as it can lead to inconsistencies, "
128+
"most notably with related models." % (app_label, model_name),
129+
RuntimeWarning, stacklevel=2)
130+
131+
else:
132+
raise RuntimeError(
133+
"Conflicting '%s' models in application '%s': %s and %s." %
134+
(model_name, app_label, app_models[model_name], model))
135+
136+
app_models[model_name] = model
137+
138+
self.do_pending_operations(model)
139+
self.clear_cache()
140+
```
141+
142+
**Почему?** Кроме того, что это повышает читабельность, [Zen of Python](https://www.python.org/dev/peps/pep-0020/) рассказывает нам о том, как надо писать идиоматический код на Python.
143+
Одно из высказываний звучит как "Sparse is better than dense." - "Разреженное лучше чем сжатое". Сжатый код сложнее прочитать чем разреженный.
144+
145+
86146
### Размеры методов, функций и модулей
87147

88148
Предельный размер метода или функции - **50** строк.
@@ -137,7 +197,13 @@ from some.absolute.path import foo, bar
137197

138198
Один Pull Request должен решать ровно одно issue.
139199

140-
**Почему?** Потому что ревьюверу сложнее держать контекст нескольких задач в голове и переключаться между ними.
200+
**Почему?** Потому что ревьюверу сложнее держать контекст нескольких задач в голове и переключаться между ними. Когда PR содержит несколько issue - это часто приводит к тому, что PR увеличивается и требует больше времени и сил на ревью от ревьювера.
201+
202+
203+
### Рефакторинг и Pull Request
204+
Рефакторинг лучше всего выносить в отдельный Pull Request.
205+
206+
**Почему?** Когда рефакторинг идет вместе с решением определенного issue, то рефакторинг размывает контекст issue и вводит правки, которые не имеют отношения к данному PR.
141207

142208

143209
### Размер Pull Request

0 commit comments

Comments
 (0)