цена это функцияЦена не станет «другой», если она совпадает,
я склоняюсь больше к слову "договор максимальной цены"понятие offer
цена это функцияЦена не станет «другой», если она совпадает,
я склоняюсь больше к слову "договор максимальной цены"понятие offer
Есть разные аспекты одних и тех же понятий на естественном языке. Бизнесовый, философский, потребительский, etc. Поэтому просто выкидывать такие определения без привязки к контексту — это сотрясать воздух.цена это функция
Есть у нас в системе такая штука, как фотографии отеля. Они имеют какие-то метаданные(название, описание, приоритет, ...) и сам файл. Метаданные хранятся в MySQL, а вот файлы в мускуле хранить идея плохая - поэтому мы выбрали GridFS(но на самом деле не важно, хоть просто в FS).Зачем тебе делать разделение на domain и persistence models (то, что ты называешь «моделью» и «сущностью» соответственно)? Doctrine тоже без проблем может оперировать id-шниками.
Вот, именно к ручному датамаперу мы и пришли. Попробовали сделать конвертацию сущностей доктрины в доменные модели и агрегаты прямо в репозитории - ничего хорошего не вышло... ((Если доктриновские entities использовать как persistence models, то надо уж мапить сразу весь aggregate root целиком. А с таким подходом, по-моему, проще оставить от доктрины один только квери билдер и делать "ручной датамаппер".
Я боюсь, что тут просто подобрана ужасная терминология. Продали по $42 — это и есть цена. А подробности формирования цены можно было бы узнать, например, из offer'а. И называть это «ценой» для меня по меньшей мере странно.если продали товар за 42, придется отчитаться перед поставщиком, почему 42. нужно найти ту самую id цены в которой указаны условия.
Сам файл? В смысле blob? Он в виде свойства у модели что ли?Есть у нас в системе такая штука, как фотографии отеля. Они имеют какие-то метаданные(название, описание, приоритет, ...) и сам файл. Метаданные хранятся в MySQL, а вот файлы в мускуле хранить идея плохая - поэтому мы выбрали GridFS(но на самом деле не важно, хоть просто в FS).
Т.е., получается, что у нас доменная модель фотографии отеля мапится уже на два разных хранилища.
даже если тебе предложениями легче думать, вопрос "какое из предложений" осталсяА подробности формирования цены можно было бы узнать, например, из offer'а
Да, сам файл в свойстве(по факту это конечно же ссылка на "ленивый" объект). Почему так?Сам файл? В смысле blob? Он в виде свойства у модели что ли?
Почему в модели не может быть просто имя файла или id фотографии?
class UploadMongoType
{
/** @var DocumentManager */
protected $dm;
....
/**
* @param mixed $value
* @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform
* @return null
* @throws \Doctrine\DBAL\Types\ConversionException
*/
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
if (empty($value)) {
return null;
}
if ($value instanceof UploadMongo) {
if ($this->dm->getUnitOfWork()->getDocumentState($value) === UnitOfWork::STATE_NEW) {
$this->dm->persist($value);
}
$this->dm->flush();
return $value->getId();
}
throw ConversionException::conversionFailed($value, self::NAME);
}
/**
* @param mixed $value
* @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform
* @return null
*/
public function convertToPHPValue($value, AbstractPlatform $platform)
{
if (empty($value)) {
return null;
}
return $this->dm->getReference(UploadMongo::class, $value);
}
}
Я не знаю какие там у тебя вопросы остались, но я вёл речь про терминологию, которая тебя, судя по всему, как раз безразлична.даже если тебе предложениями легче думать, вопрос "какое из предложений" остался
да, по разным договорам, предложениям как хочешь, значение одно а цена как единица с указанием "что за цена" разная!Это значит, что цены $42 и $42 — это разные цены
намешал все до кучи, не поняв смысла.но я вёл речь про терминологию
Это культ Карго. Как уже отметили, это свойство никак в бизнес-логике не участвует, бессмысленно его туда тащить.Да, сам файл в свойстве(по факту это конечно же ссылка на "ленивый" объект). Почему так?
1. Потому что файл - неотъемлемое свойство модели и модель без него не является валидной.
т.е. вот такая логика?У вас содержимое файла в бизнес логике никак не участвует. И не надо это тащить туда. Вытаскиваете файл только на фронте и все. Свойства с идентификатором(именем) файла - достаточно.
религия меланезийских аборигенов? ))культ Карго
вот, а как же в этом случае мапить read и write модели на одни и те же данные? или read модель строить из write модели, а мапить только её?Второй момент, на который я хочу обратить внимание — это разделение чтения и записи (CQRS). Вот это рассуждение на тему того какие свойства могут понадобится в момент чтения будет очень сильно мешать для реализации чистой модели.
но именно так она и стала анемичной) разве только простейшей валидацией полей и выпуском событий она должна заниматься?Она должна быть чиста и невинна. И не думать о суровых реалиях.