Comments (2)
I want to know too.
I am reading your wonderful book and repository.
I created a data transformer for a collection class in my project.
Application service:
public function execute($request = null)
{
// ...
$users = // ...
return $this->usersDataTransformer->write($users)->read();
}
Data transformer for a collection class:
class UsersDtoDataTransformer implements UsersDataTransformer
{
private $users;
private $userDataTransformer;
public function __construct(UserDtoDataTransformer $userDataTransformer)
{
$this->userDataTransformer = $userDataTransformer;
}
public function write(Users $users): self
{
$this->users = $users;
return $this;
}
public function read()
{
// Should I wrap this with a DTO?
return array_map(function (User $user): object {
return $this->userDataTransformer->write($user)->read();
}, $this->users->toArray());
}
}
If pagination is needed, I created a data transformer in the infrastructure layer.
This transformer translates into a paginator.
namespace MyApp\Infrastructure\Application\DataTransformer\User;
// uses...
class UsersLaravelLengthAwarePaginatorDataTransformer implements UsersDataTransformer
{
private $users;
private $usersDataTransformer;
private $perPage = 10;
private $currentPage;
private $options;
public function __construct(UsersDtoDataTransformer $usersDataTransformer)
{
$this->usersDataTransformer = $usersDataTransformer;
$this->currentPage = LengthAwarePaginator::resolveCurrentPage();
$this->options = [
'path' => LengthAwarePaginator::resolveCurrentPath(),
];
}
public function setPerPage(int $perPage): self
{
$this->perPage = $perPage;
return $this;
}
public function write(Users $users): self
{
$this->users = $users;
return $this;
}
public function read()
{
$users = $this->usersDataTransformer->write($this->users)->read();
// Should I wrap it with a DTO?
return new LengthAwarePaginator(
array_slice(
$users,
$this->perPage * ($this->currentPage - 1),
$this->perPage
),
count($users),
$this->perPage,
$this->currentPage,
$this->options
);
}
}
I have following questions.
- Is the above code a good idea?
- Should I build a paginator outside of DDD? (For example, a controller or view model of a web application framework)
- Should an application service translate one aggregation (or collection) into a DTO? Or should an application service translate all data needed by a view (multiple aggregations) into a DTO?
from last-wishes.
Thanks for opening this issue. Once closed, we will ask you and to all participants to provide open feedback about your experience. Thanks in advance!
from last-wishes.
Related Issues (16)
- What is a difference between this two methods? HOT 1
- Signup error DateTimeImmutable given HOT 1
- Your domain code is tightly coupled to Doctrine HOT 3
- Violation of Doctrine Rule about foreign keys HOT 8
- Multiple Application Service Methods per Class
- Low quality of the project HOT 2
- Error When Trying to signup HOT 1
- makeWishNoAggregateVersion misses no more than 3 wishes business rule HOT 1
- UserFactory and WishFactory not used?
- `makeWishAggregateVersion` and more than 3 wishes
- ERROR: manifest for kibana:latest not found
- LoggerDomainEventSubscriber.php coupled to infrastructure at domain layer
- [Dashboard] Error when loading dashboard. "badgesFrom" method expects an UserId but it is receiving a string instead. HOT 1
- orm:schema-tool:create not working HOT 1
- Unable to generate a URL for the named route "login" as such route does not exist. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from last-wishes.