問題タブ [class-design]
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.
c# - クラス内で IDisposable リソースを共有するにはどうすればよいですか?
SQLite データベース間でデータを移動するコンソール アプリケーションを作成しています。接続のクラスとさまざまな準備済みステートメントは IDisposable を実装しているため、次のusing
ようにブロックを使用してこれらのオブジェクトをインスタンス化しています。
ただし、これらの接続を 1 つのメソッドで作成し、別のメソッドで呼び出すことができる必要があります。これらの接続をインスタンス変数として保存するための最もクリーンで混乱の少ない方法は何ですか? それらのメソッドがインテリジェントな方法で呼び出されることを確認したいのですが、すべてのアクションが単一のブロック.Dispose()
のコンテキスト内で発生することを確認する良い方法がわかりません。using
これはC#の初心者の質問であることを認識しているので、そのように回答を調整してください。提案された解決策がある場合は、説明するコード サンプルを含めていただければ幸いです。
編集:私のユースケースはコンソールアプリです。ソースと宛先の接続文字列が渡され、コンソール アプリが操作を実行します。実際に、コンソール クラス Program 自体に IDisposable を次のように実装させるでしょうか?:
c++ - 同じ名前でタイプが異なるデータメンバーを持つクラスでのコードの重複を減らす方法は?
このようなクラスを設計するときに問題が発生します
C1とC2には同じメソッドfoo()があり、
両方のDerivedクラスのUpdate()はまったく同じですが、メンバーのタイプが異なります。したがって、新しい派生クラスごとにUpdate実装をコピーする必要があります。
これは、このコードの重複を減らす方法ですか?私はマクロを使った解決策しか出てきません。テンプレートを使ってこれを解決するもっとエレガントな方法があると思いますが、私にはわかりません。
編集: たくさんの人に感謝しますが、私は何かを逃したと思います。
1.私はc++を使用しています
2.実際には、各Derivedクラスには約5つのメンバーがあり、それらはすべてfoo()メソッドを提供し、同じ基本クラスから派生しています。私の状況では、(非常に長い)Update()メソッドを既に作成しており、変更なしですべての派生クラスで機能します。したがって、このUpdate()をコピーしてすべての新しいクラスのUpdate()に貼り付けるだけで、ひどいコードの重複が発生します。Update()を書き直さなくても、重複を減らすことができる方法があるのではないかと思います。
再びthx
c# - C# または Java での MruList の効率的なモデリング
C# または Java で容量制限のある汎用 MruList をどのように実装しますか?
最近使用したキャッシュまたはリスト (= MruList) を表すクラスが必要です。これは一般的であり、インスタンス化時に指定された容量 (カウント) に制限されている必要があります。インターフェイスを次のようにしたいと思います。
各 Store() は、アイテムをリストの一番上 (先頭?) に配置する必要があります。GetList() は、最新のstoreで並べ替えられた順序付きリスト内のすべてのアイテムを返す必要があります。Store() を 20 回呼び出し、リストの長さが 10 項目である場合、最近保存された 10 項目のみを保持したいと考えています。GetList と StoreRange は、アプリの起動時とシャットダウン時に MruList の取得と保存をサポートすることを目的としています。
これは、GUI アプリをサポートするためのものです。保存されたアイテムのタイムスタンプも知りたいと思うかもしれません。多分。わからない。
内部的には、それをどのように実装しますか?またその理由は?
(いいえ、これはコースの割り当てではありません)
c# - プロパティアクセサーで「長時間実行」するべきではないというのは本当ですか?
もしそうなら、なぜですか?「長時間」とは何ですか?
プロパティ アクセサーで魔法をかけることは、クラス デザイナーとしての私の特権のように思えます。私はいつも、C# の設計者がそれらをそこに入れている理由だと思っていました。
もちろん、クラスのユーザーに対する驚きを最小限に抑えることは良い習慣です。そのため、本当に長時間実行されるもの (たとえば、10 分間のモンテカルロ分析) をメソッドに埋め込むことは理にかなっています。
しかし、prop アクセサーが db 読み取りを必要とするとします。私はすでにデータベース接続を開いています。プロパティアクセサーで、通常の期待の範囲内で、dbアクセスコードは「許容」されますか?
c# - テストを実行するためのメソッドの編成 - C#
私は現在クラスを持っています。このクラスには、タイマーによって実行されるループで特定のタスクを実行する 15 ほどのプライベート メソッドがあります。これらのメソッドには、データベースを呼び出すものとそうでないものがあります。
問題は...どうすればクラスをセットアップできるようにこれらを調整して、レポや実行プロセスを偽造できるのでしょうか??
これは、私が現在持っているものの簡略化されたバージョンです。
vb.net - Vb.net クラスの残りの部分からこの変数を非表示にするにはどうすればよいですか?
一部のユーザーはプログラムの非常に特定の部分のみを使用するため (管理者は 1 つのメインフレームを使用して、必要なことを行うことができます)ユーザーは主に別のリソースを使用します)。
なぜ p_? p_ を使用すると、そのクラスでローカルにプロパティの代わりに変数を使用したり、インテリセンスで簡単に見つけたりするのに役立つと思います。次に、プロパティによってローカルにアクセスする必要のないプライベート プロパティまたはプライベート変数の前に _ だけを使用します。
誤って p_dlgAdd に直接アクセスするのを防ぐにはどうすればよいでしょうか? これは 2008 年の無名変数の適切な使用法ですか? (私はまだ 2008 を職場で利用できませんが、彼らはすぐに利用できると考えています)
c# - クラス名が非常に一般的である場合、どうすればよいですか?
と呼ばれるクラスを含む別のサードパーティ コンポーネントを .net プロジェクトに追加したClient
ところ、一般的なクラス名について考えさせられました。
public クラスに のように一般的な名前を付けてClient
いますか? それとも、名前をより具体的にしようとしていますか?
Client
以前は、名前空間 ( ) を介して常に明示的にアクセスできるため、問題ないと言っていたでしょうがCompany.Product.Client
、MS は .net フレームワークのよりわかりやすいクラス名 ( 、 、 など) に固執しているWebClient
ようTcpClient
ですSmtpClient
。
MessagePub.Client
のような名前は非常にきれいに見えると思いますMessagePub.MessagePubClient
が、多くClient
の が浮かんでいると、かなり面倒に感じます。
私が使用しているこれらのサードパーティ コンポーネントはすべて実際にはオープン ソースであるため、コードを読みやすくするためにクラス名をリファクタリングしてよりわかりやすい名前に変更することをお勧めしますか、それとも名前空間を介してアクセスする方がよい考えですか? それとも、それは問題ではありませんか?:-)
c++ - プロジェクトのデバッグ/リリース状態に基づいて、簡単なインラインメソッドを2回定義するのは良いことですか?
プロジェクトがデバッグ/リリース状態にあるかどうかに応じて、単純なメソッドを2回定義するのが良い習慣なのか悪い習慣なのか、私はいつも疑問に思っていました
。これはそれらをインライン化するためのものです。たとえば、Foo.h:
そして今、Foo.cpp で:
これは完全に無駄ですか?たとえば、メソッドをすべて単独でインライン化/最適化するコンパイラ (MSVC) の機能が原因ですか?
それにもかかわらず、これは私が何年も前から使ってきたものです。ここで完全に間違っている場合は、修正してください...
ruby - Ruby - モジュール/クラス間でロガーインスタンスを共有する
Web に出てさまざまなサービスをクロールする小さな Ruby スクリプトに取り組んでいます。内部にいくつかのクラスを含むモジュールがあります。
これらのクラスのすべてのロガーで 1 つのロガーを共有したいと考えています。通常、これをモジュールの定数に入れて、次のように参照します。
問題は、出力先がわかるまでロガー インスタンスを作成できないことです。コマンド ラインからクローラーを開始し、その時点で、開発 (ログ出力は STDOUT に出力) または実稼働 (ログ出力はファイル、crawler.log に出力) で実行することを指定できます。
Options
コマンドラインから渡されたオプションを解析するクラスがあります。その時点で初めて、正しい出力場所でロガーをインスタンス化する方法を知ることができます。
だから、私の質問は、どのように/どこにロガーオブジェクトを配置して、すべてのクラスがそれにアクセスできるようにするのですか?
作成するすべてのクラス インスタンスの各呼び出しにロガー インスタンスを渡すこともできますnew()
が、それを行うためのより優れた Ruby 的な方法が必要であることはわかっています。私は、class << self
他の魔法と共有するモジュール上の奇妙なクラス変数を想像しています。:)
もう少し詳しく:Runner
コマンド ライン オプションをOptions
クラスに渡すことですべてを開始し、いくつかのインスタンス変数を持つオブジェクトを取得します。
ロガー オブジェクトにアクセスできるようにするためのコードが必要ですEngine
(内部で初期化されるいくつかのクラスと共にEngine
)。ヘルプ!
すでにインスタンス化されている Logger の出力場所を動的に変更できれば (ログ レベルを変更する方法と同様に)、このすべてを回避できます。私はそれを STDOUT にインスタンス化してから、本番環境であればファイルに切り替えます。Ruby の $stdout グローバル変数を変更して、出力を STDOUT 以外の場所にリダイレクトするという提案をどこかで見ましたが、これはかなりハッキリしているようです。
ありがとう!
c# - .Net で使用できる最も単純な一意の識別子は何ですか?
だから私はこれを持っています
完全に一意の番号を取得するにはどうすればよいですか?
ありがとう!