タグ付けされた質問 「c#」

C#は、Microsoftが.NETプラットフォームと並行して作成した、マルチパラダイムで管理されたガベージコレクションのオブジェクト指向プログラミング言語です。

3
IEnumerableの「ステートマシン」の検出
私はc#yield returnを使用して可愛すぎるという興味深い記事を読みました IEnumerableが実際の列挙可能なコレクションであるか、またはyieldキーワードで生成されたステートマシンであるかを検出する最良の方法は何なのかと思いました。 たとえば、(記事の)DoubleXValueを次のように変更できます。 private void DoubleXValue(IEnumerable<Point> points) { if(points is List<Point>) foreach (var point in points) point.X *= 2; else throw YouCantDoThatException(); } 質問1)これを行うより良い方法はありますか? 質問2)これは、APIを作成するときに心配する必要があるものですか?
17 c#  api-design 


3
状態パターンは、リスコフ代替原理に違反していますか?
この画像は、ドメイン駆動のデザインとパターンの適用:C#および.NETの例を使用したものです。 これは、a がその存続期間中に異なる状態を持つことができる状態パターンのクラス図ですSalesOrder。異なる状態間では特定の遷移のみが許可されます。 これでOrderStateクラスはabstractクラスになり、そのすべてのメソッドはそのサブクラスに継承されます。Cancelled他の状態への遷移を許可しない最終状態であるサブクラスを考慮する場合override、このクラスのすべてのメソッドで例外をスローする必要があります。 サブクラスは親の振る舞いを変えてはいけないので、今ではそれはリスコフの代用原則に違反していないのですか?抽象クラスをインターフェイスに変更すると、これが修正されますか? これはどのように修正できますか?

5
実行時にビューモデルを作成する際の痛みを軽減する方法
私は長い質問に謝罪します、それは少し暴言として読みますが、そうではないと約束します!私の質問を以下にまとめました MVCの世界では、物事は簡単です。モデルには状態があり、ビューにはモデルが表示され、コントローラーはモデルとのやり取り(基本的に)を行い、コントローラーには状態がありません。作業を行うために、コントローラーはWebサービス、リポジトリー、その他多くに依存しています。コントローラーをインスタンス化するとき、これらの依存関係を提供することに関心があります。アクション(コントローラーのメソッド)を実行するとき、これらの依存関係を使用してモデルを取得または更新するか、他のドメインサービスを呼び出します。一部のユーザーが特定のアイテムの詳細を表示する場合など、コンテキストがある場合、そのアイテムのIDをパラメーターとしてアクションに渡します。コントローラーのどこにも、状態への参照はありません。ここまでは順調ですね。 MVVMと入力します。WPFが大好きで、データバインディングが大好きです。ViewModelsへのデータバインディングをさらに簡単にするフレームワークが大好きです(Caliburn Micro atmを使用)。しかし、この世界では物事はそれほど簡単ではないと感じています。もう一度練習してみましょう。モデルには状態があり、ビューには ViewModel が表示され、ViewModelには(基本的に)モデルとのやり取りがあり、ViewModelには状態があります。するには、(1つ以上のモデルに、多分それ委譲し、すべてのプロパティを、それ手段は、それ自体の状態をあるモデルの1の方法または別の、への参照を持っている必要があります明確にするために)行いますViewModelには、Webサービス、リポジトリ、その他多くの依存関係があります。ViewModelをインスタンス化するとき、それらの依存関係だけでなく状態も指定する必要があります。そして、これは、紳士gentle女の皆さん、私をいらいらさせます。 あなたはインスタンス化する必要があるときProductDetailsViewModelからProductSearchViewModel(そこからあなたが呼び出されるProductSearchWebService順番に返されIEnumerable<ProductDTO>、あなたはこれらの事の1行うことができますか?私と一緒に、まだ、誰も): call new ProductDetailsViewModel(productDTO, _shoppingCartWebService /* dependcy */);、これは悪いです、さらに3つの依存関係を想像してください。これは、ProductSearchViewModelそれらの依存関係も同様に引き受ける必要があることを意味します。また、コンストラクタを変更するのは苦痛です。 call _myInjectedProductDetailsViewModelFactory.Create().Initialize(productDTO);、ファクトリは単なるFuncであり、ほとんどのIoCフレームワークによって簡単に生成されます。Initメソッドは漏れやすい抽象化であるため、これは悪いと思います。また、Initメソッドで設定されているフィールドにreadonlyキーワードを使用することもできません。他にもいくつかの理由があると思います。 call _myInjectedProductDetailsViewModelAbstractFactory.Create(productDTO);So ...これは、このタイプの問題に通常推奨されるパターン(抽象ファクトリー)です。でも、実際に使い始めるまでは、静的型付けへの渇望を満たすため、天才でした。定型コードの量は多すぎると思います(私が使用するとんでもない変数名は別として)。ランタイムパラメーターを必要とする各ViewModelについて、2つの追加ファイル(ファクトリーインターフェースと実装)を取得し、4回の追加時間などの非ランタイム依存関係を入力する必要があります。また、依存関係が変更されるたびに、ファクトリーでも依存関係を変更できます。私はもうDIコンテナさえ使用していないように感じます。(Castle Windsorにはこれに対する何らかの解決策があると思います(それ自体の欠点があるため、間違っている場合は修正してください))。 匿名型または辞書で何かをする。私は静的型付けが好きです。 ええ このように状態と動作を混在させると、MVCにはまったく存在しない問題が発生します。そして、私は現在、この問題に対して本当に適切な解決策がないと感じています。今、私はいくつかのことを観察したいと思います: 人々は実際にMVVMを使用しています。したがって、彼らは上記のすべてを気にしないか、他の素晴らしい解決策を持っています。 WPFを使用したMVVMの詳細な例は見つかりませんでした。たとえば、NDDDサンプルプロジェクトは、DDDの概念を理解するのに非常に役立ちました。誰かがMVVM / WPFの似たような方向性を教えてくれたら、とても気に入っています。 MVVMをすべて間違っているのかもしれませんが、デザインを上下逆にする必要があります。たぶん、私はこの問題を全く抱えるべきではないでしょう。他の人が同じ質問をしているのは知っているので、私だけではないと思います。 要約する ViewModelが状態と動作の両方の統合ポイントであることは、MVVMパターン全体のいくつかの問題の原因であると結論付けるのは正しいですか? 静的に型付けされた方法でViewModelをインスタンス化するための唯一/​​最良の方法は、抽象ファクトリパターンを使用していますか? 詳細なリファレンス実装のようなものはありますか? 状態/動作の両方を備えたViewModelがたくさんあるのは、デザインの匂いですか?
17 c#  design  wpf  mvvm 

