問題タブ [design-patterns]
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++ - 複数の永続化戦略をサポートするクラス ライブラリ
ドメイン モデル クラスを含む C++ クラス ライブラリを開発しています。データベースやファイルなどのさまざまな永続化メカニズムからこれらのクラスをインスタンス化するためのサポートを追加したいと考えています。クラス ライブラリのユーザーには、永続化メカニズムとの間でデータを転送できるクラスをプログラムするためのインターフェイス (?) を指定する必要があります。
Java で機能すると思われる Data Access Object パターンは知っていますが、それを C++ に適用する方法が正確にはわかりません。他の解決策はありますか?
design-patterns - 設計に関する考察 - コア制御ロジックとレンダリング レイヤー
私が現在行っているいくつかの作品のデザインについて、あなたの考えを教えていただけないでしょうか。
現在の状況は次のとおりです-基本的に:
- アプリケーション用の一連のコントロールを開発しています。
- これらの一部は、WinForms と ASP.NET Web アプリケーションの両方で使用できます。
- 私は自分のコードのテストとテスト容易性を改善するために絶え間ない努力をしています。
だから、ここに私がしたことがあります:
- UI の概念を持たないクラスでコア コントロール ロジックを作成しました。物事が変化したときにイベントを発生させるだけです。すべてのデータは、他のものと区別する必要があるカスタム型付きオブジェクトとして保存されます (たとえば、ある
PagingControl
場所SelectedPage
とPageNumber
アイテムがあります)。 - 次に、レンダリング「エンジン」のインターフェースとして機能する抽象クラスを作成しました。これにより、コア ロジックに使用される (場合によっては追加される) カスタム タイプがエンジンによって確実に処理されます。上記の例に続いて、抽象メソッドが含まれています
RenderSelectedPage
。 - 次に、抽象レンダリング エンジンの具体的な実装を作成しました (例:
ConsoleRenderingEngine
などHtmlRenderingEngine
)。これにより、メソッドが処理され、必要に応じてそれぞれの UI/出力にレンダリングされました。
このアプローチには、次の長所と短所があります。
プロの
- できます。新しいレンダリング メカニズムを実装するのは非常に簡単です。抽象エンジンをサブクラス化し、出力をレンダリングするだけです (必要な参照が渡されます)。
- UI がコア コードから分離されているため、テストがはるかに簡単になります。
明らかに、コア/レンダリング ロジックがカプセル化されているため、問題が発生したときにどこに問題があるかが明確になります。
短所
紛らわしい/肥大化したように見える場合があります。各クラスには大量のコードはありませんが、1 つの出力 (1x コア、1x インターフェイス、1x レンダラー) にレンダリングするための 3x クラスがあります。ただし、WinForms/WebForms コントロールを作成する場合は、別のクラスも意味します (
Control
と同様にサブクラス化する必要があるためAbstractRenderingEngine
)。
... OK、それが私が本当に考えることができる唯一の「詐欺」であり、この質問の主な理由です ^_^
そう、
この「パターン」についてどう思いますか?どのように変更/改善しますか?
この質問は、より多くの考えが浮かぶと更新されるか、明確さが求められる場合があります (私はそれが重い読み物であることを知っています!)。
アップデート
答えてくれてありがとう、あなたがMVPと言ったのはおかしいです、私はこのようなものをどこかで見たと思っていましたが、それが何であったかを一生思い出せませんでした! 「MVP」を見た瞬間、「くそっ」と思いました。:D
返信ありがとうございます。MVP をもっと勉強して、自分が持っているものをさらに改善できるかどうかを確認します。
linq - IQueryable を使用したデザイン パターン
.NET 3.5 とインターフェイスの導入によりIQueryable<T>
、新しいパターンが出現します。仕様パターンの実装は数多く見てきましたが、この技術を使用した他の多くのパターンは見たことがありません。Rob Conery の Storefront アプリケーションはIQueryable<T>
、いくつかの新しいパターンにつながる可能性のある別の具体的な使用例です。
IQueryable<T>
便利なインターフェースからどのようなパターンが生まれましたか?
model-view-controller - MVC パターンはロールまたはレイヤーを記述していますか?
最近、MVC パターンがアプリケーションのレイヤーを説明しているというテキストを読みました。しかし、個人的には、MVC がアプリケーションでいくつかの重要な役割を示していると思います。
MVC の 3 つの主要部分を説明するのに、レイヤーとロールのどちらの言葉が適していると思いますか?
c++ - データ アクセス オブジェクト パターンの実装
C++ でデータ アクセス オブジェクト パターンを実装したいと考えていますが、多重継承やブースト (クライアントが好まない) を使用しないことが望ましいです。
何か提案はありますか?
php - PHPでのレイジー関数の定義-それは可能ですか?
JavaScriptでは、レイジー関数定義を使用して、関数の最初の呼び出しでのみコストのかかる1回限りの操作を実行することにより、関数の2番目からN番目の呼び出しを最適化できます。
PHP 5でも同じようなことをしたいのですが、関数の再定義は許可されておらず、関数のオーバーロードも許可されていません。
事実上、私がやりたいのは次のようなものですが、最適化されているだけなので、2番目からN番目の呼び出し(たとえば25-100)は、最初の呼び出しであるかどうかを再確認する必要はありません。
PS外部コードを1回だけ実行する関数の最初の行としてinclude_once()またはrequire_once()を使用することを考えましたが、これらも高価であると聞きました。
何か案は?またはこれに取り組むためのより良い方法はありますか?
oop - 反復開発に最適な設計パターンはどれですか?
TDD または反復モードでアプリケーションを構築するための最も好ましい設計パターンを持つようなものはありますか?
design-patterns - 長期間の RESTful インタラクション
現在、私のチームで議論が行われており、他の見解に興味があります. さまざまな分析アルゴリズムとサービスを適用してドキュメントに注釈を付ける役割を持つ RESTful Web サービスがあるとします。基本的なやり取りは明確です。ドキュメント コレクションであるリソースがあります。クライアントは新しいドキュメントをコレクションに POST し、新しいドキュメントの URI を取得し、それを GET しdocURI
てドキュメントを取得したり、GETして名前付きエンティティなどの{docURI}/metadata
一般的なメタデータを表示したりできます。問題は、一部の分析が{docURI}/ne
完了までに時間がかかる場合があります。UI で部分的な結果または増分結果を表示できるようにするため、分析が完了する前にクライアントがメタデータ URI を取得するとします。今後 GET を繰り返すと、より多くの結果が得られる可能性があります。
これまでに説明したソリューションには、次のものがあります。
- すべての分析が完了するまで HTTP 接続を開いたままにしておく (これはスケーラブルではないようです)
content-length
とヘッダーを使用accept-range
して増分コンテンツを取得します (ただし、最終的なコンテンツの長さは事前にわかりません)- リソースごとに Atom フィードを提供して、クライアントが単にリソースを GET するのではなく、更新イベントをサブスクライブするようにする (アクティブなドキュメントが多数ある場合は、非常に複雑で、リソースを大量に消費する可能性があります)
- GET がその時点で利用可能なものを返すようにするだけです (ただし、最終的にいつ終了したかをクライアントが認識しているという問題は残ります) [コメントに続く冪等性への参照を削除するために編集] .
RESTful アーキテクチャで長期間または非同期の対話を処理するための代替方法について、意見や提案はありますか?
イアン
winforms - アプリケーション コントローラーは何をすべきか?
アプリケーションコントローラーが何をすべきかについて少し混乱していますか? ボタンがクリックされたときにどのフォームを表示するかを決定する機能が MVP パターンにも存在することがわかりましたか? アプリケーション コントローラー パターンを使用する Windows フォームの良い例はありますか?
MVC(コントローラー)とアプリケーションコントローラーに違いがあります。私は MVC (コントローラー) を知っていますが、アプリケーション コントローラーの役割と、それが WinForms アプリケーションにどのように適合するかはわかりません。Martin Fowler もこれを Application Controller パターンと呼んでいますが、MVC(コントローラー)と同じものではないのでしょうか?
c# - 基本型を派生型にキャストする方法
これが奇妙なことなのか、それともコードの臭いなのかはわかりませんが、「キャスト」する方法(ある種のoopパターンがいいでしょう)があるのではないかと思っていました。基本型から派生型の形式へ。派生型には、親が提供しない追加の機能があり、それ自体は基本的に健全ではないため、これはほとんど意味がないことを私は知っています。しかし、これを行う方法はありますか?これが私が求めていることをよりよく説明できるようにするためのコード例です。
私はこれが間抜けに見えることを知っていますが、この種の何かを達成する方法はありますか?