2016-06-23 15 views
3

いくつかの角度スタイルガイドとベストプラクティスのリンクを検索しましたが、この問題に関するメモを見つけることができませんでした。私たちは、コントローラ上の機能を呼び出す要素と通常のウェブページを持っている場合(。私は$スコープを使用していない、注意してください)、WPFでの作業から私の本能がやることだった。Angularでは、「ドメインコマンド」機能(抽象度が低い)またはGUIアクション処理関数(より抽象化)にバインドする必要がありますか?

<button ng-click="myCtrl.save()">Save</button> 

...

...

<button ng-click="myCtrl.onSaveClicked()">Save</button> 

function myController(thingSavingService){ 
    var ctrl = this; 
    // ... 
    ctrl.model.thing = {}; 
    // ... 
    ctrl.saveThing() = function() { 
     thingSavingService.save(ctrl.model.thing); 
    } 
} 

誰かが同じように、おそらく要素固有のハンドラ関数を持つことは良い習慣であることが示唆されました

function myController(thingSavingService){ 
    var ctrl = this; 
    // ... 
    ctrl.model.thing = {}; 
    // ... 
    ctrl.onSaveClicked = function() { 
     saveThing(); 
    } 
    var saveThing = function() { 
     thingSavingService.save(ctrl.model.thing); 
    } 
} 

これらのことをコントローラの機能に直接バインドしているか、「アクションハンドラ」がドメインレベルの機能とは別になるように別のレイヤーを配置する方が良いですか?

つまり、「ドメインコマンド」機能(抽象度が低い)またはGUIアクション処理関数(より抽象化)にバインドする必要があります。

また、これらのニュアンスを探究する記事やベストプラクティスガイドはありますか?

+1

"onSaveClicked"は単に '' saveThing''を呼び出す以外のことをやろうとしていますか?そうでなければ、これには意味がありません。それはとにかく役に立たない。これはjavaのようなコードのようなにおいがします。 – sielakos

+0

は、UIフォーカスフレームワークであり、実際には、サービス内のドメイン機能(通常はAPI呼び出し)を使用して、それらを呼び出す要素に固有のコントローラ機能に向かって設計されています。つまり、この質問は主観的であり、実際にはすべての状況に当てはまる十分な答えを実際に受け取ることはできません。 – Claies

+0

理論的には、onSaveClickedはクリックされた保存ボタンに固有のもので、別のコントロール(たとえば自動保存タイマー)からsaveThingを呼び出す別の関数があるとします。 –

答えて

4

個人的には、John Papaのスタイルガイドは、配置と抽象度のレベルについては、コントローラへの割り当ての下で純粋な機能を持つと述べています。もちろん、読みやすさのためです。あなたの用語あたりとして

function SessionsController() { 
    var vm = this; 

    vm.gotoSession = gotoSession; 
    vm.refresh = refresh; 
    vm.search = search; 
    vm.sessions = []; 
    vm.title = 'Sessions'; 

    //////////// 

    function gotoSession() { 
     /* */ 
    } 

    function refresh() { 
     /* */ 
    } 

    function search() { 
     /* */ 
    } 
} 

https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#style-y033

+0

つまり、ビュー要素をコントローラ上の関数に直接バインドすることは良い方法です。私はいつでも必要な場合にのみ別のレイヤーを書くことができます。 –

0

、角度コントローラのパブリックメソッドは、「アクションハンドラ」として扱うことができ、それらは、ドメインレベルの機能から独立しています。私がドメインレベルの関数を言うとき、私はAngular Services Functions/apisを参照しています。

1

スタイリングについてもっと詳しくです。 sitepointには、この記事StyleGuideがあり、スタイリングガイドについて話しています。

LIFT原則として、

それは、この方法ではありませんので、性能の

function myController(thingSavingService){ 
    var ctrl = this; 
    ctrl.model.thing = {}; 
    ctrl.onSaveClicked = saveThing; 
    var saveThing = function() { 
     thingSavingService.save(ctrl.model.thing); 
    } 
} 

、ではなく、より読みやすくするため、もっと良いです。

関連する問題