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

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

4
永続性は純粋に機能的な言語にどのように適合しますか?
コマンドハンドラーを使用して永続性を処理するパターンは、IO関連のコードをできるだけ薄くしたい純粋に機能的な言語にどのように適合しますか? オブジェクト指向言語でドメイン駆動設計を実装する場合、コマンド/ハンドラーパターンを使用して状態の変更を実行するのが一般的です。この設計では、コマンドハンドラーはドメインオブジェクトの上に配置され、リポジトリの使用やドメインイベントの発行など、永続性に関連する退屈なロジックを担当します。ハンドラーは、ドメインモデルのパブリックフェイスです。UIなどのアプリケーションコードは、ドメインオブジェクトの状態を変更する必要があるときにハンドラーを呼び出します。 C#のスケッチ: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } } documentドメインオブジェクトは、((「あなたは既に破棄されていた文書を破棄することはできません」または「ユーザーが文書を破棄する権限を持つべきである」のような)ビジネスルールを実装するため、我々は公開する必要があるドメインイベントを発生させるための責任があるdocument.NewEventsだろうIEnumerable<Event>おそらく含まれていますDocumentDiscarded)イベントを。 これは素晴らしいデザインです-拡張が簡単で(ドメインモデルを変更せずに新しいコマンドハンドラーを追加することで新しいユースケースを追加できます)、オブジェクトの永続化方法に依存しません(MongoのNHibernateリポジトリを簡単に交換できます)リポジトリ、またはRabbitMQパブリッシャーをEventStoreパブリッシャーに交換します)これにより、偽物やモックを使用して簡単にテストできます。また、モデル/ビューの分離に従います-コマンドハンドラーは、バッチジョブ、GUI、またはREST APIのいずれで使用されているかわかりません。 Haskellのような純粋に機能的な言語では、おおよそ次のようにコマンドハンドラーをモデル化できます。 newtype CommandHandler = CommandHandler {handleCommand :: …

3
コンストラクターの複雑さ
私は、コンストラクターがどれだけの作業を行えるかについて同僚と議論しています。内部に別のオブジェクトAを必要とするクラスBがあります。オブジェクトAは、クラスBがその仕事をするために必要な数少ないメンバーの1つです。そのパブリックメソッドはすべて内部オブジェクトAに依存します。オブジェクトAに関する情報はDBに格納されているので、コンストラクターでDBを検索して検証および取得を試みます。私の同僚は、コンストラクターがコンストラクターのパラメーターをキャプチャする以外に多くの作業を行うべきではないと指摘しました。コンストラクターへの入力を使用してオブジェクトAが見つからない場合、すべてのパブリックメソッドはとにかく失敗するため、インスタンスを作成して後で失敗させるのではなく、実際にはコンストラクターで早期にスローする方がよいと主張しました。 他の人はどう思いますか?それが違いを生む場合は、C#を使用しています。 読書オブジェクトのすべての作業をコンストラクターで行う理由はありますか?ユーザーがコンストラクタに間違った値を渡した場合、そのパブリックメソッドを使用できないため、DBにアクセスしてオブジェクトAを取得することは「オブジェクトを使用可能にするために必要な他の初期化」の一部です。 コンストラクターは、オブジェクトのフィールドをインスタンス化し、オブジェクトを使用可能にするために必要な他の初期化を行う必要があります。これは一般に、コンストラクターが小さいことを意味しますが、これがかなりの量の作業になるシナリオがあります。
18 c#  constructors 

13
Windowsサービスの実用的な用途は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 4年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 Windowsサービスを使用するのは初めてです。VS2010でWindowsサービスを作成することを学びましたが、Windowsサービスを使用できる実用的な方法を知りたいですか? 現在のコンテキストを念頭に置いてグーグルを試し、Windowsサービスの作成方法に関するチュートリアルをさらに見つけました。 バウンティオファーの編集: すべての答えは素晴らしいですが、私はWindowsサービスとその意味に関するより実用的な例を探していましたか?これは、開発者がケーススタディでそれらを使用するのが適切である時期を知るのに役立ちます。

1
C#クラスの命名標準/ガイドライン
長年にわたって、アプリケーションのサービスにはさまざまな命名規則を使用してきました 例えば: [ClassName]サービス [ClassName]マネージャー [ClassName]ファクトリー [ClassName] Provider [ClassName]ヘルパー 私は通常、外部依存関係のないユーティリティクラスにのみ「ヘルパー」サフィックスを使用します。 しかし、私は他の人との間にクロスオーバーが少しあることを発見し、何をいつ使用するかについての推奨事項/標準/ガイドラインがありますか?
18 c#  naming 

