問題タブ [dci]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails の RESTful DCI コンテキスト
私が最初にデータ、コンテキスト、インタラクション(DCI)について学んだのは、このブログ投稿でした。この概念に魅了された私は、次の Rails アプリケーションに組み込むことにしました。DCI は MVC と連携して動作するため、API を同時に RESTful にすることはそれほど難しくないと考えました。そこで、RESTful リソースを作成し、Report
さまざまなコンテキストで拡張しました。/app/contexts/
Rails でコンテキストを実装する方法は、コントローラー アクションを拡張するモジュール用のディレクトリ を作成することでした。だから私のようにreports_controller.rb
見える:
そしてapplication_controller.rb
、コンテキストを次のように設定しますbefore_filter
。
コントローラー コンテキストに加えて、拡張current_user
していることに注意してください。Role
仕組みは次のとおりです。
- ユーザーがログインします。
- ユーザーの役割は
RegisteredUser
です。 RegisteredUser
のデフォルトのコンテキストはSearch
(で定義されている/app/roles/registered_user.rb
) です。- コンテキスト内
Search
では、ユーザーは公開されたレポートのみを表示できます。 - ユーザーが「新しいレポートの作成」ボタンを押すと、コンテキストが変更され、のセッション
Submission
に保存されます。current_user
- 次に、ユーザーは複数ステップのフォームからレポートを送信します。
- ユーザーがフォームをステップ実行してレポートを保存するたびに、
/app/contexts/submission.rb
コンテキストがアクションを処理します。
その他のいくつかのコンテキスト (レビュー、編集など) と役割 (共著者、編集者など) があります。
これまでのところ、このアプローチはほとんどの場合うまく機能しています。しかし、欠点があります。ユーザーが複数のブラウザー ウィンドウを開き、そのうちの 1 つのコンテキストを変更すると、他のすべてのウィンドウが間違ったコンテキストになります。これは、ユーザーがマルチステップ フォームの途中でSearch
コンテキスト内のウィンドウを開く場合に問題になる可能性があります。彼がフォームに戻って「次へ」をクリックすると、コントローラーはSearch
コンテキストではなくコンテキストによって定義されたアクションを実行しSubmission
ます。
私が考えることができるこれを回避する2つの可能な方法があります:
Report
リソースをコンテキスト名で名前空間化します。したがって、ユーザーは/search/reports
やなどの URL にアクセスします/submission/reports/1
。これは私には RESTful ではないように思われるので、URL をできるだけきれいに保ちたいと思います。- コンテキスト名を非表示フィールドに入れます。この方法では、開発者は隠しフィールドをサイトのすべてのフォームに配置することを覚えておく必要があり、GET 要求では機能しません。
この問題を回避する他の方法、またはより良い全体的な実装はありますか?
このプロジェクトのことは知っていますが、私たちのニーズにはあまりにも限定的です。
scala - コンテキストに関連するオブジェクトのみが表示されるように、Scala はオブジェクト グラフを制約できますか?
完全なオブジェクト グラフのコンテキスト関連サブグラフを簡潔に指定するために Scala の型システムを使用する方法はありますか?
DCI は、多くの場合、かなり複雑なオブジェクト グラフを使用しているが、どのユース ケースでも、サブグラフのみを操作したい場合が多いと主張しています。と を持つ がFoo
ありBar
ますBat
が、ユースケース 1 の場合は のみを気Bar
にし、ユースケース 2 の場合はのみを気にしBat
ます。
たとえば、この構造があり、Role1 ユースケース requiresFoo->Bar->Baz->Bin
と Role2 ユースケース requiresがあるとしFoo->Bat->Baz->Buz
ます。
特性を使用して、単一のクラスでアクセスを制限する方法を簡単に確認できます。
ただし、ユースケースに関連するすべてのオブジェクトに対してこのパターンを繰り返す必要があります。(たとえば、BazInRole1
to accessbin
とBazInRole2
to access が必要ですbiz
)
私の質問は、これらの間違いやすい、名前空間が密集している特性をすべて記述することを回避する方法があるかどうかです。たとえば、次のようなコード (コンパイルされない) を想像できます。
Scala の型システムはこのようなことを行うのに十分な表現力があるようですが、私にはわかりません。
ruby-on-rails - DCI とは何ですか? Rails にどのように適合しますか?
Rails アプリケーションのモデルを設計およびコーディングするためのさまざまなアプローチについて同僚と最近議論したことで、Railsのコンテキストで DCI に出会いました。
ただし、このサンプルアプリケーションを調べた後でも、その概念全体に頭を悩ませているようには見えません。
現在、 Rails アプリを作成するときは、多かれ少なかれ「本に従って」いる傾向があります。
そこでいくつかお聞きしたいのですが…
- DCI とは何ですか? また、プレーンな古い MVC (および Rails のバニラ ActiveRecord) よりも MVC と一緒に実装した場合の利点は何ですか?
- どうすれば Rails で実装できるのでしょうか (つまり、すべてのモジュールはどうなっているのですか) ?
編集
RoR のコンテキストで私の質問をさらに拡張したいと思います。Rails のモデルとコントローラーの間の別のレベルの抽象化が推奨されていますか? さまざまな規模のアプリケーションでどの程度普及していますか?
javascript - モデルデータと動作をどこに置くか?[tl; 博士; サービスの利用]
私は最新のプロジェクトでAngularJSを使用しています。ドキュメントとチュートリアルでは、すべてのモデルデータがコントローラースコープに配置されます。私は、それがコントローラーで利用可能であり、したがって対応するビュー内にある必要があることを理解しています。
しかし、私はモデルが実際にそこに実装されるべきだとは思いません。たとえば、複雑でプライベート属性がある場合があります。さらに、別のコンテキスト/アプリで再利用したい場合があります。すべてをコントローラーに入れると、MVCパターンが完全に壊れます。
同じことがどのモデルの振る舞いにも当てはまります。DCIアーキテクチャを使用し、動作をデータモデルから分離する場合、動作を保持するために追加のオブジェクトを導入する必要があります。これは、役割とコンテキストを導入することによって行われます。
DCI == D ata C ollaboration Interaction
もちろん、モデルのデータと動作は、プレーンなjavascriptオブジェクトまたは任意の「クラス」パターンを使用して実装できます。しかし、それを行うためのAngularJSの方法は何でしょうか?サービスを使用していますか?
したがって、この質問に帰着します:
AngularJSのベストプラクティスに従って、コントローラーから切り離されたモデルをどのように実装しますか?
ruby - DCI、ロールはデータオブジェクトにプロパティを追加する必要がありますか?
RubyでDCIをコーディングする正しい方法に従って、DCIをいじってみました。自分のロールでデータオブジェクトにプロパティを追加したいと思っています。
たとえば、ユーザーオブジェクトがある場合。
ユーザーは顧客の役割を果たすことができます。
これを機能させるには、カートメソッドを追加する必要があります。ショッピングカートは本当にユーザーオブジェクトに属していますか?役割は、必要に応じてカートをデータオブジェクトに追加する必要があるように感じます。
java - Java での DCI の例
DCIとは何か、またDCIをどのように使用すべきかをよりよく理解するために、Javaでいくつかの例を探しています。
ここの C++ で素晴らしい DCI の例を見つけましたhttp://fullloo.info/Examples/C++Examples/Account1/
DCI アーキテクチャに精通していない場合は、http://www.artima.com/articles/dci_vision.html でそれについて読むか、 http: //www.tele-task.de/archive/video/flash/ でいくつかの紹介をご覧ください。 16130/最後のリンクは OO の弱点に関するものです。
おまけの質問: DCI は本当に次のパラダイム シフトですか?
javascript - Data-Context-Interaction (DCI) と javascript でのイベント プログラミング
最近、Trygve Reenskaugによる DCI に関する次のプレゼンテーションを見ました 。うーん、ソフトウェアのさまざまなコンポーネント間の相互作用をコードで見ることは魅力的なアイデアです。
JavaScript で DCI の例を見つけようとしましたが、うまくいきませんでした。それから私は疑問に思い始めました。DCI パターンは、イベント化されたプログラミング パターンとは対照的ではありませんか?
イベント化されたプログラミングは、javascript でトレンディになっています。これは、デカップリングが可能であり、従来の継承の概念が js にネイティブではないためだと思います。イベント プログラミングの利点は理解できたと思いますが、イベント メッセージに従う必要がある場合、デバッグが非常に難しいことにも気付きました。
両者の概念は相反するというのが正しいでしょうか。それとも私はそれを間違えましたか?私が見逃した js での DCI の実装例はありますか? コンセプトを掘り下げるには何を見ればいいですか?
ruby-on-rails - DCI 設計に従う場合、どこに検証を配置しますか?
新しい Rails アプリケーションの動作を構築するために DCI に従っていますが、バリデーションをどこに置くべきかについて疑問があります。
従来、ActiveRecord モデルを使用してデータを管理する場合、バリデーションは AR から継承する特定のクラスで定義され、データ レイヤーの一部として適切に適合するように見えます。
ただし、私の目には、特定のロールの下でのみ発生する特定の検証を行うことは理にかなっています。オブジェクトがそのコンテキストにある場合にのみチェックし、他のすべての場合は無視する必要があります。これは基本的に、これらの検証を特定の役割で定義する必要があり、オブジェクトが意味のあるコンテキストで使用されている場合は、それらの役割モジュールでオブジェクトを拡張する必要があることを意味します。
これらの検証をロールに保持することは良い考えだと思いますか? もしそうなら、オブジェクトと同じクラスの他のインスタンスを汚染することなく、それらをどのように宣言しますか? ActiveRecord バリデーションを使用したい場合、それらはクラス レベルで宣言されているため、それらをオブジェクトに個別にアタッチすることはできず、ロール モジュールで "validate" インスタンス メソッドの再宣言を使用する必要があります (エラーをオブジェクトのエラー配列に直接)、または同様の手法を使用します。
model-view-controller - Web アプリケーションの DCI コンテキスト
DCI コンテキストを Web アプリケーションでいつどのように使用できるかを考えています。私はこの高レベルのユースケースを検討しています:
- ユーザーは都市、到着、出発、部屋タイプを入力し、「検索」をクリックします。
- システムはホテルのリストを表示します
- ユーザーがホテルのロゴをクリックして詳細を読む
- システムがホテルの詳細を表示
- ユーザーが「今すぐ予約」をクリック
- システムは支払いフォームを表示します
- ユーザーは、顧客の詳細、請求情報を入力し、[送信] をクリックします。
- システムは請求情報を検証し、予約確認を表示します。
これは非常に高レベルであり、確実に分解する必要があります。最初のステップ (1-2、3-4、5-6) は、いくつかの検索および REST アーキテクチャで処理できる単純なリソース要求のように感じます。だから私の最初の質問は、そのような場合に DCI コンテキストが必要なのか、単純な MVC で十分ではないのかということです。もちろん、「ホテル」データ エンティティが役割を果たすことはできますが、特にそれが唯一のアクターである場合は、実現可能だと思いますか?
最後のステップは、DCI が非常に役立つ可能性があることを示しています。今のところ、手続き的な方法で行う作業があります。(顧客の作成、ホテルへの予約の追加、確認メールの送信...)
これについてどう思いますか?私は正しい軌道に乗っていますか?
asp.net-mvc - DCI コンテキストでのエラー処理?
ASP.NET MVC フレームワークを使用して Context をインスタンス化し、そこで何か問題が発生した場合、例外をスローして Controller に処理させても問題ありませんか?
そして、ネストされたコンテキストの場合、外側のコンテキストは内側のコンテキストによってスローされた例外をキャッチできますか? 文脈がお互いを認識できないから考えているのですが、逆にエラーはエラー…ですよね?