This article possibly contains original research. (February 2023) |
This article relies largely or entirely on a single source. (March 2024) |
Action–___domain–responder (ADR) is a software architectural pattern that was proposed by Paul M. Jones[1] as a refinement of Model–view–controller (MVC) that is better suited for web applications. ADR was devised to match the request-response flow of HTTP communications more closely than MVC, which was originally designed for desktop software applications. Similar to MVC, the pattern is divided into three parts.
Components
edit- The action takes HTTP requests (URLs and their methods) and uses that input to interact with the ___domain, after which it passes the ___domain's output to one and only one responder.
- The ___domain can modify state, interacting with storage and/or manipulating data as needed. It contains the business logic.
- The responder builds the entire HTTP response from the ___domain's output which is given to it by the action.
Comparison to MVC
editADR should not be mistaken for a renaming of MVC; however, some similarities do exist.
- The MVC model is very similar to the ADR ___domain. The difference is in behavior: in MVC, the view can send information to or modify the model,[citation needed] whereas in ADR, the ___domain only receives information from the action, not the responder.
- In web-centric MVC, the view is merely used by the controller to generate the content of a response, which the controller could then manipulate before sending as output. In ADR, execution control passes to the responder after the action finishes interacting with the ___domain, and thus the responder is entirely responsible for generating all output. The responder can then use any view or template system that it needs to.
- MVC controllers usually contain several methods that, when combined in a single class, require additional logic to handle properly, like pre- and post-action hooks. Each ADR action, however, is represented by separate classes or closures. In terms of behavior, the action interacts with the ___domain in the same way that the MVC controller interacts with the model, except that the action does not then interact with a view or template system, but rather passes control to the responder which handles that.
References
edit- ^ "Action-Domain-Responder: A Tentative MVC Refinement". paul-m-jones.com.
External links
edit- Paul M. Jones' original proposal of ADR
- Implementing ADR in Laravel, an implementation of the pattern in the Laravel PHP framework.