Action-Domain-Responder-Webタスク甚のMVCの最終凊理

目的



WebクラむアントずWebアプリケヌション間のナヌザヌむンタヌフェむスの察話を、明確に定矩された3぀の圹割に分割したす。



ADR



背景



MVCずいう甚語は、特にWebのコンテキストで、元の意味のセマンティックがかしが発生したすこの問題の詳现に぀いおは、 Stefan Pribshのビデオを参照しおください。 この䞍鮮明さを解消する手段ずしお、Web固有のタスクを解決するためのMVCコンセプトの改良版であるAction-Domain-Responderパタヌンの説明に泚目したす。



ADRは、日々のWeb開発プロセスで実際に実装するものに沿っお、はるかに優れおいるず思いたす。 たずえば、このパタヌンの䜜成は、ルヌティングずスケゞュヌリングの問題を解決する方法に郚分的に觊発されたした。これは、䞀般的な堎合、ルヌティングずスケゞュヌリングの際に、コントロヌラヌクラス自䜓ではなく 、このコントロヌラヌクラスの特定のアクションメ゜ッドを参照しおいるためです。



もう1぀の問題は、 Viewをテンプレヌトずしおよく芋おいるずいう事実です。ただし、Webのコンテキストでは、 ViewはHTTP応答であるず蚀う方がおそらく適切でしょう。 前述に基づいお、ADRはMVCよりもWebアプリケヌションの抂念をより適切に分離できるず考えおいたす。



コンポヌネント



アクションは、 ドメむンずレスポンダヌを接続するロゞックです。 入力デヌタを䜿甚しおDomainずやり取りし、 Domainの出力をRespondentに枡したす。



ドメむンには、セッション、アプリケヌションおよび環境デヌタを管理し、状態を倉曎し、必芁に応じおデヌタを管理するためのロゞックが含たれおいたす。



レスポンダヌは、HTTP応答たたは応答の説明を䜜成するために必芁なロゞックです。 基本コンテンツ本文コンテンツ、テンプレヌトずプレれンテヌション、ヘッダヌ、Cookie、ステヌタスコヌドなどで動䜜したす。



盞互䜜甚



  1. Webハンドラヌはクラむアントからリク゚ストを受け取り、それをActionに枡したす。
  2. アクションはDomainず盞互䜜甚したす。
  3. このアクションは、デヌタを回答者に転送したすこのデヌタには、 ドメむンずのやり取りの結果、クラむアント芁求からのデヌタなどが含たれる堎合がありたす
  4. レスポンダヌは、 Actionから受信したデヌタを䜿甚しお応答を生成したす。
  5. Webハンドラヌは、クラむアントに応答を送信したす。


MVCModel-View-Controllerずの比范



Web内の盞互䜜甚を蚘述する最も䞀般的なパタヌンはModel-View-Controllerです。 Action-Domain-Responderは本圓に停装されたModel-View-Controllerですか ADR芁玠がMVC芁玠に非垞に明確に反映されおいるこずに気付くかもしれたせん。



Model <--> Domain View <--> Responder Controller <--> Action
      
      





2぀のパタヌンは非垞によく䌌おいたす。 違いは䜕ですか



䞀般に、ファりラヌの゚ッセむ「 GUIアヌキテクチャ 」[翻蚳]から、「耇数のビュヌず1぀のコントロヌラヌがあり、ペヌゞ䞊の各ブロック、各コントロヌル、ペヌゞ党䜓ずしお。」 これは、WebアプリケヌションでMVCを適甚するずきに発生するセマンティックブラヌの䞻芁な芁玠です。



そしお、MVCずADRの個々のコンポヌネントをさらに詳しく比范したしょう。



モデルずドメむン


ADRでは、 Responderがドメむンず重芁な方法で盞互䜜甚しないこずを陀いお、それらに根本的な違いはありたせん。 レスポンダヌは、 ドメむンオブゞェクトを゚ンティティおよびコレクションずしお䜿甚できたすが、衚瀺目的のみです。 レスポンダヌは、MVCのフレヌムワヌクで芏定されおいるように、 ドメむンを倉曎せず、情報を送信したせん。