13
後方互換性が必要ないと仮定して、C#または.Netの機能を停止しますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 製品またはフレームワークは進化します。主に、ユーザーのニーズをキャッチし、新しいコンピューティングパワーを活用し、単純に改善するために行われます。製品によって主要な設計目標も変わる場合があります。C#または.netフレームワークも例外ではありません。ご覧のとおり、現在の第4バージョンは、第1バージョンとは大きく異なります。しかし、物事はこの進化の後方互換性に対する障壁となっています。 ほとんどのフレームワーク/製品では、下位互換性をサポートする必要がなければ機能が中断されます。あなたによると、C#/。netのこれらの機能は何ですか? 回答ごとに1つの機能をお知らせください。

5
クライアントのWebサイトでリッチテキスト編集が必要な場合はどうしますか?
すでにご存知のとおり、XSS攻撃は危険であり、非常に簡単に実行できます。ASP.NET MVCのように、さまざまなフレームワークによりHTMLを簡単にエンコードできます。 <%= Html.Encode("string"); %> しかし、クライアントがMicrosoft Word文書からコンテンツを直接アップロードできることを要求するとどうなりますか? シナリオは次のとおりです。人々はMicrosoft WordからWYSIWYGエディター(この場合はtinyMCE)にコンテンツをコピーして貼り付け、その情報をWebページに投稿できます。 Webサイトは公開されていますが、その組織のメンバーのみがWebページに情報を投稿するアクセス権を持ちます。 これらの要件を安全に処理するにはどうすればよいですか?現在、クライアントが投稿した内容のチェックは行われていません(「信頼できる」ユーザーのみが投稿できるため)が、これには特に満足しておらず、アカウントがハッキングされた場合にさらにロックダウンしたいと思います。 これらの要件を満たすことがわかっている唯一の概念的な方法は、HTMLタグをホワイトリストに登録し、それらを通過させることです。別の方法はありますか?そうでない場合、ユーザーが任意の形式でデータベースに入力を保存できるようにする安全な方法は何ですか? 関連質問 クロスサイトスクリプティング(XSS)の防止
18 c#  .net  asp.net-mvc 

20
VB.Net対C#の議論[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 私は、プロジェクトの開始時に「VB.NetまたはC#を使用すべきか」という質問が提起された職場にいました。 確かに、特に言語の収束への傾向を考えると、.Netの初期の頃よりも、今すぐその決定を下す必要があるのはおそらく一般的ではありませんが、それでも激しい議論になる可能性があります。 VB.NetとC#の間では、どの言語を好むのですか?
18 c#  .net  vb.net 

2
Winformアプリケーションのロジックからビューをどのように分離しますか?
ビューをロジックから分離するMVCのようなパターンがあることは知っていますが、Winformアプリケーションでそれらがどれほど一般的かはわかりません。 C#Winformアプリケーションの場合、a Formから始めてUIコンポーネントを徐々に追加し、コンポーネントのイベントに対して(click、textchanged...)関数を呼び出すか、ロジックを直接記述します! 私はそれが悪い習慣であることは知っていますが、Visual Studioでそのようなプロジェクト(テンプレート、フレームワーク、開始点)を開始する最善の方法は何なのかわかりません。MVCが唯一の解決策ですか?私はどんなプロジェクトでもそれをすべきですか?! 開始するためのガイドラインまたは軽量フレームワークを受け取りたいです。
18 c#  mvc  winforms 

6
試行/キャッチ/ログ/再スロー-アンチパターンはありますか?
try / catchの周りにすべてのコードブロックを散らかすのではなく、中央の場所またはプロセスの境界で例外を処理することの重要性が良いプラクティスとして強調されているいくつかの投稿を見ることができます。私たちのほとんどはそれの重要性を理解していると強く信じていますが、主に例外中のトラブルシューティングを容易にするために、より多くのコンテキスト固有の情報(例:メソッドパラメータ合格)、方法はtry / catch / log / rethrowの周りにメソッドをラップすることです。 public static bool DoOperation(int num1, int num2) { try { /* do some work with num1 and num2 */ } catch (Exception ex) { logger.log("error occured while number 1 = {num1} and number 2 = {num2}"); throw; } } 例外処理の優れた実践を維持しながら、これを達成する正しい方法はありますか?このためにPostSharpのようなAOPフレームワークについて聞いたことがありますが、これらのAOPフレームワークに関連するマイナスまたは主要なパフォーマンスコストがあるかどうかを知りたいです。 ありがとう!

