Я создал небольшой пакет, который содержит valueObject Тип объектов для измерений. ValueObject ), который имеет два свойства:
value - type float , и Unit SeamurementUnit , который является Интерфейс. < /p>
Он служит мне во многих проектах для подразделений, которые обрабатываются слишком подробно в проекте, чтобы быть простым типом.
Например: у меня есть проект, в котором я Работайте подробно с блоком длины, поэтому я создал классы длины, особенно для этого, какая длина наследует от измерения иунтулэвэобакт . В классе есть поле $ unit type longuunit , которое представляет собой enum реализующий измерение measurementunit . Кроме того, для каждой единицы так называемый преобразователь также создается именем LengthConverter , целью которого является преобразование блока для заданного количества.
В целом, Все это сводится к тому факту, что я могу создать этот вид кода: < /p>
Код: Выделить всё
$length = new Length(22, LengthUnit::Miles);
$lenght2 = LengthConverter::toKilometers($length);
$lenght->isEqual($lenght2); //true
$lenght2->value // 35.405568;
$lenght2->toMiles()->value; //22
$lenght2->toMiles()->unit; // Enum: LenghtUnit::Miles;
< /code>
и т. Д. Большое число, и в большинстве проектов мне просто не нужны все из них, и иногда случается, что, например, мне нужны только классы, связанные с длиной В принципе это не большая проблема, потому что, как правило, есть 3 файла для 1 объекта: единица, valueObject, преобразователь и эти файлы действительно легкие, так что все в нескольких килобитах. Это может быть исключено во время установки, и я не имею в виду создание отдельных проектов.
Код: Выделить всё
"require": {
"my_units_package": "^1.0''
}
< /code>
Но таким образом я мог добавить тег, который указывает, что загружать или что не загружать. Я знаю, что существует такое дополнительное Код: Выделить всё
"extra": {
"except": ["Power", "Volume"]
}
edit < /h3>
, чтобы лучше понять, почему я не хочу разделять каждую сущность на отдельный пакет. < /P>
В настоящее время у меня есть 50 объектов в 1 пакете. В дополнение к классам, необходимым для обработки этих сущностей, у меня есть 1x каталог поставщиков, +1 composer.json, +1 Composer.lock. < /P>
Справочник поставщика занимает 5 МБ дискового пространства. Вместе с моими 50 объектами все это занимает менее 6 МБ. +1 composer.json, +1 composer.lock
Размер каталога поставщика будет неизменным, поскольку каждый пакет будет использовать точно такой же набор библиотек - 5 МБ. < /P>
Таким образом, в целом мой проект 1, который составлял 6 МБ, станет 50 проектами с общим размером 250 МБ (50 х 5 МБ). < /p>
и с каждой дополнительной объектом размером будет расти на 5 МБ, не на несколько килобит. Справочник поставщиков в них независимо от того, загружаю ли я 2 объекта или 50. Разделение моей посылки на 50 пакетов означает, что у меня будет 50 проектов, в которых каждый будет иметь свой собственный 1x -поставщик, 1x composer.json, 1x composer.lock.
Редактировать 2
давайте рассмотрим только 2 объекта, например: < /p>
[*] Длина < /li>
Money < /li>
< /ul>
Итак, я, безусловно, у меня есть проекты: < /p>
EntiesProject
[*] project1_thatuseenties
[*] project2_thatuseEnties
/> projectn_thatuseenties < /li>
< /ul>
Если я разделяю EntiesProject на 2: < /p>
LenghtvalueObjectProject < /li>
MoneyValueObjectProject < /li>
< /ul>
каждый ProjectX_THATUSEEDIES , который не нуждается в одном из них
, будет меньше на 3 класса, например: MoneyUnit , MoneyConverter, Money`
Но
Поскольку EntiesProject теперь разделен на 2 проекта, каждый должен иметь свой собственный composer.json , composer.lock и Поставщик. Но мне нужна потеря 5 МБ, потому что я создал 1 дополнительный проект, который имеет 1 каталог поставщиков, который имеет размер 5 МБ.
Подробнее здесь: https://stackoverflow.com/questions/794 ... le-package
Мобильная версия