Так, несомненно, делать нельзя.Что мешает сделать DistanceCalculator класс?
interface Distance {
/**
* @return PositiveReal
*/
public function get();
}
class DistanceFactory implements Distance {
public function get()
{
return $this->distance;
}
public function __construct(PositiveReal $distance_)
{
$this->distance = distance_;
}
private $distance;
}
class GeoDistance implements Distance {
public function get()
{
//здесь вычисляется расстояние между двумя точками на Земле
}
public function __construct(GeoPoint a, GeoPoint b)
{
$this->point_a = a;
$this->point_b = b;
}
private $point_a;
private $point_b;
}
OK, а Money::add() (Money+)?Нет. Реализовал бы operator +
Если уж сахар, так побольше.
Но повторю, расчет расстояния между двумя абстрактными точками, в котором вдруг появляется радиус планеты и коэфициент между милями и км, это совсем не то, что комплексные числа, в которых операция add строго замкнута вокруг ComplexNumber.
И нахрена это в domain model, в которой совершенно четко по постановке задачи тут абстракция никогда не потребуется?
А внутри calculateDistance() что будет? $point->latitude? Получаем геттерно-сеттерный интерфейс.Что мешает сделать DistanceCalculator класс? Лень?
Почему тогда расстояние, это не просто функция от двух точек, если нет связанной абстракции расстояния?абстракция никогда не потребуется
function geo_distance(GeoPoint a, GeoPoint b)
{
//здесь рассчёт расстояния
}
Отлично. Специально почитаю, что там такого Эрик Эванс мог написать, что обработка данных вдруг стала выражаться не отдельными объектами, а методами в классах данных. Чую носом, что там либо примеры неудачные, либо проблемы с Java.давай ты сначала ознакомишься с книгой
Заодно не забудь почитать на досуге про инкапсуляциюОтлично. Специально почитаю, что там такого Эрик Эванс мог написать, что обработка данных вдруг стала выражаться не отдельными объектами, а методами в классах данных. Чую носом, что там либо примеры неудачные, либо проблемы с Java.
Понимаешь ли, ответ на то, как это будет реализовано сильно зависит от реальных бизнес-требований и модель действительно может выглядеть по-разному, в том числе возможна какая-то SalaryCalculationStrategy.Просто мне гораздо проще выделить SalaryCalculator, это не потребует каких-то сверхзатрат. Но потом, если условия подсчета изменятся, я всегда смогу подцепить... например тот сервис, который посчитает сколько дней в этом месяце этот человек отработал. Интерфейс вызова SalaryCalculator::calc - не поменяется. Ему не нужно будет скормить дополнительные значения. Он сам их подцепит. Да. Это меньше напрягает мозг. Вот я и хотел, чтобы меня переубедили. Я в отличие от @Lionishy не догматик. Я готов слушать. Но не готов верить без аргументов.
Ладно, раз социальная революция -- не надо топить.оставь свой скептицизм и постарайся просто понять чужие идеи