問題タブ [coupling]
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.
asp.net-mvc-3 - ASP.NET MVC3では、コンポーネント間の結合を作成せずに、関連するDBテーブルに属するデータを取得する方法は?
C# と Razor で ASP.NET MVC3 を使用しています。アプリケーションのアーキテクチャは、データ アクセス レイヤー (EF クラス + リポジトリ)、サービス レイヤー、コントローラー、ビューモデル、ビューに分かれています。
2 つの EF クラスProducts
(key ProdId
) とProductCategories
(key ProductCategoryId
) があります。
これらは、 in class as external keyおよびin classで1対多の関係を介して関連付けられました。ProdCatId
Products
ProductCategoryId
ProductCategories
もちろん、 classから へのナビゲーション プロパティ もあります。hasCategory
Products
ProductCategories
私はリポジトリクラスにメソッドを持っています:
ここで、対応するカテゴリのProductCategoryName
(ではない) を含むすべての製品をビューに表示したいと考えています。ProdCatId
私が使用するリポジトリでこの情報にアクセスするには (productDB は EF クラスです):
ビューでこの情報を取得するには、このコードをService Layerから使用するか、さらに悪いことにViewModelから使用する必要があります。ただし、この方法では、分離したいコンポーネント (サービス レイヤーと EF、または ViewModel と EF) 間の結合を作成します。
代わりに、この値をリポジトリ (メソッドstring GetProductCategory(int ProdId)
) からサービス レイヤーに取得すると、 と一緒にGetAllProducts().ToList()
2 つのオブジェクトが作成されます。
1) あList<Products>
2) あstring
これらの値を Controller に渡して ViewModel にラップするにはどうすればよいですか? ProductInfo
このデータをラップするクラスをサービス層に作成しますか? このソリューションは、 Controller、ViewModel、およびクラスProductInfoの間の結合を作成します。
カップリングを作成しないために行うべき正しいことは何ですか?
asp.net-mvc-3 - ASP.NET MVC3アプリケーションでは、ViewModelはサービスレイヤーまたはコントローラーによって埋められますか?
C#とRazorにASP.NETMVC3があります。アプリケーションのアーキテクチャは、データアクセス層(EFクラス+リポジトリ)、サービス層、コントローラー、ViewModels、およびViewに分かれています。
My ViewModelは、ビューFill
に表示するデータコレクションをパラメーターとして受け入れるメソッドを公開します。コンポーネント間の結合がないようにするには、メソッドをサービスレイヤーまたはコントローラーから呼び出す必要がありますか?Fill
c# - Service Layer から EF クラス プロパティにアクセスする方法
C# と Razor で ASP.NET MVC3 を使用しています。アプリケーションのアーキテクチャは、データ アクセス レイヤー (EF クラス + リポジトリ)、サービス レイヤー、コントローラー、ビューモデル、ビューに分かれています。
Service Layer から、次の署名を持つRepository によって公開されProductServices
たメソッドを呼び出します。GetAllProducts
ProductRepository
したがって、ProductServices
私は呼び出します(productRepository
はのインスタンスですProductRepository
):
変数に値を設定しますproducts
。ProductName
から製品の名前にアクセスしたいと思いますproductServices
。この命令を使用する場合:
ServiceLayerとEFの間の結合を作成しています (リポジトリをバイパスします)。つまりProductRepository
、署名付きのメソッドに追加する必要があります。
しかし、私のアプリケーションでは他の製品情報が必要なので、クラスproductRepository
のフィールドごとに 1 つのメソッドを作成する必要がありますか? Product
私の推論は正しいですか?ありがとう
.net - サブクラス結合と .NET での例
私はちょうど次のような記事を読んでいます。
サブクラス結合。基本型 (通常はクラス) にそれを拡張する多数の派生型がある場合、理想的には、他の型は基本型のみを認識している必要があります。すべてのサブタイプが同じパブリック インターフェイスを共有している場合 (パブリック メンバーは基本タイプから継承され、各サブクラスで異なる動作のために上書きされます)、外部の「クライアント」タイプはそれらを基本クラスであるかのようにすべて同じように扱うことができます。そうでない場合、クライアント タイプが存在するサブタイプの詳細を知っている場合、これは問題のポリモーフィック構造へのサブクラス結合です。
具体的には、最後の行は、「クライアント タイプが、存在するサブタイプの詳細を知っている場合...」と述べています。.NET では、 を使用すると、 が返されること、およびプロパティなどのサブクラスに固有のプロパティを変更できることがWebRequest.Create("ftp://...");
わかっています。WebRequest のサブタイプに関する具体的な知識がない限り、これを行うことはできないので、これはサブクラス結合のケースであり、設計が悪いと思います。FtpWebRequest
FtpWebRequest
UseBinary
.NET フレームワークの開発者に代わって、これが悪い設計であると信じるのに苦労しています。代わりに、上記の私の理解が少しずれていると想像してください。私が .NET で提供した例がサブクラス結合の例ではない理由を誰かが説明できますか?
events - JSF2のManagedBeans間のイベント処理メカニズム?
おそらく(クールな)FacesContextを介して、カスタムイベントを送受信できるようにManagedBeanを互いに分離する方法はありますか?! 直接的な依存関係を減らすために、Bean を ManagedProperty として注入したくありません。残念ながら、 @ListenerFor とそのすべての新しい機能は、コンポーネントとレンダラーに対してのみ機能し、完全に間違ったアプローチのようです。
Adobe Flex のイベント メカニズムに精通している人は、私が何を意味し、標準化された Web UI フレームワークに何を期待するかを理解しています。
別のフレームワークを実装する必要なく、JSF 仕様に含まれているエレガントな方法を教えてください。
struts - strutsアクションクラスとビジネスサービスレイヤー
サービス層で行われる「ビジネス検証」の処理について質問があります。以下のコードは、十分な資金があることを検証する典型的な口座送金の例を示しています。送金金額は、定義された制限よりも少なくなっています。
この例では、呼び出し元はActionクラスで定義された例外を処理してキャッチし、対応するActionErrorを使用してエラーメッセージを表示する必要があります。
すべてのビジネス検証に例外を使用することは「必須」ですか?
これに例外を使用しないことにした場合、特定の意味で、ビジネスレイヤー(結合/凝集度に違反する)ルールで対応するActionErrorを定義する必要があります。
サービス層によってActionクラスに伝播するメッセージをどのように処理する必要がありますか?
c# - 初心者に必要な結合を減らす簡単な例
大学を卒業したばかりで、結合を減らす必要があるコードに出くわしています。しかし、私はすべての概念を完全には理解していないので、簡単な例を参考にしてください。まず始めに、name という 1 つのフィールドを持つ person クラスを用意しました。そのクラス内にテキストを連結するメソッドがあります。
これはばかげた例であることはわかっています。ほとんどの人は、このような単純な状況で結合を減らすことを考えることはありませんが、コードと概念を一緒に完全に理解するのに役立つ単純な例だけが必要です.
メイン ウィンドウの背後にあるコードに、テキスト ボックスとボタンを配置しました。ウィンドウが読み込まれると、person x name フィールドの現在の値が表示されます。ボタンがクリックされると、x.PersonAddText メソッドが呼び出されます。現在、この例では結合が 8 で計算されています。ボタン クリック イベントは 3、ウィンドウ ロード イベントは 3 です。
この例を使用して、どちらかまたは両方をこれよりも少なくする方法はありますか?
以下はすべての私のコードです:
私の人物クラス:
私のコードビハインド:
私の単純な XAML:
これを説明するインターネット上のチュートリアルを理解するのに非常に苦労しています。私が見たところ、これを行うには 3 つの方法があります (可能であれば、上記のコードを 3 つすべての例に変換するとよいでしょう)。
- サービスロケーター
- 依存性注入
- 制御の反転 (IoC)
私が読んだ内容を説明する記事は優れていますが、データベース接続文字列で VB と ASP.Net を使用しているため、例は私には関係ありません。これは私が必要としているものとは正反対であり、概念を学びながらコードを翻訳する方法を考えたくないし、それを関連するものに適用する方法についても考えたくありません。例は良いものですが、多すぎます。追加の助けをいただければ幸いです。
編集履歴: スペルを修正しました。私の質問を明確にするために以下を追加しました:
カップリングと凝集の背後にある理論と、一方を減らして他方を増やす必要がある理由を理解しています。しかし、大学で例をコーディングする必要はありませんでした。また、大学ではカバーされていませんが、インターフェイスは理解しています。ただし、結合を減らすためにそれらを使用する方法がわかりません。
上記で参照した記事へのリンクを追加しました。
編集2:これまでのところ、私が得たものは次のとおりです。
メインウィンドウのコードビハインドでこれを使用するにはどうすればよいですか? 交換した方がいいと思います
と
これは正しいですか、もしそうなら、私がしなければならないことは他にありますか。私が尋ねる理由は、Visual Studio によって報告されたコード カップリングの数値が減少していないことをまだ確認していないためです (実際には、メイン ウィンドウのコード ビハインドで 1 増加します)。
java - オブジェクトをメソッドに渡すか、コンポジションを使用して、どのパターンがJavaでより低い結合を持っていますか?
私の質問は次のとおりです。カップリングが低いパターンはどれですか? そして、現実の世界ではどのパターンがより好まれますか?
oop - 高結束力は結合を減らすのにどのように役立ちますか?
メソッドM1
を想定し、M2
強く関連する責任を負う
最初の例:
もしも
• M1
andM2
はクラス内で定義されますA
(したがって、クラスA
は非常にまとまりがあります) 。
•クラスのB
使用A.M1
とクラスのC
使用A.M2
それから
•とクラスA
の両方に結合されているB
C
• の署名を変更する には、M1
でのみ変更が必要ですが、では必要ありB
ません。C
2 番目の例:
もしも
•M1
クラス内で定義されているA1
(したがってB
と結合されているA1
)
•M2
クラスで定義されているA2
(したがって、C
と結合されているA2
)
それから
• の署名を変更するには、M1
でのみ変更が必要ですが、では必要ありB
ません。C
a) 私の理解では、最後の例のクラスは、最初の例のクラスよりも結合されていません! または、何か不足していますか?
b)私が知る限り、最初の例のクラスは、次の場合にのみ2番目の例のクラスよりも疎結合です。
M1
の署名を変更するには、 の署名も変更する必要があると想定していM2
ますが、そう頻繁に起こるとは思いませんか?!または、 と の両方が同じタイプ T1 のデータ
M1
をM2
操作する場合、T1 を T2 に置き換えるには、M1
とM2
?!の両方を変更する必要があります。または、密接に関連する責任があるため、変更する
M1
と変更が必要になるM2
可能性がはるかに高いと仮定すると(直接的または間接的に呼び出さなくても)?!M1
M2
M1
M2
または、密接に関連する責任があるために、一部のクラスが と の両方を必要とする可能性がはるかに高いと仮定すると(そのため、
M1
とを単一のクラスに持つことで結合が減少します)?!M2
M1
M2
M1
M2
c) ( withinとwithinを定義する代わりに) M1
and withinを定義すると結合が減少する理由は他にありますか?M2
A
M1
A1
M2
A2
注 - メンテナンスと再利用が容易なため、凝集性の高いモジュールが必要であることは承知しています。
ありがとうございました