Ни один программист в здравом уме не горит желанием покрывать что-либо тестами или комментариями уже после того, как он это написал.
Если вы хотите, чтобы ваш код был покрыт тестами и комментариями, то надо начинать писать код именно с них.
С тестами все понятно, для этого существует методология TDD (Test Driven Development), которая рассказывает нам про красный -> зеленый -> синий циклы: сначала пишем тесты (красный), потом пишем код, который пройдет все тесты (зеленый), а потом рефакторим его (синий).
А угадайте как называется подход с комментариями? Правильно – Comment Driven Development (CDD). Здесь у нас серый и цветной циклы: сначала пишем что должно произойти комментариями (серый), потом уже пишем код (цветной).
Для примера возьмем логику регистрации пользователя и опишем ее по CDD:
class AuthService { // . New user Register UseCase register(req: RegisterRequest): RegisterResponse { // TODO. Validate request // ... // TODO. Check email uniqness // ... // TODO. Create new User // ... // TODO. Save to DB // ... // TODO. Return Success // ... } }
И только теперь пишем имплементацию (я пишу псевдокод, не воспринимать его всерьез):
class AuthService { // . New user Register UseCase register(req: RegisterRequest): RegisterResponse { // . Validate request await req.validate() // . Check email uniqness const exist = this.repository.userEmailExist(req.email); if (exist) { return new RegisterResponse( false, "User with this email already exist" ) } // . Create new User const user = new User(req.email, req.password) // . Save to DB this.repository.save(user); // . Return Success return new RegisterResponse(true) } }
Преимущества CDD:
- Возможность до начала написания кода подумать о том, что должно произойти
- Легко выставлять задачи джунам: пишете что и где должно произойти, а они уже имплементируют
- Код уже покрыт комментариями