1
C#-4.0はオープ​​ンスタンダードですか?
Ecma-334(ISO / IEC 23270:2006)標準は、言語のバージョン2.0に対応しています。 バージョン4.0の仕様はMicrosoftから無料で入手できますが、Microsoftの公開仕様リストにはEcma(バージョン2.0)バージョンのみがリストされています。 では、後のバージョンで追加されたすべての優れた機能(LINQ、ラムダ関数など)はどうでしょうか?それらをコンパイラに実装できますか?
17 c#  legal  standards 

4
依存性注入とシングルトン。それらはまったく異なる2つの概念ですか?
私は同僚のためにシングルトンを介した依存性注入の使用について聞いてきました。互いに置き換えることができる2つの直交パターンであるかどうかはまだわかりませんか?または、DIはシングルトンパターンをテスト可能にする方法ですか? 次のコードスニペットをご覧ください。 IMathFace obj = Singleton.Instance; SingletonConsumer singConsumer = new SingletonConsumer(obj); singConsumer.ConsumerAdd(10,20); SingletonConsumer型のパラメータを受け入れていますIMathFace。内部的にシングルトンクラスにアクセスする代わりにSingletonConsumer、呼び出し元から渡されたシングルトンインスタンスを取得します。これは、依存性注入を介してシングルトンクラスを使用する良い例ですか?

2
抽象例外スーパータイプ
投げることSystem.Exceptionがとても悪いと考えられるなら、そもそもなぜException行わabstractれなかったのですか? そうすれば、以下を呼び出すことはできません。 throw new Exception("Error occurred."); これにより、派生した例外を使用して、発生したエラーに関する詳細を提供することができます。 たとえば、ライブラリのカスタム例外階層を提供する場合、通常、例外の抽象基本クラスを宣言します。 public abstract class CustomExceptionBase : Exception { /* some stuff here */ } そして、より具体的な目的を持ついくつかの派生した例外: public class DerivedCustomException : CustomExceptionBase { /* some more specific stuff here */ } 次に、ライブラリメソッドを呼び出すときに、この汎用try / catchブロックを使用して、ライブラリからのエラーを直接キャッチできます。 try { /* library calls here */ } catch (CustomExceptionBase ex) …

9
JavaはC#に追いつきますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 今日、私はどの言語C#またはJavaを勉強する方が良いかを尋ねる質問を投稿しました。素晴らしい答えがいくつかありました。登場したことの1つは、おそらくJavaが新しい機能を備えたC#の背後にあるということです。私はいくつかのWebリンクを見て、ほとんどがC#に何があり、javaに何がなかったかを指摘しました。 皆さんへの私の質問は、Javaが再びC#に追いつくことでしょうか?そして、あなたが5年後にどこに立つかを推測することになった場合。おそらく今欠けているものがすべてあるでしょうか?Java 7はどうですか?
17 java  c# 

