問題タブ [separation-of-concerns]

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.

0 投票する
2 に答える
4674 参照

asp.net-mvc - ViewModel に何を入れるか

そして、あなたはあなたのビューに何を入れますか?

テストを容易にするための特別なモデル バインダーの使用に関するScott Hanselmanの最近のブログを読んで、私は次のことを考えるようになりました。彼がすることはこれです:

現在、ビューにデータを渡すのと同じ方法を使用していますが、Countries プロパティをどのように扱っているかはわかりません。データを渡すためにビューモデル DTO を作成するのと同じように、SelectList で Countries リストをラップすると、ビューのデータが準備されます。一方で、ドロップダウン リストで使用するデータを具体的に操作しているように感じ、ビューがコントローラーからのデータを処理する方法を制限しています。これは、ビューとコントローラーの間の懸念事項の分離に関して少し灰色の領域だと感じており、どちらに進むべきかを実際に決定することはできません。これに関するベストプラクティスはありますか?

PS: 簡単にするために、既定の ASP.NET MVC コンテキストを想定してみましょう。つまり、基本的にはすぐに使用できるプロジェクトです。デフォルトのビュー エンジンとすべてのジャズ。

0 投票する
1 に答える
535 参照

asp.net - asp.netでの関心の分離により、階層が混乱する

管理者がコンテンツ、製品、価格などを管理できるバック オフィス Web サイトを設計しています。各ページ コントローラー (コード ビハインド クラス) が拡張する基本クラスで解決したい 2 つの問題があります。これらは次のとおりです。

  1. ViewState のディスクへの保存、および
  2. ユーザーの検証。

さらに、イベント ハンドラーの設定、フォームへの入力、およびデータの保存に関しては、各ページ コントローラーが同じ設計に従うようにしたいと考えています。ページコントローラーが実装する抽象メソッドを作成することで、この問題を解決したいと思います。

ここで、ViewState ストレージとユーザー検証に対応する基本クラスを作成し、さらにイベント ハンドラーを設定する方法とタイミングを定義し、フォームにデータを入力し、データを永続化するのは面倒です。私は高度な関心の分離が好きで、次の 3 つの基本クラスの作成に惹かれています。

System.Web.UI.Page
|
FileSystemStatePage : System.Web.UI.Page
(ViewState の格納)
|
SecurePage : FileSystemStatePage
(ユーザー検証)
|
PageBase : SecurePage
(abstract、イベント ハンドラーの設定、フォームの入力、保存のメソッドを定義)

現在、私は懸念事項の分離に非常に満足していますが、深いクラス階層には満足していません。ユーザー検証が必要で、ディスク上の ViewState が必要ない場合はどうすればよいですか? そう...

...皆さんは通常、これらの問題をどのように解決していますか?

0 投票する
1 に答える
1341 参照

spring - スクリプトと EL を介して jBPM と Spring を統合する方法

私は次のテクノロジースタックを使用しています/期待しています:

  • JSF
  • 継ぎ目
  • jBPM

もちろん、私は Seam が Spring Bean に直接アクセスできるようにしたいと考えています。jBPM に移り、Spring Bean にアクセスしてアクションを実行し、意思決定を行う概念実証プロセス定義を開発したいと思います。

問題の分離を促進し、クラス パスで Seam なしでプロセスを実行できるようにするために、すべての Seam 管理コンポーネントへのアクセスを許可しないソリューションが必要です。

Seam が特注の EL リゾルバを使用していることは知っていますが、それ以外はどこから始めればよいのでしょうか?

0 投票する
3 に答える
3979 参照

javascript - 静的HTMLを提供し、AJAX / JSONを使用してコンテンツを生成する利点は何ですか?

http://blog.urbantastic.com/post/81336210/tech-tuesday-the-fiddly-bits

UrbantasticのHeathは、彼のHTML生成システムについて次のように書いています。

UrbantasticのすべてのHTMLは完全に静的です。すべての動的データは、AJAXを介してJSON形式で送信され、Javascriptを使用してHTMLと結合されます。言い換えると、UrbantasticのサーバーソフトウェアはJSONを排他的に生成および消費します。HTML、CSS、Javascript、および画像はすべて、異なるサービス(バニラNginxサーバー)を介して送信されます。

プレゼンテーションとデータを物理的に分離しているので、これは興味深いモデルだと思います。私は建築の専門家ではありませんが、効率と安定性が飛躍的に向上するようです。

