問題タブ [extensibility]
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# - .NETのプラグインのようなアーキテクチャ
プラグインのようなアプリケーションを実装しようとしています。すでにいくつかの解決策があることは知っていますが、これは概念実証にすぎず、それ以上のものではありません。アイデアは、アプリケーションのメインアプリケーションをデフォルトでほとんど機能なしにし、プラグインに相互に通知して、必要なすべての機能を実装させることです。
いくつかの問題が発生します。
- 実行時にプラグインがアプリケーションを通じて相互に認識できるようにしたい。これは、コード時に他のプラグインのアセンブリを参照できず、そのインターフェイスを使用できることを意味するのではなく、プラグイン機能の初期化は常にメインアプリを介して行う必要があります。たとえば、プラグインXとYの両方をロードしていて、YがXの機能を使用したい場合、アプリケーションがその機能を使用するために、その関心を「登録」する必要があります。ロードされたすべてのプラグインを保存するアプリケーションには、一種の「辞書」が必要です。私のアプリケーションへの関心を登録した後、プラグインYはXへの参照を取得して、それを使用できるようにします。これは良いアプローチですか?
- Xを使用するプラグインYをコーディングするときは、Xのアセンブリを参照する必要があるため、そのインターフェイスに対してプログラミングできます。それにはバージョン管理の問題があります。古いバージョンのプラグインXに対してプラグインYをコーディングするとどうなりますか?常に最新バージョンのアセンブリが存在する、すべてのアセンブリがある「中央」の場所を常に使用する必要がありますか?
.NETのこの種のデザインを具体的に扱っている本は偶然ありますか?
ありがとう
編集:私が行った2つの質問から人々は離れていると思います。MEFと#developの両方を見ることができますが、私が行った質問に対する具体的な回答を得たいと思います。
c# - dllカスタムビジネスロジック
一部のビジネスロジックがDLLプロジェクトに分離されているプロジェクトがあります。このDLLには、特定の顧客向けのこのソフトウェアのビジネスロジックが含まれています。
異なるルールを持つ別のクライアントがソフトウェアを実装したいので問題が発生しました。このdllには同じ関数名が含まれていますが、本体が異なることを考慮して、アプリケーションがソフトウェアを使用するクライアントに応じて適切なdllをロードする必要があります。
私はc#3.5を使用していますが、そうする方法はありますか?
powershell - PowerShell でインデクサーを拡張することは可能ですか?
PowerShell の型拡張機能は優れていますが、インデクサーを拡張する方法 (存在する場合) はまだわかりません。インデクサー プロパティ (System.String の場合は Chars) に ScriptProperty を追加し、ゲッター (get_Chars) に ScriptMethod を追加しようとしましたが、どちらのアプローチも効果的ではないようです。それはまったく可能ですか、それとも時間を無駄にしていますか? :)
[編集]どうやら適切なメンバー型は ParameterizedProperty ですが、それを試してみると、次のようになります。
extensibility - コードは実際にどの程度拡張可能である必要がありますか?
私は新しい仕事を始めたばかりで、新しい上司が私に話したことの1つは、コードの寿命でした。
私は常に自分のコードを無限に拡張可能で適応性のあるものにするためにコーディングしてきました。誰かが将来私のコードを変更しようとしているなら、それは簡単にできるはずだと私は考えました。
しかし、それがどれだけ未来にあるべきかについて、私は本当に明確な考えを持っていませんでした。
それで、私の新しい上司は、3年以上先はコーディングを気にしないようにと私に言いました。彼の理由は、テクノロジーの変更、プログラムの期限切れなどでした。
最初はちょっとびっくりして、彼はやっかいな仕事だと思っていましたが、考えれば考えるほど、コンセプトに熱中します。
他の誰かがあなたがコーディングすべき未来について意見を持っていますか?
nhibernate - NHibernate: ベース ドメイン エンティティを完全にオーバーライドする
と がある状況がCommon.Domain.Person
ありSpecific.Domain.Person
ます。
最初の 1 つは、共通パッケージの一部として提供する必要があります。
2 つ目は、特定のプロジェクトのニーズに合わせて共通パッケージをカスタマイズする必要がある場合に表示されます。
オブジェクト モデルでは、継承を使用して簡単に実装できます。
ただし、NH マッピングでは、小さな問題に遭遇しました。
NHibernate<subclass>
マッピングを作成できますが、それにはディスクリミネーターを使用する必要があります。ただし、特定の人物クラスが継承された場合、この特定のプロジェクト内で共通クラスのインスタンスが使用されることはありません。
基本クラスに識別子列を追加せずにこれを実装する最良の方法は何ですか?(区別する別のケースがないため)?
php - OOP/PHP は初めてです。クラスの可視性と拡張性の実用性は何ですか?
私は明らかにこれらの概念にまったく慣れていません。プロパティやメソッドへのアクセスを制限する理由がわかりません。意図した結果に従ってコードを書くだけのようです。単純にメソッドを呼び出さないのではなく、なぜプライベート メソッドを作成するのでしょうか。それは反復的なオブジェクトの作成 (私が正しく言っている場合)、複数の開発者の状況 (他の人の作業を台無しにしないでください)、または単に自分の作業を誤って台無しにしないためですか?
c# - C# で動的プラグイン ベースの機能を開発する方法
私は自分のアプリケーションにプラグイン サポートを提供するさまざまな方法を探し回っています。理想的には、コア機能を作成し、データのインポート、エクスポートなどのさまざまなプラグイン/アドオンを開発しているさまざまな顧客に基づいています...プラグイン アーキテクチャを介して C# アプリケーションを拡張可能にするために利用できる方法は何ですか?
例を作ってみましょう。メイン メニュー ([ファイル]、[編集]、[表示] など) と、さまざまなブランドの車をメーカー (フォード、GM など) ごとに表示する TreeView を備えたプログラムがあるとします。車を右クリックすると、コンテキスト メニューが表示され、オプションは [車の削除] のみです。
プラグインを展開して、1 人の顧客が TreeView で新しいブランド (たとえばホンダ) を表示できるようにアプリケーションを開発し、さらに車のコンテキスト メニューを拡張して、「車を塗装する」ことができるようにするにはどうすればよいでしょうか。 '?
Eclipse/RCP 開発では、これは拡張ポイントとプラグインによって簡単に処理されます。C# はそれをどのように処理しますか? 私は独自のプラグイン アーキテクチャを開発し、MEF について調べています。
visual-studio-2010 - Visual Studio 2010 拡張機能マネージャーがクラッシュする
試しにたくさんの拡張機能をインストールした後、VS 2010 を再起動すると、クラッシュし始めました。残念ながら、ツールを開くと一貫してクラッシュします。拡張マネージャー。完全なアンインストール/再インストールを修正して回避する方法はありますか?
イベント ログには次のようなものがあります: アプリケーション: devenv.exe フレームワーク バージョン: v4.0.30319 説明: 未処理の例外のため、プロセスが終了しました。例外情報: System.AggregateException スタック: System.Threading.Tasks.TaskExceptionHolder.Finalize() で
python - Python アプリのエンド ユーザー スクリプトとしての Python
私はPythonで書かれたアプリを持っています。ユーザーが独自のスクリプトを実行できるようにすることで、アプリ オブジェクトを操作できるようにしたいと考えています。彼らはスクリプトでエラーを起こす可能性があります。エラーが発生した場合、アプリの実行が停止しないようにしたいと考えています。アプリにデバッガーを埋め込んで、スクリプトのデバッグを支援したいと考えています。
たとえば、アプリの shape.py でポイント クラスを定義します。
次のようなスクリプトを実行できるようにしたい:
これはインタープリター、デバッガーを使用する必要があると思いますが、1) アプリで作成されたオブジェクトをスクリプトに公開する方法と、2) 次の場合にアプリが停止しないようにする方法についてはわかりません。バグによりスクリプトが停止します。
これは以前に尋ねられたに違いないと確信していますが、見つかりません。すべての回答を歓迎します。
多くのthx
デビッド
c# - 拡張可能なWPFアプリケーション-MEF、MAF、または単純な読み込み?
(他のMEF / MAFの質問については知っていますが、これはより具体的な問題です)
基本的に単純なアドインホスト、GUI、および設定であるWPFアプリケーションを作成したいと思います。実際の作業はすべて、1つ以上のプラグインによって行われます。それらは相互に通信する必要はなく、メインアプリケーションはユーザー入力/コマンドをそれらに送信し、いくつかの結果(たとえば、レンダリングするWPF UI要素)を返します。
さて、アプリケーションのコアはプラグインに基づいているので、それらを管理するための良い方法を選ぶ必要があります。実行時に(たとえば、更新が見つかってダウンロードされたときに)それらをロード/アンロード/リロードできるようにしたい。安定性と安全性のために、おそらく独自のアプリケーションドメインやプロセスで実行する必要があります。
いくつかの調査と実験から、私は3つの選択肢にたどり着きました。
System.Addin(MAF):これで必要なことはすべてできるようです。互換性などのために複数のバージョンのAPIを同時に実行できるパイプラインがあります。しかし、何かが足りない場合を除いて、APIを数回作成する必要があります。ホストビューとプラグインビュー、コントラクト、およびコントラクト用の2つのアダプターです。また、(MEFと比較して)情報やリソースはほとんどなく、ほとんどの記事は数年前のものです。これがゆっくりと死んでいくのではないかと心配しており、新しいプロジェクトには使用したくないと思います。
MEF:これはもっとシンプルに見えますが、私がコントロールできない魔法がたくさんあり、MAFほどレイヤーが分離されていないようにも感じます。新しいプロジェクトにリンクし、インターフェースを実装すればプラグインが完成する小さなライブラリが欲しいだけです。
手動ロード:最後のオプションは、フォルダーで.dllを手動でスキャンし、リフレクションを使用してプラグインクラスを検索し、インスタンスを作成することです。それは実行可能ですが、アセンブリを手動でロードしたり、個別のプロセス/アプリドメインを作成したりするよりも、何らかのフレームワークを使用したいと思います。
それで、この種のアプリケーションに最適なのはどれですか、それとも私が見逃したものはありますか?