コントロヌラヌずアクション


䞀般的な堎合、MVCの原則に埓っお蚭蚈されたシステムのコントロヌラヌのほずんどのクラスには、特定のアクションに察応するメ゜ッドがいく぀か含たれおいたす。 これらのすべおのメ゜ッドは1぀のControllerに存圚するため、これらの各メ゜ッドで動䜜する远加の「ラッピング」ロゞックも远加されたすたずえば、アクション自䜓の盎前たたは盎埌に起動するフック。 このルヌルの重芁な䟋倖はマむクロフレヌムであり、各コントロヌラヌは個別のクロヌゞャヌたたは呌び出されるオブゞェクトであり、 アクション 䟋 Slim ずより䞀貫しおいたす。



ADRのフレヌムワヌク内では、 アクションは個別のクラスたたはクロヌゞャヌず芋なされたす。 ぀たり、各アクションは、独自の個別のクラスたたはクロヌゞャヌに配眮する必芁がありたす。



このアクションは、 コントロヌラヌがモデルずやり取りするのず同じ原則に埓っおドメむンずやり取りしたすが、 ビュヌたたはテンプレヌトシステムずはやり取りしたせん。 アクションは、単にデヌタを応答者に送信し、それを個別に砎棄するために提䟛したす。



衚珟ず回答者


MVCシステムでは、通垞、 Controllerメ゜ッドはビュヌを䜿甚しおたずえば、 テンプレヌトビュヌたたは2ステップビュヌを䜿甚しお応答本文を生成したす 。 次に、 コントロヌラヌは、生成された応答本䜓を応答自䜓に統合したす。 アクションであるControllerメ゜ッドは、応答を盎接制埡しお必芁なヘッダヌを蚭定したす。



コントロヌラヌの䞀郚のメ゜ッドは、同じデヌタに察しお異なる応答圢匏を提䟛できる堎合がありたす。 ほずんどの堎合、この倉動は絶察にすべおのメ゜ッドでサポヌトされおいないため、デヌタ衚瀺のロゞックはメ゜ッドごずに䜕らかの方法で倉化し、それぞれの堎合に独自の条件がありたす。



ADRでは、各アクションに察応するResponderがありたす。 アクションは、 ドメむンずの察話を完了するず、必芁なすべおのデヌタずこのデヌタの制埡の䞡方をドメむンから 回答者に転送したす。 レスポンダヌは、ヘッダヌの蚭定、コンテンツタむプの遞択、テンプレヌトのレンダリングなどを完党に制埡したす。



Responderには、 テンプレヌト゚ンゞン 、 ツヌステップテンプレヌト゚ンゞン 、 トランスフォヌムビュヌ、たたはその他のプレれンテヌションシステムが含たれるこずがありたす。 たた、䞀般的なResponderは耇数のActionで䜿甚できるこずに泚意しおください。 䞻なこずは、 アクションがヘッダヌずコンテンツに関するすべおの䜜業をRespondentに委ねるこずであり、個々のSubmissionに察しお独自のResponderを䜜成するために必芁なこずではありたせん。



他のパタヌンずの比范



MVCコンセプトを改良、眮換、たたは補完するものず芋なされる他のパタヌンがありたす。 Derek Greerによるパタヌンのこのレビュヌを確認できたす 。



EBI゚ンティティ境界むンタラクタヌ


EBI甚語には、ポヌトずアダプタヌ、六角圢アヌキテクチャ、 ECB Entity-Control-Boundaryずいう同矩語がいく぀かありたす。 Robert MartinのClean Architectureの䞀郚ずしお説明されおいたす。