ただし、次のことが私に関係しています。


  • [主観的]Clojureは非常に強力です。Javascriptはそうではありません。別の目標のために作成された言語ですべてのコンテンツ生成を作成すると、多少の苦痛が生じます(CSSでJavascriptタイプのコードを作成することを想像してください)。彼がJavascriptを生成するためのマクロシステムを持っていない限り、HeathはおそらくJavaScriptとClojureを絶えず切り替えています。彼はまたたくさんのJSコードを持っているでしょう。おそらくClojureよりもはるかに多いでしょう。これは、パワー、迅速な開発、簡潔さ、そしてLISPベースの言語に切り替えるときに私たちが見ているすべての点で良くないかもしれません。

  • [パフォーマンス]これについてはよくわかりませんが、ユーザーのマシンですべてをレンダリングするのが遅れる可能性があります。

  • 【アクセシビリティ】JSを無効にしている場合、サイトは一切ご利用いただけません。

  • [アクセシビリティ#2] JavaScriptでいっぱいになる動的データの多くは、クロスブラウザの問題を引き起こすと思います。

誰かコメントできますか?このタイプのアーキテクチャについてのあなたの意見を読んでみたいと思います。

参照:

  1. HNに関するディスカッションへのリンク。
  2. / r/programmingに関するディスカッションへのリンク。
0 投票する
3 に答える
3262 参照

linq-to-sql - Linq to SQL DTO および複合オブジェクト

LINQ オブジェクトを LINQ データ プロバイダーに保持し、IQueryable を返してフィルタリングなどを可能にするために、他の人に似たアプローチを使用しています。他の子オブジェクトで構成される結合テーブル オブジェクト

coreDB.Positions は私の Linq ポジション オブジェクトであり、ユーザー、OrgUnit、およびロールで構成される DTO ポジションを返しています (基になるテーブルは、UserID、RoleID、および OrgUnitID を持つ結合テーブルです)。

私が抱えている問題は、Iqueryable にフィルターを追加しようとすると、DTO.User オブジェクトに使用できる変換がないという SQL エラーが発生することです。

私のGoogleの結果はすべて、生成されたLINQオブジェクトを直接操作している人々のものであるように見えるため、これを解決する方法について完全に途方に暮れています

これを機能させる方法について何か考えがありますか、それともここで何か完全に間違っていますか?

ありがとう

0 投票する
3 に答える
1455 参照

data-access-layer - ビジネスオブジェクトからのデータアクセス層の抽象化

データアクセスコードをビジネスオブジェクトから切り離すことは新しいことではありませんが、私は常に何かを達成するための「最良の方法」を探しています。

私は次のクラスを持っています:

オレンジ-これは私のビジネスオブジェクトです。

OrangeList-これはオレンジのリストです。

ユーザーは、OrangeList.Fetch(someCriteria)を呼び出して、データストアからOrangeオブジェクトをフェッチします。したがって、OrangeListにはデータアクセス層への参照が必要です。つまり、プロパティはIDataProviderMyDataProviderです。

これは私にとってはうまくいきますが、問題は、単一のOrangeを単独でフェッチできないことです。常にOrangeListを経由する必要があります。

そのいずれか、またはOrangeとOrangeListの両方は、DataProviderを保持するいくつかの共通オブジェクトから派生する必要があります。

これは問題ですか、それとも私のアプローチはそもそもマークから外れていますか?

ヒント/ポインタはありがたいです、ありがとう。

編集:以下の議論に照らして、私はリポジトリパターンをチェックアウトしました。

ただし、私のプロジェクトでは、リポジトリをDALからさらに分離することをお勧めします。

SO ....リポジトリは、私がオレンジを取得し、オレンジを保存する方法ですが、それでも方法がわかりません。私はそれをIDataProviderに委任します。これは、図にリストされているものの数である可能性があります。

明確にするために-オレンジはそれ自体をフェッチ/更新する方法を知りませんよね?それは純粋なビジネスオブジェクトです-そしてそれがポイントですか?

代替テキストhttp://img22.imageshack.us/img22/2460/repositorya.jpg

ご参考までに、私の「LegacyDataProvider」は、ファイルベースのデータベース(FoxPro、eek)にアクセスするOLDシステムをサポートすることですが、これでこれをまとめて、新しいコードから腕の長さに保つことができます。

.NETアセンブリの構築に関しては、循環参照を防ぐために、Repository.DLL [OrangeRepo]、DataProviderInterface.DLL [IDataProvider]、およびBusinessObjects.dll[Orange]があるように見えます。すべて良いですか?

その時、私はリポジトリのアイデアを思いついたのですか?

0 投票する
1 に答える
253 参照

linq-to-sql - ビジネス ロジック オブジェクトは、その LINQ-to-SQL データ オブジェクトを認識している必要がありますか?

私はいくつかの同様の質問を見てきましたが、私に直接当てはまるものは見当たりませんでしたので、これが重複している場合はご容赦ください.

懸念事項を分離するために、ロジックを使用してビジネス オブジェクトを .dbml ファイルの LINQ to SQL データ オブジェクトにマップしようとしています (これはかなり新しいことです)。ただし、私のビジネス オブジェクトは、対応する LINQ2SQL オブジェクトについて知る必要があるように見えます。xml マッピング ファイルを使用して POCO を使用しようとすることに関するこの記事を読みました。追加のテーブルを作成する必要がある対多の関係。

ビジネス オブジェクトを使用するコードがデータベースについて何も知る必要がないように、ビジネス ロジックでデータ アクセスをかなりうまくカプセル化できます。ビジネス層オブジェクトを変更するか、別のデータ プロバイダー用に新しいオブジェクト (同じインターフェイスを実装する) を作成しない限り、DAL を交換することはできませんでした。

これらのレイヤーを分離するにはどうすればよいですか?

0 投票する
1 に答える
580 参照

asp.net-mvc - ドメイン駆動設計のコンテキストにおける認証と認可に関する情報はどこで入手できますか?

私はDDD(ドメイン駆動設計)の方法で物事をやろうとしています。そして、男の子は私が苦労しますか。私が読んだすべての本で、認証は問題ではなく、言及されていません!

ユーザーの登録とログイン、salted パスワードの作成などを担当する独自の認証およびメンバーシップ サービスを作成しました。.NET のメンバーシップ プロバイダーは使用しませんが、フォーム認証に依存しています。

Username、E-Mail、PasswordHash、ApprovalStatus などを保持する User モデルを実装しました。

ここで、ドメイン モデルの残りの部分はユーザーに関係するべきではないと思います。Person とその関連データをモデル化するために使用されるクラス Person があります。そのため、ユーザーおよび非ユーザーからの個人データをモデル化するために使用できます。Company タイプのオブジェクトは、Users ではなく Persons と連携します。また、アクティビティはユーザーではなく人に割り当てられます。

質問は、Person モデルを User モデルに関連付けるにはどうすればよいですか? 2 つのモデルのいずれかでお互いを参照する必要はありません。PersonUser というリレーションシップ モデルを作成し、現在認証されているユーザーの人物オブジェクトを取得する追加のサービスを作成する必要がありますか?

0 投票する
4 に答える
2000 参照

asp.net-mvc - Asp.Net MVC アクション - 懸念の分離/単一責任の原則

コンピュータ サイエンスでは、各メソッドは 1 つのことだけを行うべきだと教えられてきました。グッドプラクティスの例として、次のような MVC アクションが見られることに少し混乱しています。

基本的に、このコードは多くの機能を提供します。

  1. アクションへのアクセス方法を定義します - 投稿のみ
  2. アクションにアクセスできるユーザーを定義します - 承認
  3. 永続化メカニズムにアクセスします - dinnerRepository
  4. 状態情報にアクセスします - (User.Identity.Name)
  5. NameValueCollection を厳密に型指定されたオブジェクトに変換します - UpdateModel()
  6. 3 つの可能な ActionResults とそれぞれのコンテンツを指定します - InvalidOwner/Details/Edit ビュー

私には、これは 1 つのメソッドに対する責任が多すぎるように思えます。また、非常に単純なアクションでもあります。つまり、次のような一般的なシナリオは扱いません。

  1. ビジネス ルールの確認 - 「ユーザー入力を信頼しない」
  2. ナビゲーション パス - 保存が成功すると、常に「詳細」に戻ります
  3. さまざまな戻り値の型 - 誰かがグリッドから「編集」を呼び出し、JsonResult が必要ですか?
  4. エラー処理の改善 - GetDinner(id) 中にデータベースにアクセスできない場合の YSOD
  5. 追加のビュー データの作成 - ドロップ ダウン リストの SelectLists

この単一のメソッド、つまり FormCollection/UserIdentity/Authorization Provider/Repository などのモック/偽造に必要なテストの量については言及しません。

私の質問は、コントローラーのアクションに多くのものを詰め込まないようにするにはどうすればよいかということです。

私は「意見」、特に「サンダードーム原則」が素晴らしい概念だと思いがちです。私は、 FubuMVCの構築に携わっている人たちとその背後にある理由に大きな敬意を払っていますが、今すぐ使用できるものが必要です。

編集 - まあ、私はこのようなものを求めていたようです - Opinionated Controller。MVC Preview 5 用であるため、さらに調べる必要があるため、自分で更新する必要があるかもしれません。