Search code examples
phpdesign-patternsdomain-driven-designddd-service

Can Domain Driven Design Application layer have Models


Can an application layer in ddd have models?

To be more explicit, I have a credential entity in my system that is related to the authentication process which is outside of my domain layer, so where this entity will be? I'm new at Domain Driven Design.


Solution

  • The Application Layer can use its own data representations. If you wire it to the user interface, the Application Layer will have to translate Domain objects to view-able data.

    But I wouldn't call this "model", except maybe in the sense of "view model."

    Without more details, it's hard to say anything more useful, so I'll try to answer to your integration problem by example.

    Vaughn Vernon's example app

    Taking a look at Vernon's sample application, you can have an authentication service isolated from your consuming application. Vernon models three stand-alone Java applications for this.

    Now there's the IdentityAccess service providing all the authentication. There, you can create Tenant Entities. Then there's the Collaboration app (forum etc.) which uses its own internal representation of Tenant.

    So the client app obtains a TenantId and creates its own Tenant objects to associate forum threads with a tenant. Tenants aren't changed or persisted from within this app, only used.

    Tying Domain objects to stuff outside it

    Your point may be even simpler. If you have a Credential Entity (in your Domain) and some auth logic outside of it, make the "authenticator" implement a specialized interface of the Domain and inject it back into Domain objects if you really need to. (That's the Ports & Adapters approach: both sides may specify interfaces and wait for concrete implementations; the other side implements the interface and injects an object back in.)

    I guess you don't really have to have access from within your Domain to the authentication logic, but we'd have to see more code to judge this.

    Vernon uses an AuthenticationService inside the Domain to handle wrong login details.