EBIはMVCの郚分的な代替手段であり、 InteractorおよびEntityオブゞェクトによっお衚される基本的な芁玠ず動䜜が、 Boundaryを䜿甚しお着信デヌタず発信デヌタから分離されたす。 このアプロヌチの䞻な結果は、アプリケヌション自䜓ず入力および出力メカニズムの耇雑さずの明確な区別です。そのため、キヌの動䜜は、芁求の受信たたは応答の送信に぀いお特定のシステムに䟝存したせん。



私は認めたす、私はEBIの抂念にあたり粟通しおいないので、この説明は䞀般的たたは特定的に完党に正しいずは限りたせん。 この分野での䞍完党な研究の埌、EBIアヌキテクチャはおそらくMVCよりもアプリケヌション内の盞互䜜甚を説明しおいるずいう結論に達したした。 䞊蚘の説明が正しい堎合、ADRはEBI構造にかなり適合しおいたす。





あるいは、ポヌトおよびアダプタヌの甚語たたは六角圢のアヌキテクチャヌの芳点から、 アクションを「ポヌト」ず芋なす方が合理的である堎合がありたす。これは、ABI ドメむンの䞀郚ずしおEBI Invokeが呌び出されるポヌトです。 最埌に、 レスポンダヌは、アプリケヌションがデヌタをクラむアントに返す「アダプタヌ」ず考えるこずができたす。



ただし、ADRはEBIを盎接眮き換えるものではないようです。 むしろ、2぀のアプロヌチは互いに補完したす。



DCIデヌタコンテキスト盞互䜜甚


DCIはMVCぞの远加ずしお説明されおおり 、代替ではありたせん。 同皋床にADRサプリメントず呌ぶのは公平だず思いたす。



MVPモデルビュヌプレれンタヌ


MVPは、 Supervising ControllerおよびPassive Viewパタヌンによっお廃止されたした 。 䞀芋するず、特にパッシブビュヌずモデルが盞互に䟝存関係がないずいう点で、ADRず非垞によく䌌おいたす。 ファりラヌのテキストから

コントロヌルコントロヌラヌは、コントロヌラヌを䜿甚しお入力デヌタを凊理し、プレれンテヌションを制埡したす。これにより、より耇雑な衚瀺ロゞックを敎理できたす。



パッシブビュヌは、ナヌザヌむベントぞの応答を凊理するだけでなく、ビュヌを曎新するすべおの䜜業を行うコントロヌラヌを䜿甚しお、UI芁玠の動䜜数を最小限に抑えるこずでこれを実珟したす。 このアプロヌチにより、ビュヌの問題を心配するこずなく、コントロヌラヌのテストに集䞭できたす。



もう少し詳しく芋おみたしょう。





䞀般的に、近いですが、同じではありたせん。



MVVMModel-View-ViewModel


MVVMはADRず郚分的にのみ類䌌しおいたす。 MVVMのモデルは、MVCのモデルおよびADRのドメむンずほが同じです。 同様に、MVVMでの衚瀺は、MVCでの衚瀺およびADRでのレスポンダヌに非垞に䌌おいたす 。



ただし、 ViewModelはMVCのコントロヌラヌにもADRのアクションにも䌌おいたせん。 ADRはMVCの改良版であるため、MVVMずMVCを比范するこずはADRず比范するこずに䌌おいるず想定するのが合理的です。



これらの違いの詳现に぀いおは、 Joel Wenzel 、 Avtar Singh Soha 、 Rachel Appel 、 Niraja Bhattaの蚘事を読むこずをお勧めしたす。



興味深いメヌルのディスカッションがありたしたが、その間にMVVMはMVCに非垞に䌌おおり、 ビュヌずモデルの間の盞互䜜甚のためにビュヌモデルを远加したず説明したした。これが本圓にそうなら、 ビュヌモデルをADRで䜿甚しおMVCず同じ成功。



PACプレれンテヌション-抜象化-コントロヌル


りィキペディアから 

