問題タブ [oop]
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.
design-patterns - データ検証の設計パターン
データベース テーブルのコレクション (たとえば、Access ファイル内) があり、このコレクション内の各テーブルを、すべてのテーブルに共通のルールと、テーブルの 1 つまたはサブセットに固有の個別のルールの両方を持つルール セットに対して検証する必要がある場合テーブル、誰かが調べるのに良いデザインパターンを推奨できますか?
具体的には、次のようなコードは避けたいと思います。
また、log4net を使用してすべてのエラーと警告をログに記録することにしました。これにより、各メソッドを宣言でき、void
何も返す必要がなくなります。ValidationException
これは良い考えですか、それともすべての例外をキャッチList<ValidationException>
し、最後にすべてを出力する前にそれらを保存するようなものを作成する方が良いでしょうか?
これはうまくいくように見えますが、実際に動作するコードサンプルをいくつか見つけたいと思っています。助言がありますか?過去に似たようなことをした人はいますか?
背景として、プログラムは C# または VB.NET のいずれかで記述され、テーブルは Access または SQL Server CE のいずれかに格納される可能性が高くなります。
c# - C#でジェネリック型に複数の制約を指定するにはどうすればよいですか?
複数のタイプに制約を設定するための構文は何ですか?基本的な例:
次の定義では、両方のタイプに制約を設定して、から継承する必要がありSpeciesType
、から継承する必要があるようにします。Species
OrderType
Order
c# - なぜ継承は私が思うように機能しないのですか?
クライアント実装を作成するためにすべてを一緒にオーバーライドする必要がある相互に関連する抽象クラスのグループがあるため、いくつかの継承の問題が発生しています。理想的には、次のようなことをしたいと思います。
これにより、Dogクラスを使用するすべての人が自動的にDogLegsを取得し、Animalクラスを使用するすべての人がLegsを取得できるようになります。問題は、オーバーライドされた関数が基本クラスと同じ型である必要があるため、これがコンパイルされないことです。DogLegは暗黙的にLegにキャスト可能であるため、なぜそうすべきでないのかわかりません。これを回避する方法はたくさんあることは知っていますが、C#でこれが不可能/実装されていない理由についてはもっと興味があります。
編集:コードで関数の代わりにプロパティを実際に使用しているため、これを多少変更しました。
編集:答えはその状況にのみ適用されるため、関数に戻しました(プロパティの集合関数の値パラメーターの共分散は機能しないはずです)。変動してすみません!私はそれが多くの答えを無関係に見えるようにすることを理解しています。
c# - 継承されたメソッドの戻り値の型で共分散をサポートする言語は?
私は最初にこの質問をしましたが、答えを見つける際に、継承されたメソッドの戻り値の型の共分散に対する C# のサポートの欠如が私の元の問題であることがわかりました。それを発見した後、私はどの言語がこの機能をサポートしているのか知りたくなりました。
一番多く名前を挙げられる方の回答を受け付けます。
編集:ジョン・ミリキンは、多くの動的言語がこれをサポートしていることを正しく指摘しました。明確にするために:
静的/強く型付けされた言語のみを探しています。
php - PHP で動的変数を使用してオブジェクトをインスタンス化することの意味
次のフォームを使用して PHP で新しいクラス インスタンスを宣言することのパフォーマンス、セキュリティ、または「その他」の意味は何ですか?
これは不自然な例ですが、大きな if/switch ステートメントを避けるために、ファクトリ (OOP) でこの形式が使用されているのを見てきました。
すぐに思いつく問題は、
引数をコンストラクターに渡す機能が失われます(LIES。Thanks Jeremy)- eval() のような匂いがして、テーブルにもたらされるすべてのセキュリティ上の懸念があります (ただし、必ずしもパフォーマンスに関する懸念があるとは限りませんか?)
他にどのような影響がありますか、または「Rank PHP Hackery」以外にこれを調査するために使用できる検索エンジン用語は何ですか?
php - PHPのコールバックデリゲート関数のようなもの
PHP で ac# デリゲート メソッドに似たものを実装したいと思います。私が全体的にやろうとしていることを簡単に説明すると、いくつかの非同期機能を実装しようとしています。基本的に、基盤となるシステムがそれに近づくと、キューに入れられ、キャッシュされ、ディスパッチされる、リソースを大量に消費する呼び出しです。非同期呼び出しが最終的に応答を受信したときに、コールバック イベントを発生させたいと考えています。
PHP でコールバックを実行するメカニズムに問題が発生しています。私は今のところうまくいく方法を思いついたが、私はそれに満足していない. 基本的には、オブジェクトへの参照とコールバックとして機能するメソッドの名前を渡し (応答を引数として受け取る)、必要に応じて eval を使用してメソッドを呼び出します。これはさまざまな理由で最適ではありません。誰かが知っているより良い方法はありますか?
language-agnostic - 継承よりも構成を優先しますか?
なぜ継承よりも構成を好むのですか?各アプローチにはどのようなトレードオフがありますか?いつ、構成よりも継承を選択する必要がありますか?
oop - なぜ c# の人はオブジェクト指向プログラミングを理解できないという主張があるのでしょうか? (対クラス指向)
これは昨夜私の注意を引きました。
最新のALT.NET ポッドキャストで、 Scott Bellware が、Ruby とは対照的に、c#、java などの言語について説明しています。「クラス指向」という言葉を選ぶのではなく、真のオブジェクト指向ではありません。彼らはこの違いについて、あまり詳細に触れたり、長所と短所についてあまり議論したりせずに、非常にあいまいな言葉で話します.
ここでの本当の違いは何ですか?「オブジェクト指向」である他の言語は何ですか? かなり面白そうに聞こえましたが、何が足りないかを知るためだけに Ruby を学ぶ必要はありません。
更新:以下の回答のいくつかを読んだ後、人々は一般的に、ダックタイピングへの参照であることに同意しているようです. 私がまだ理解しているかどうかわからないのは、これが最終的にすべてを大きく変えるという主張です. 特に、疎結合で適切な tdd を既に実行している場合は特にそうです。C# ではできない、Ruby でできる素晴らしいことの例を誰かに見せてもらえますか?
php - 1つの接続のみを必要とするアプリのPHP5でDB接続コードを非表示にする最良の方法は?
以下に、接続が 1 つしかない場合にデータベース アクセスを簡素化するための 3 つのオプションを示します (これは、私が取り組んでいる Web アプリの場合によくあります)。
一般的な考え方は、スクリプトが最初にクエリを実行したときに接続し、スクリプトが終了するまで接続を維持するように、DB 接続を透過的にすることです。
どれが一番良いと思うか、その理由を知りたいです。これらに適合する可能性のあるデザインパターンの名前がわからないので、使用しないで申し訳ありません。また、PHP5 でこれを行うためのより良い方法があれば、共有してください。
簡単に紹介すると、クエリ メソッドを含む DB_Connection クラスがあります。これは、私が制御できないサードパーティ クラスであり、この例の目的のためにインターフェイスを単純化しました。各オプションでは、状況を説明するために架空の DB「アイテム」テーブルのモデル例も提供しました。
オプション 3 は、私が最も気に入っているインターフェイスを提供してくれるものですが、残念ながら実用的ではないと思います。
以下のコメント ブロックで、それぞれの長所と短所 (私が見ることができる) について説明しました。
現時点では、モデルではなく DB ラッパー クラスに負担がかかるため、オプション 1 に傾いています。
すべてのコメントに感謝します!
注: 何らかの理由で、スタック オーバーフロー プレビューにアンダースコアではなく、エンコードされた HTML エンティティが表示されます。投稿がそのように通過する場合は、これを考慮してください。
delphi - 明示的な呼び出しがない場合、Delphi 呼び出しはオーバーライドされたプロシージャで継承されますか
コードに明示的な呼び出しがない場合、つまり(継承された;)オーバーライドされたプロシージャで継承されたDelphi呼び出しはありますか、私は次の構造を持っています(スーパークラスからサブクラスへ)
TForm >> TBaseForm >> TAnyOtherForm
プロジェクト内のすべてのフォームは TBaseForm から派生します。これは、すべてのフォーム (セキュリティ、検証など) に使用されるすべての標準セットアップおよび破壊的な部分が含まれているためです。
TBaseForm には、これを行うためのコードを含む onCreate および onDestroy プロシージャがありますが、誰か (つまり私) が TAnyOtherForm の onCreate に継承を追加するのを忘れた場合、Delphi は私のためにそれを呼び出しますか? 必須ではないというウェブ上の参照を見つけましたが、コードから省略された場合に呼び出されるかどうかはどこにもありません。
また、継承を呼び出す場合、いつ呼び出されますか?