6
実装へのインターフェイス参照をキャストすることで、著者は何を意味しますか?
私は現在C#をマスターしようとしていますが、Gary McLean HallによるC#を介してAdaptive Codeを読んでいます。 彼はパターンとアンチパターンについて書いています。実装とインターフェースの部分で、彼は次のように書いています。 インターフェイスへのプログラミングの概念に慣れていない開発者は、多くの場合、インターフェイスの背後にあるものを手放すのが困難です。 コンパイル時に、インターフェースのクライアントは、使用しているインターフェースの実装を把握していないはずです。このような知識は、クライアントをインターフェイスの特定の実装に結び付ける誤った仮定につながる可能性があります。 クラスが永続ストレージにレコードを保存する必要がある一般的な例を想像してください。そのために、インターフェイスに正しく委任します。これにより、使用される永続的なストレージメカニズムの詳細が隠されます。ただし、実行時にどのインターフェイスの実装が使用されているかについて仮定するのは正しくありません。たとえば、インターフェイス参照を実装にキャストすることは常に悪い考えです。 それは言葉の壁か、私の経験不足かもしれませんが、それが何を意味するのかよくわかりません。ここに私が理解していることがあります: C#を練習するための自由時間の楽しいプロジェクトがあります。そこでクラスがあります: public class SomeClass... このクラスは多くの場所で使用されています。C#を学習しているときに、インターフェイスで抽象化する方がよいことを読んだので、次のようにしました。 public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have. public class SomeClass : ISomeClass <- Same as before. All implementation here. そこで、いくつかのクラス参照をすべて調べて、それらをISomeClassに置き換えました。 私が書いた建設を除いて: ISomeClass myClass …

3
複数の非同期サービスを並行して呼び出す
互いに依存しない非同期RESTサービスはほとんどありません。それは、Service1からの応答を「待っている」間で、Service2、Service3などを呼び出すことができます。 たとえば、以下のコードを参照してください。 var service1Response = await HttpService1Async(); var service2Response = await HttpService2Async(); // Use service1Response and service2Response 現在、にservice2Response依存せず、service1Response独立して取得できます。したがって、最初のサービスの応答を待って2番目のサービスを呼び出す必要はありません。 Parallel.ForEachCPUバウンド操作ではないため、ここで使用できるとは思わない。 これらの2つの操作を並行して呼び出すために、useを呼び出すことができますTask.WhenAllか?私が使用してTask.WhenAllいる問題の1つは、結果を返さないことです。結果を取得するには、を呼び出したtask.Result後に呼び出すことができます。Task.WhenAllすべてのタスクが既に完了しており、応答を取得する必要があるためです。 サンプルコード: var task1 = HttpService1Async(); var task2 = HttpService2Async(); await Task.WhenAll(task1, task2) var result1 = task1.Result; var result2 = task2.Result; // Use result1 and result2 このコードは、パフォーマンスの面で最初のコードよりも優れていますか?私が使用できる他のアプローチはありますか?

4
アプリケーションでデプロイするには、読み取り専用データをどのように保存すればよいですか?
私はデスクトップアプリケーションを開発しており、このアプリケーションを実行するにはいくつかの情報が必要ですが、この情報は変更されません(アプリの実行ごとにデータを読み込む必要がありますが、データは変更されません)。データは、アプリを実行しているコンピューターと同じコンピューターに保存する必要があります(クライアント側のストレージ?)。 また、ユーザーがこの情報を簡単に変更できない場合も優れています(ITの知識があまりないと仮定します)。 この種の情報はどのように保存すればよいですか?ローカルデータベース?アプリケーションと共に送信されるXML WPFを使用しています。
17 c#  design  data  wpf 

7
インスタンス作成がそのままなのはなぜですか?
私は過去6か月ほどの間にC#を学び、現在はJavaを掘り下げています。私の質問は、インスタンスの作成に関するものです(どちらの言語でも)、それはもっと多くのことです。この例を取ります Person Bob = new Person(); オブジェクトが2回指定されている理由はありますか?ありsomething_else Bob = new Person()ますか? 私が慣習に従っているなら、もっと似ているように思えます: int XIsAnInt; Person BobIsAPerson; または、おそらく次のいずれかです。 Person() Bob; new Person Bob; new Person() Bob; Bob = new Person(); 「それがまさに行われている方法」よりも良い答えがあるかどうか興味があります。