PACぱヌゞェントの階局構造であり、各゚ヌゞェントは衚珟、抜象化、および制埡の3぀の郚分です。 ゚ヌゞェントトラむアドは、それぞれの制埡郚分を介しおのみ互いに​​通信したす。 MVCずのもう1぀の違いは、各トラむアドで、衚珟ず抜象化MVCに関するモデルが完党に分離されおいるこずです。 このアプロヌチにより、異なるスレッドでモデルずビュヌを䞊行しお凊理するこずができ、抜象化が完党に初期化される前でもむンタヌフェヌスビュヌを衚瀺できるため、非垞に迅速な開始の印象をナヌザヌに残したす。



ADRずあたり䌌おいたせん。



RMRリ゜ヌスメ゜ッド衚珟


ircmaxellがRedditを指すたで、私はRMRに぀いお聞いおいたせんでした。



ADRずRMRは互いに非垞に䌌おおり、それらの芁玠は互いに非垞に正確に察応しおいたす。



 Resource <--> Domain Method <--> Action Representation <--> Responder
      
      





ただし、RMRのニュアンスのいく぀かは、これら2぀のアプロヌチがただ互いに異なるず信じさせおいたす。 䟋

したがっお、オブゞェクト指向蚀語のフレヌムワヌク内で、httpリ゜ヌスリ゜ヌスはプラむベヌトプロパティず、それぞれが暙準HTTPメ゜ッドに察応する特定のパブリックメ゜ッドのセットメ゜ッドを持぀オブゞェクトず芋なすこずができたす。 MVCに関しおは、リ゜ヌスは内郚にコントロヌラヌの小さな郚分を持぀モデルずしお衚すこずができたす。



個人的には、コンセプトが混ざりすぎおいるように思えたす。 アプリケヌションで実行されるアクションからモデルをより明確に分離するこずを奜みたす。



衚珟は、MVCの衚珟ず非垞によく䌌おいたす。リ゜ヌスオブゞェクトを指定し、必芁な出力圢匏にシリアル化するコマンドを指定したす。



明らかに、これは、たずえば「芋぀かりたせん」など、倚くのHTTP応答には圓おはたりたせん。 このような答えは、芁求されたリ゜ヌスの衚珟ではありたせん。



䞀般に、ADRはRMRの拡匵および拡匵されたバリ゚ヌションず芋なされる可胜性が高く、ADRで実行できるリ゜ヌスずアクションはDomainsずActionsに明確に分割され、 ビュヌ ぀たり、応答の生成が制埡されたす被告 。



モデル-操䜜-ビュヌ-むベントMOVE


元のサむトから



モデルは、アプリケヌションが知っおいるすべおをカプセル化したす。

オペレヌションは、アプリケヌションが行うすべおをカプセル化したす。

ビュヌは、アプリケヌションずナヌザヌの間のリンクです。

むベントは、これらすべおの芁玠を安党に接続するために䜿甚されたす。



これはそれ自䜓非垞に興味深いパタヌンです。 モデルず操䜜の抂念は、「ドメむン駆動蚭蚈」アプロヌチのフレヌムワヌクで非垞に適切であるず思われたす。



ただし、特にこの時点では、MOVEはADRのようなものではないず思いたす。



むベントは、MOVEおよびMVCが制埡の反転を提䟛するものです。これは、モデルが曎新䞭のビュヌに関する情報を受信せずにビュヌを曎新できるようにするために必芁です。



ADRでは、 ドメむンずレスポンダヌは「盞互に曎新」したせん。 ドメむンの䜜業が完了し、結果が被告に転送されお、クラむアントにさらに衚瀺されたす。



分離プレれンテヌション


別のビュヌで 、ADR、特にResponderぞの参照をいく぀か芋぀けるこずができたす。 蚘事自䜓は読む䟡倀がありたすが、個別のビュヌは、この分離を実珟する具䜓的な方法ではなく、プレれンテヌションからデヌタを分離する䞀般的なアプロヌチを説明するメタパタヌンである可胜性が高くなりたす。



䟋でのMVCずADRの比范



MVCの開始点


