Is there any recommended way by DDD how can I split this AggregateRoot class into few classes?
There are at least two different approaches that may help.
One possibility is to review your model, and think about whether your aggregate is really multiple domain entities acting in a coordinated fashion. Your "root" entity code may be reduced by delegating responsibilities to other subordinate entities.
Another possibility is to delegate your computations. For example, if we have complicated computations using values, it can make sense to move that computation of the entity and into the value itself (or possibly into a "domain service"), or just into a function that lives "somewhere else".
In the Cargo example developed by Citerus, Cargo
is an entity that plays the role of an "aggregate root". A lot of the important domain information that supports Cargo's responsibilities is actually managed by a Delivery value object, and that's where the code that computes those changes lives.
In all, the Cargo aggregate is implemented as a single entity, and eight different values of varying size. Delivery is by far the largest; measured in lines of code, it is larger than the Cargo entity.
which makes development experience a little bit worse.
Yes.
Keep in mind that the real goal here is to create a design that is easy to adapt; nobody is awarding prizes for "Certified 100% DDD compliant". If the patterns described by Eric Evans aren't making things better, then don't use those patterns.