9
測定単位にアクセスするためのデータ構造
TL; DR-最適なデータ構造を設計して、測定単位内の単位を定義しようとしています。 A Unit of measureは、本質的ににvalue関連付けられた(または数量)unitです。 SIユニットには7つのベースまたはディメンションがあります。すなわち:長さ、質量、時間、電流、温度、物質の量(モル)、および光度。 これは十分に簡単ですが、多くの派生ユニットと頻繁に使用するレートがあります。結合されたユニットの例はNewton:でkg * m / s^2あり、レートの例はですtons / hr。 暗黙のユニットに大きく依存するアプリケーションがあります。変数または列名に単位を埋め込みます。しかし、異なる単位で測定単位を指定する必要がある場合、これは問題を引き起こします。はい、入力および表示時に値を変換できますが、これにより、独自のクラス内にカプセル化する多くのオーバーヘッドコードが生成されます。 コードプレックスやその他の共同作業環境には多くのソリューションがあります。プロジェクトのライセンスは同意できますが、プロジェクト自体は通常、非常に軽量または重すぎます。「ちょうどいい」というユニコーンを追いかけています。 理想的には、次のようなものを使用して新しい測定単位を定義できます。 UOM myUom1 =新しいUOM(10、ボルト); UOM myUom2 = new UOM(43.2、Newtons); もちろん、クライアントのニーズに基づいて、ImperialユニットとSIユニットを組み合わせて使用​​します。 また、このユニットの構造を将来のデータベーステーブルと同期させて、データ内で同じ程度の一貫性を提供する必要があります。 測定単位クラスを作成するために使用する必要がある単位、派生単位、およびレートを定義する最良の方法は何ですか?1つ以上の列挙型を使用していることはわかりましたが、他の開発者にとってはイライラする可能性があります。単一の列挙型は200以上のエントリで巨大になりますが、複数の列挙型はSIと帝国のユニットに基づいて混乱し、ユニット自体の分類に基づいた追加の内訳があります。 私の懸念のいくつかを示す列挙型の例: myUnits.Volt myUnits.Newton myUnits.meter SIUnit.meter ImpUnit.foot DrvdUnit.Newton DrvdUnitSI.Newton DrvdUnitImp.FtLbs 使用中のユニットのセットはかなり明確に定義されており、有限のスペースです。クライアントから需要がある場合、新しい派生ユニットまたはレートを拡張および追加する機能が必要です。このプロジェクトはC#で作成されていますが、より広範な設計の側面は複数の言語に適用できると思います。 私が調べたライブラリの1つでは、文字列を介したユニットの自由形式の入力が可能です。次に、UOMクラスは文字列を解析し、それに応じてスロットを割り当てました。このアプローチの課題は、正しい文字列形式が何であるかを開発者に考えさせ、記憶させることです。そして、コンストラクターで渡される文字列を検証するためにコード内に追加のチェックを追加しないと、ランタイムエラー/例外のリスクが発生します。 別のライブラリは、開発者が作業しなければならないクラスを本質的に多く作成しました。同等のUOMとともに、DerivedUnitなどRateUnitを提供しました。基本的に、コードは、私たちが解決しようとしている問題に対して非常に複雑でした。そのライブラリは基本的にany:anyの組み合わせ(ユニットの世界では合法です)を許可しますが、可能なすべての組み合わせを許可しないことで問題の範囲を広げることができます(コードを簡素化します)。 他のライブラリはとてつもなくシンプルで、たとえば演算子のオーバーロードも考慮していませんでした。 さらに、誤った変換(たとえば:ボルトからメートル)の試みについても心配していません。この時点でこのレベルでアクセスできるのは開発者だけであり、これらのタイプの間違いから保護する必要は必ずしもありません。

5
コードにデータを保存する
過去に何度か、データをコードに保存したいと思っていました。これはめったに変更されないデータであり、データベースへのアクセスが不可能、実用的、または望ましくない場所で使用されます。小さな例は、国のリストを保存することです。そのためには、次のようなことができます。 public class Country { public string Code { get; set; } public string EnglishName {get;set;} } public static class CountryHelper { public static List<Country> Countries = new List<Country> { new Country {Code = "AU", EnglishName = "Australia"}, ... new Country {Code = "SE", EnglishName = "Sweden"}, ... }; public …
17 c# 

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