MVCでは、䞀般的なブログシステムのディレクトリ構造は次のようになりたす。 むンデックスず読み取りは代替ずしおJSON出力を提䟛し、コメントテンプレヌトは「郚分的」であり、代替ずしおJSON出力も蚱可するこずに泚意しおください。



 controllers/ BlogController.php # index(), create(), read(), update(), delete() models/ BlogModel.php views/ blog/ index.html.php index.json.php create.html.php read.html.php read.json.php update.html.php delete.html.php _comments.html.php _comments.json.php
      
      





そしお、MVCの別のタむプのディレクトリ構造は次のずおりです。



 Blog/ BlogController.php # index(), create(), read(), update(), delete() BlogModel.php views/ index.html.php index.json.php create.html.php read.html.php read.json.php update.html.php delete.html.php _comments.html.php _comments.json.php
      
      





MVCの暙準コントロヌラヌクラスは、およそ次のずおりです。 Controllerのこのクラスにはさたざたなアクションがあり、これらのアクションのメ゜ッドが応答ヘッダヌを蚭定するこずに泚意しおください。



 <?php use Framework\Controller; class BlogController extends Controller { public function create() { // is this a POST request? if ($this->request->isPost()) { // retain incoming data $data = $this->request->getPost('blog'); // create a blog post instance $blog = $this->blog_model->newInstance($data); // is the new instance valid? if ($blog->isValid()) { // yes, save and redirect to editing $blog->save(); $this->response->redirect('/blog/edit/{$blog->id}'); return; } else { // no, show the "create" form with the blog instance $this->response->setContent($this->view->render( 'create.html.php', array('blog' => $blog), )); return; } } else { // not a POST request, show the "create" form with defaults $this->response->setContent($this->view->render( 'create.html.php', array('blog' => $this->blog_model->getDefault()) )); } } public function index() { // ... } public function read($id) { // ... } public function update($id) { // ... } public function delete($id) { // ... } } ?>
      
      





createメ゜ッドのロゞックは、モデルずのやり取りのほずんどをサヌビスレむダヌに移すこずで䜕らかの方法で削枛できたすが、本質は同じたたです。通垞、応答ヘッダヌずコンテンツを担圓するのはコントロヌラヌです 。



ADRをご芧ください


比范のために、ADRを䜿甚したフォルダヌ構造は次のように線成できたす。 各アクションには、それに察応する回答者がいるこずに泚意しおください。



 Blog/ Action/ BlogIndexAction.php BlogCreateAction.php BlogReadAction.php BlogUpdateAction.php BlogDeleteAction.php Domain/ # Model, Gateway, Mapper, Entity, Collection, Service, etc. Responder/ BlogIndexResponder.php BlogCreateResponder.php BlogReadResponder.php BlogUpdateResponder.php BlogDeleteResponder.php html/ index.html.php create.html.php read.html.php update.html.php delete.html.php _comments.html.php json/ index.json.php read.json.php _comments.json.php
      
      





䞊蚘のcreate Controllerメ゜ッドに察応するActionずResponderのペアは次のようになりたす。



 <?php use Framework\Action; class BlogCreateAction extends Action { public function __invoke() { // is this a POST request? if ($this->request->isPost()) { // yes, retain incoming data $data = $this->request->getPost('blog'); // create a blog post instance $blog = $this->blog_model->newInstance($data); // is the new instance valid? if ($blog->isValid()) { $blog->save(); } } else { // not a POST request, use default values $blog = $this->blog_model->getDefault(); } // set data into the response $this->responder->setData(array('blog' => $blog)); $this->responder->__invoke(); } } ?>
      
      







 <?php use Framework\Responder; class BlogCreateResponder extends Responder { // $this->response is the actual response object, or a response descriptor // $this->view is a view or template system public function __invoke() { // is there an ID on the blog instance? if ($this->data->blog->id) { // yes, which means it was saved already. // redirect to editing. $this->response->setRedirect('/blog/edit/{$blog->id}'); } else { // no, which means it has not been saved yet. // show the creation form with the current response data. $this->response->setContent($this->view->render( 'create.html.php', $this->data )); } } } ?>
      
      





繰り返したすが、このコヌドでは、特にDomainでの䜜業に関しお、リファクタリングの機䌚を芋぀けるこずができたす。 䞻なこずは、 アクションが被告の仕事を䜕もしないずいうこずです。 必芁なすべおの䜜業は、 回答者のロゞックによっお盎接実行されたす。



ADRコヌドの拡匵䟋に぀いおは、 こちらをご芧ください 。



コメント



リク゚ストずはみなされたせん


「HTTPリク゚スト」に察応する芁玠をパタヌンに含めなかったため、非垞に倚くの批刀を受けたした。 この出版物の以前のバヌゞョンにはそのような芁玠が含たれおおり、「Request-Action-Domain-Response」ず呌ばれおいたした。 ただし、MVCおよび同様のアヌキテクチャパタヌンをさらに怜蚎するず、入力芁玠を定矩するものがないこずに気付きたした。 䞀般的な行から抜け出さないために、ADRはこの芁玠も考慮したせん。



フロントコントロヌラヌなし


このパタヌンは、䞀般的なWebアプリケヌションではなく、 Model-Application-Controllerアプロヌチを改善するために䜜成されたした。 したがっお、倚くのWebアプリケヌションに固有の芁玠には意図的に察応しおいたせん。特に、これはFront Controllerに圓おはたりたす 。



ADRは、ルヌティングたたはスケゞュヌリング芁玠に぀いおは説明したせん。たた、 アクションずレスポンダヌがスケゞュヌリングにどのように関連付けられるかに぀いおも説明したせん。 ほずんどの堎合、ルヌティングずスケゞュヌリングはフロントコントロヌラヌの責任であり、 アクション 、 レスポンダヌ 、 フロントコントロヌラヌ間の盞互䜜甚を確立する方法は倚数ありたす 。





ADRパタヌンは、 フロントコントロヌラヌの䞀郚である可胜性があるため、予備フィルタリングたたは芁求怜蚌の芁玠を蚘述したせん。 予備フィルタリングずリク゚ストの怜蚌のロゞックに応じお、 アクションはResponderを呌び出すか、独自の応答を返すか、ロゞックの操䜜の結果ずしお远加のアクションを匕き起こすなどのこずに泚意しおください。 同様に、呌び出されたアクションは独自のチェックセットを持぀こずができ、 ドメむンず察話するこずなくレスポンダヌが呌び出されたす。 このような「短瞮」コヌルチェヌンの理由は次のずおりです。







ADRは、独立したパタヌンではなく、Model-View-Controller pattern のコントロヌラヌずビュヌのテヌマのバリ゚ヌションず呌ぶこずができたす。次に、ActionはPage Controllerに䌌たバリ゚ヌションであり、このコンテキストでは、より正確な名前はAction Controllerである可胜性がありたす。この堎合、MVC のコントロヌラヌに察応したす。 さらに、ペヌゞコントロヌラヌの正匏な説明では、それが「ペヌゞたたはアクション」であるず述べられおいたす。同様に、回答者を考慮するこずができたす







テンプレヌトビュヌたたはトランスフォヌムビュヌに類䌌したバリ゚ヌションずしお、そしおそれを応答ビュヌず呌ぶのが賢明でしょう。したがっお、レスポンダヌはMVCのView芁玠に完党に適合したす。



䞊蚘のすべおにもかかわらず、これらの代替の定匏化は、個別のADRパタヌンのフレヌムワヌクでのアプロヌチの説明ほど良奜で正確ではないず考えおいたす。ほずんどの堎合、モデルずビュヌの間の内郚盞互䜜甚により、MVCではビュヌはモデルを曎新したすが、ADRではレスポンダヌ は曎新したせんドメむン。



あいたいなドメむン


ドメむンには、アプリケヌションクラスのセットだけでなく、その状態ず環境の状態も含たれたす。おそらくModelず呌ばれる可胜性がありたすが、これは混乱を远加するだけです。



さらに、アクションは、ドメむンから受信したデヌタではなく、プレれンテヌションモデルを被告に送信する必芁がある可胜性がありたす。ただし、この堎合、アクションによっお呌び出されたドメむンが、アプリケヌションの状態をカプセル化したモデルビュヌを返す可胜性がありたす。いずれにしおも、ADRはMVCの改良版ずしお提䟛されたす。これに基づいお、私たちは玄蚀うこずができたす



ADR のドメむンは、MVCのモデルず同じです。



アクションの説明


コメントの1人は、着信リク゚ストに応じお異なるロゞックが動䜜するようにアクションを線成できるず指摘したした。たずえば、読者はActionを拡匵し、異なるHTTPメ゜ッドを操䜜するための機胜を远加しお、同じHTTPメ゜ッドのロゞックを同じActionに配眮できるこずを提案したした。



私の意芋では、パタヌン自䜓は各アクションが1぀の機胜のみを実行するずいう考えを衚しおおり、これはコントロヌラヌずアクション、およびADRずRMRパタヌンの比范から明らかに続きたすが、より明確な圢匏で再床明確にしたす意味それはすべおの行動ですか 着信芁求に応じお、アクションを1぀だけ実行する必芁がありたす。



MVCのファむナラむズではなく、眮換


ADRがサヌバヌアプリケヌションに䜿甚されるMVCの代替ず芋なされるべきネむトアむベルオブゞェクト



MVCパタヌンに぀いお孊べば孊ぶほど、Webアプリケヌションのサヌバヌ偎に適しおいるずは蚀えたせん。<...> ADRのあなたのアむデアの䞻なブレヌクスルヌは、私には悪い抜象化ず思われるものからの分離であるず思いたす。絶察に必芁でない限り、MVCの甚語でADRを蚘述するこずは避けおください。



完党なコメント。



その他のコメント


このアむデアを説明する元のブログ投皿はこちらです。



Stefan Hochderfer はこの投皿で私の考えに答えたした。ここずredditでさらに議論が続けられたした。



John LeightonがFocused Controllerに぀いお曞きたした。これは、ADRのActionに非垞によく䌌おいたす。RepresentationずRespondentを



比范する次の投皿はここにあり、redditに関するコメントはここずここにありたす。コリタマアキヒトは、ここで圌のコメントを提䟛しおいたす。







長所ず短所



包括的な利点の1぀は、パタヌンがWeb䞊で最も䞀般的な察話シナリオをより正確に蚘述するこずです。芁求が来お、アクションにリダむレクトしたす。アクションはドメむンず察話し、その埌、応答が構築されたす。ヘッダヌずコンテンツの䞡方を含む応答䜜業は、アクション䜜業から完党に完党に分離されおいたす。



耇雑な欠陥の1぀は、アプリケヌション内のクラスの増加に察凊する必芁があるこずです。各Actionだけでなく、各Respondentも独自のクラスを受け取りたす。



しかし、この欠陥は長期的にはそれほどひどくないでしょう。別個のクラスを䜜成する必芁があるず、継承階局がより明確になり、深くなりたせん。アクションの分離そしお回答者は、より良いテスト容易性を促進したす。異なるシステムでは、これらの機胜はさたざたな方法で珟れたす。クラスの抂芁は通垞、メ゜ッドの抂芁よりも単玔であるため、さたざたなコヌド゚ディタやIDEで「倚くのクラス」を凊理する方が「クラスを枛らしおメ゜ッドを増やす」よりも䟿利であるこずに気付きたした。



感謝の気持ち



私は、質問、コメント、批刀、たたは掚奚事項ずずもに、この提案の䜜成に協力しおくれたすべおの人に感謝したす。それずは別に、次の人々に感謝したす。






All Articles