korvin:
Цитата Fester @ 04.09.20, 11:40 Все знают публичные поля класса Request (имя и тип), но никто не знает какие из этих публичных полей используются функцией submit
Все используются, именно поэтому Request является типом аргумента submit. Это её (submit) область определения.
Цитата Fester @ 04.09.20, 11:40 а, скажем, доступ к файловой системе нужно.
Конечно, ведь это внешний ресурс с побочными эффектами.
Цитата Fester @ 04.09.20, 11:40 Ты понимаешь, что вместо вызова некой функции (в данном случае canWithdraw) ты предлагаешь создать некое поле, которое должно заполняться гезультатом работы этой функции.
Ну тебе ж не нравилось, что я вызываю простую чистую функцию. Вот тебе альтернативное решение.
Цитата Fester @ 04.09.20, 11:40 При этом мало того, что функцию все равно придется вызывать (в продуктивном коде)
И что? Это дело этой функции, с точки зрения submit это просто bool.
Цитата Fester @ 04.09.20, 11:40 так еще у тебя и Request'e добавится куча полей.
Какая куча полей?
Цитата Fester @ 04.09.20, 11:40 Смотри свой собственный код, у тебя у Account есть как минимум две функции: hasSameOwnerAs и canWithdraw
И что? Если они будут внешние, что принципиально изменится?
Ну вынеси их в статику
class Account {
public final ID id;
public final Money balance;
...
public static boolean haveSameOwners(Account a, Account b) { ... }
public static boolean canWithdraw(Account a, Money amount) { ... }
}
Что-то поменялось?
Цитата Fester @ 04.09.20, 11:40 Ясен хрен, что тут должна быть абстракция.
:facepalm: с хера ли? Тебе что, инъекцию абстракций сделали?
Цитата Fester @ 04.09.20, 11:40 Т.е. Request - это тоже нифига не plain data объект!
:facepalm: откуда такой глупый вывод?
Цитата Fester @ 04.09.20, 11:40 Это должен быть интерфейс типа
Нет, не должен.
Цитата Fester @ 04.09.20, 11:40 ingle Responsibility Principle ничего не говорит о том, что в классе должна быть одна функция.
Не говорит. Он говорит, что в классе не должно быть десяток каких-то функций, не имеющих отношения к классу.
https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838285