9
統計が内側の方法か外側の方法か
これらのデザインのどれが優れていますか?それぞれの長所と短所は何ですか?どちらを使用しますか?のようなメソッドを処理する方法に関する他の提案を歓迎します。 Draw()が他の描画メソッドが呼び出される唯一の場所であると仮定するのは合理的です。これは、ここに示した3つだけでなく、さらに多くのDraw *メソッドとShow *プロパティに拡張する必要があります。 public void Draw() { if (ShowAxis) { DrawAxis(); } if (ShowLegend) { DrawLegend(); } if (ShowPoints && Points.Count > 0) { DrawPoints(); } } private void DrawAxis() { // Draw things. } private void DrawLegend() { // Draw things. } private void DrawPoints() { // Draw …
17 c# 

4
クラスファイルとインターフェイスファイルを整理するにはどうすればよいですか?
OK ..すべての議論の後、私が扱っている具体的な例をより良く反映するために質問を少し変更しています。 私は2つのクラスModelOneとを持っていますModelTwo。これらのクラスは同様のタイプの機能を実行しますが、互いに無関係です。しかし、私はCommonFunc両方ModelOneで実装されているいくつかのパブリック機能を含む3番目のクラスをModelTwo持っていDRYます。2つのモデルはModelMainクラス内でインスタンス化されます(それ自体はより高いレベルなどでインスタンス化されますが、このレベルで停止しています)。 私が使用しているIoCコンテナはMicrosoft Unityです。私はそれの専門家であるふりはしませんが、インターフェイスのクラスとコンテナをクラスに登録し、具体的なクラスが必要な場合は、特定のインターフェイスに一致するオブジェクトをIoCコンテナに尋ねることです。これは、Unityからインスタンス化するすべてのオブジェクトに対して、一致するインターフェイスが必要であることを意味します。各クラスは異なる(重複しない)機能を実行するため、これは、インターフェイスとクラス1の比率が1:1であることを意味します。しかし、それは私が書くすべてのクラスのためにインターフェースを慎重に書いているという意味ではありません。 したがって、コード的には2になります。 public interface ICommonFunc { } public interface IModelOne { ICommonFunc Common { get; } .. } public interface IModelTwo { ICommonFunc Common { get; } .. } public interface IModelMain { IModelOne One { get; } IModelTwo Two { get; } .. } public …

6
列挙型はコードの匂いではありませんか?
ジレンマ オブジェクト指向の実践に関するベストプラクティスの本をたくさん読んでいますが、読んだ本のほとんどすべてに、enumはコードの匂いだと言う部分がありました。列挙型が有効な場合に説明する部分を見逃したと思います。 そのように、私を探していますガイドラインおよび/またはユースケースの列挙型がありませ有効な構文コードのにおいと、実際に。 ソース: 「警告経験則として、列挙型はコードの匂いであり、多態性クラスにリファクタリングする必要があります。[8]」Seemann、Mark 、. 342 [8] Martin Fowler et al。、Refactoring:Improving the Design of Existing Code(New York:Addison-Wesley、1999)、82。 環境 私のジレンマの原因は取引APIです。このメソッドを介して送信することにより、Tickデータのストリームを提供します。 void TickPrice(TickType tickType, double value) どこ enum TickType { BuyPrice, BuyQuantity, LastPrice, LastQuantity, ... } 変更を壊すことがこのAPIの生き方であるため、このAPIのラッパーを作成しようとしました。ラッパーで最後に受信した各ティックタイプの値を追跡したいので、ダニタイプのディクショナリを使用してそれを行いました。 Dictionary<TickType,double> LastValues 私には、キーとして使用される場合、これは列挙型の適切な使用のように思えました。しかし、私はこのコレクションに基づいて意思決定を行う場所があり、switchステートメントを排除する方法を考えることができないため、工場を使用できますが、その工場にはまだどこかにswitchステートメント。私はただ物事を動かしているように見えましたが、まだ匂いがします。 列挙型のDO N'Tを見つけるのは簡単ですが、DOはそれほど簡単ではありません。人々が自分の専門知識、長所と短所を共有できるなら、私はそれを感謝します。 考え直し 一部の決定とアクションはこれらに基づいておりTickType、enum / switchステートメントを削除する方法を考えることはできないようです。私が考えることができる最もクリーンなソリューションは、ファクトリを使用し、に基づいて実装を返すことTickTypeです。それでも、インターフェイスの実装を返すswitchステートメントがあります。 以下は、間違った列挙型を使用しているのではないかと疑っているサンプルクラスの1つです。 public class ExecutionSimulator { …

1
.NETソリューションのディレクトリ構造
最近、請負業者を訪問し、プロジェクトの構造化の方法論について質問しました。特にディレクトリ構造について言及していることに注意してください。彼は、Microsoftのガイドラインを使用することを提案しました。「Microsoftガイドライン.NETプロジェクトのディレクトリ構造」をGoogleで検索して、何か役立つものを見つけることができると思いましたが、そうではないことが判明しました。現状では、次のようなことをしています。 [Company.System.Feature] |-doc |Sandcastle project |-lib |Nuget packages |-src |-Project1 e.g. web |-Project2 e.g. business logic |-UnittestProject1 |-Specs docフォルダーには、https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builderで説明されているようなSandcastleソリューションが含まれています(絶対パスと相対パスを参照)。したがって、docフォルダーには、生成されたヘルプファイルを含むヘルプフォルダーが含まれます。libフォルダーには、すべてのNugetパッケージが含まれています。 ソリューションの構成方法を推奨するマイクロソフトのガイドラインはありますか?私はここを見ました:https : //stackoverflow.com/questions/789389/project-structure-for-c-sharp-development-effort/789554? noredirect=1 # comment86756309_789554 私が読んだ記事や質問のほとんどは2007年から2009年に作成されたようです。Nugetは2010年に導入されたと思います。Microsoftのガイドラインはありますか?:私は、しかし、これはもう存在していないようです、ツリー外科医と呼ばれるものについて読んhttps://archive.codeplex.com/?p=treesurgeon。 TFSを使用しています。クルーズコントロールとDDDは、それによって違いをもたらします。
16 c#  visual-studio 

6
要件または方法によるユニットテストの分割
最初に、タイトルをおaびします。それを説明する最も簡単な方法は考えられませんでした! ユニットテストを書きたいメソッドがあります。メソッドの実装については説明せず、テストのみを行いたいので、かなり汎用的にしておきます。メソッドは次のとおりです。 public void HandleItem(item a) { CreateNewItem(); UpdateStatusOnPreviousItem(); SetNextRunDate(); } そのため、このクラスにはパブリックメソッドが1つあり、このメソッドがプライベートメソッドを呼び出してロジックを実行します。 それで、ユニットテストを書くとき、私は3つすべてが行われたことをチェックしたいです。それらはすべて同じ実行で呼び出されるため、1つのテストとして実行できると考えました。 public void GivenItem_WhenRun_Thenxxxxx { HandleItem(item); // Assert item has been created // Assert status has been set on the previous item // Assert run date has been set } しかし、3つの別々のテストとして書くこともできると考えました。 public void GivenItem_WhenRun_ThenItemIsCreated() { HandleItem(item); } public …
16 c#  unit-testing 

4
ASP.NETアプリケーションを開発する場合、CQRS / MediatRは価値がありますか?
私は最近CQRS / MediatRを調査しています。しかし、ドリルダウンすればするほど、それが好きではなくなります。おそらく私は何か/すべてを誤解しました。 だから、これをあなたのコントローラーをこれに減らすと主張することから、それは驚くほど始まります public async Task<ActionResult> Edit(Edit.Query query) { var model = await _mediator.SendAsync(query); return View(model); } Thin Controllerのガイドラインに完全に適合します。ただし、非常に重要な詳細-エラー処理は省略します。 Login新しいMVCプロジェクトからのデフォルトアクションを見てみましょう public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { // This doesn't count login failures towards account lockout // To enable password …

2
なぜC#でオーバーライドを非同期にできるのですか?
C#では、メソッドをオーバーライドするときに、元のメソッドがオーバーライドしていなかった場合にオーバーライドを非同期にすることが許可されています。これは貧弱な形のようです。 私にこれをもたらした例はこれでした-私は、負荷テストの問題を支援するために連れてこられました。同時ユーザー数が約500の場合、ログインプロセスはリダイレクトループになります。IISは、「非同期操作がまだ保留中に非同期モジュールまたはハンドラーが完了しました」というメッセージで例外を記録していました。一部の検索では、誰かが悪用していると思うようになりましたがasync void、ソースをすばやく検索しても何も見つかりませんでした。 悲しいことに、「async \ s [^ T]」のようなものを探すべきだったときに、「async \ svoid」(正規表現検索)を探していました(タスクが完全に修飾されていないと仮定すると...ポイントが得られます)。 後で見つけたのasync override void onActionExecuting(...は、ベースコントローラーです。明らかにそれが問題にならなければなりませんでした。これを修正することで(現時点では同期化することで)問題は解決しました。 質問に戻る:なぜ、呼び出し元のコードがそれを待つことができないのに、なぜオーバーライドを非同期としてマークできるのでしょうか?
16 c#  async 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.