-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


TDD vs не TDD

Пятница, 04 Сентября 2020 г. 14:40 + в цитатник
Fester:
Цитата korvin @
В смысле «я знаю»? класс Request публичный с публичными полями. Все знают, как оно реализовано.

Все знают публичные поля класса Request (имя и тип), но никто не знает какие из этих публичных полей используются функцией submit. А значит, для вызова submit тебе надо либо инициализировать все поля класса Request, либо знать какие поля класса Request использует submit, чтобы не создавать лишние объекты.

Цитата korvin @
может мне ещё и JDK мокать? java.lang.Math.sin, например?

java.lang.Math.sin мокать не нужно, а, скажем, доступ к файловой системе нужно.

Цитата korvin @
А то ж вдруг я его вызываю, да синус считаю. Ты сам-то мокаешь стандартную библиотеку?

Я мокаю то, что мне нужно. Например доступ к реестр или доступ к файлам - тоже вполне себе стандартные штуки.

Цитата korvin @
Также как и любое другое поле: передам нужное мне значение в конструктор

Ты понимаешь, что вместо вызова некой функции (в данном случае canWithdraw) ты предлагаешь создать некое поле, которое должно заполняться гезультатом работы этой функции. При этом мало того, что функцию все равно придется вызывать (в продуктивном коде), так еще у тебя и Request'e добавится куча полей.


Цитата korvin @
С хера ли? Ты что, Егора Бугаенко начитался/насмотрелся? Plain data там, никаких объектов, никаких абстракций.

Не знаю кто такой Егор Бугаенко.
Никаких plain data там нет. Смотри свой собственный код, у тебя у Account есть как минимум две функции: hasSameOwnerAs и canWithdraw плюс к этому read-only проперти owner. Ясен хрен, что тут должна быть абстракция.

Цитата korvin @
1) у каждой функции своя область определения, значит у каждой будет свой Request

Отлично! Т.е. Request - это тоже нифига не plain data объект!
Это должен быть интерфейс типа
    public interface IRequest
    {
    Money Amount {get;} // тут хз, возможно тоже должна быть абстракция
    IAccount Source {get;}
    IAccount Destination {get;}
    Action CheckCompliance{ get; set; }
    }



Цитата korvin @
2) нафига перегружать модуль Transfer ещё десятком какимх-то функций? Про Single Responsibility Principle слышал?

ingle Responsibility Principle ничего не говорит о том, что в классе должна быть одна функция.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838284

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку