問題タブ [architecture]
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.
php - PHP アプリケーションのプラグインを許可する最良の方法
PHP で新しい Web アプリケーションを開始しています。今回は、プラグイン インターフェイスを使用して拡張できるものを作成したいと考えています。
プラグインが特定のイベントにアタッチできるように、コードに「フック」を書き込むにはどうすればよいでしょうか?
c - C用の優れたSTLのようなライブラリ
ベクトル、両端キュー、スタック、ハッシュマップ、ツリーマップ、セットなどのデータ構造を持つCに適したライブラリは何ですか?プレーンCをお願いします。プラットフォームに依存しません。
architecture - N 層ソリューションを使用する否定的な理由はありますか?
私は会社に入社してまだ 2 週間ですが、DotNetNuke の .NET 3.5 Team Foundation を使用してシステムの新しいプラットフォームを開始しています。私たちの「アーキテクト」は、1 つのクラス プロジェクトを使用することを提案しています。もちろん、私は「3 層」アーキテクチャー (ビジネス、データ、Web クラスのプロジェクト) を考えています。
このアーキテクチャを使用することの欠点はありますか? プロは、コードをデータから分離し、クラスオブジェクトをコードから遠ざけるなどです。
java - Java アプリケーションをどのように構築すればよいですか? クラスはどこに配置すればよいですか?
まず第一に、私は Java アプリケーションを構築する方法を知っています。しかし、私はいつもクラスをどこに置くかについて困惑しています。厳密にドメイン指向の方法でパッケージを編成することを支持する人もいれば、階層ごとに分ける人もいます。
私自身、ずっと悩んできた
- ネーミング、
- 配置する
そう、
- ドメイン固有の定数をどこに置きますか (また、そのようなクラスに最適な名前は何ですか)?
- インフラストラクチャとドメイン固有の両方のクラスをどこに配置しますか (たとえば、ファイルをデータベースまたはデータベースに格納する FileStorageStrategy クラスがあります)。
- 例外をどこに置くか?
- 参照できる基準はありますか?
architecture - 異なるロジック層のインターフェイス
GUI、ビジネス ロジック、データ アクセスの 3 層に分割されたアプリケーションがあるとします。ビジネス ロジック レイヤーでは、ビジネス オブジェクト (ゲッター、セッター、アクセサーなど) を記述しました。ビジネス ロジック層へのインターフェイスは、ビジネス ロジックの安全な使用を保証するため、呼び出すすべてのメソッドとアクセサーが入力を検証します。
これは、信頼できる適切に定義されたインターフェイスを持っているため、最初に UI コードを作成する場合に最適です。
しかし、ここで注意が必要なことがあります。データ アクセス レイヤーを書き始めると、ビジネス ロジックへのインターフェイスがニーズに対応できなくなります。非表示になっている/使用されているフィールドを設定するには、より多くのアクセサーとゲッターが必要です。ここで、ビジネス ロジックのインターフェイスを侵食する必要があります。UIレイヤーにはビジネス設定がないUIレイヤーからフィールドを設定できるようになりました。
データ アクセス レイヤーに必要な変更が原因で、ビジネス ロジックへのインターフェイスが侵食され、ビジネス ロジックに無効なデータを設定することさえ可能になりました。したがって、インターフェースはもはや安全な使用を保証しません。
問題を十分に明確に説明したことを願っています。インターフェイスの侵食を防ぎ、情報の隠蔽とカプセル化を維持しながら、異なるレイヤー間で異なるインターフェイスのニーズに対応するにはどうすればよいでしょうか?
c - コマンドラインからメッセージをプログラムに送信
私はこのプログラムを持っています。これをホストと呼びます。ホストはあらゆる種類の優れた機能を実行しますが、実行中にコマンド ラインから入力を受け入れることができる必要があります。これは、何らかの方法で他のプロセス データを送信してから終了する必要があることを意味します。たとえば、次のことができる必要があります。
これはどういうわけか、呼ばれるホストで何らかの関数を呼び出すことになるはずです
ホストは C プログラムであり、複数のインスタンスをサポートする必要はありません。
この例は、Amarok 音楽プレーヤーです。Amarok を実行して再生している状態で、「amarok --pause」と入力すると、音楽が一時停止します。
LinuxまたはWindowsでこれを実行できる必要があります。できればLinux。
これを実装する最もクリーンな方法は何ですか?
c - C 関数ポインターでより多くのパラメーターを渡す
チェスのプログラムを作成しているとしましょう。私には機能があります
これは、有効な移動ごとに関数ポインター アクションを呼び出します。これで問題ありませんが、アクション関数にさらにパラメーターを渡す必要がある場合はどうすればよいでしょうか? 例えば:
関数ポインターを再定義することは、最適な解決策ではありません。foreachMove 関数は用途が広く、コード内のさまざまな場所で参照されています。これらの参照のそれぞれが、必要のないパラメーターを含めるために関数を更新する必要があるのは意味がありません。
ポインターを介して呼び出している関数に追加のパラメーターを渡すにはどうすればよいですか?
architecture - 設計に関する議論: バージョン管理されたオブジェクトを保存および操作するための良い方法は何ですか?
最初は意図的に曖昧なままにしておきます。私は議論を求めており、難しい答えを探しているよりも重要な問題は何かを探しています。
ポートフォリオ管理のようなアプリを設計中です。今まで持っていたデザインは
- 問題: 解決する必要がある問題
- 解決策: 1 つまたは複数の問題に対する提案された解決策
- 関係: 2 つの問題、2 つの解決策、または問題と解決策の間の関係。さらに次のように分類されます。
- 親子 - ある種の分類 / ツリー階層
- 重複 - 2 つの解決策または 2 つの問題が実際に同じ概念に対処している度合い
- アドレス - 問題が解決策に対処する程度
私の質問は、これらの物事の時間的性質についてです。問題が発生し、消えていきます。ソリューションには予想される解決日がありますが、それは開発中に変更される可能性があります。関係の程度は、問題や解決策が進化するにつれて、時間の経過とともに変化する可能性があります。
では、問題は、ポートフォリオの現在と過去の両方の視点を得ることができるように、これらのもののバージョン管理に最適な設計は何ですか?
後で:@Eric Beardの答えはアップする価値がありますが、おそらくこれをより具体的な質問にする必要があります。
私は 3 つのデータベース設計を検討しました。それぞれの欠点を示すのに十分です。私の質問は次のとおりです。どれを選ぶか、またはもっと良いものを考えられますか?
1: 問題 (および個別に解決策) は、バージョン管理において自己参照的です。
新しいバージョンが必要になるたびに、その長いdescription
列を含む行全体を複製する必要があるため、これは問題です。
2: 新しい関係タイプを作成します: バージョン。
これにより、リレーションシップが問題テーブルとソリューション テーブルからリレーションシップ テーブルに移動するだけです。同じ重複の問題ですが、私はすでに抽象的な関係の概念を持っているので、おそらく少し「きれい」です。
3: より Subversion に似た構造を使用します。問題と解決策のすべての属性を別のテーブルに移動し、それらをバージョン管理します。
これは、問題または解決策の現在のバージョンをロードするには、属性のすべてのバージョンを取得し、それらを日付順に並べ替えてから、最新のものを使用する必要があることを意味します。それはひどいことではないかもしれません。私にとって本当に悪いと思われるのは、データベースでこれらの属性をタイプチェックできないことです。そのvalue
列はフリーテキストでなければなりません。name
列を、列を持つ別のattribute_names
テーブルへの参照にすることはできますが、それはテーブルの正しい型を強制type
しません。attributes
後でまだ:複数テーブルの外部キーに関する@Eric Beardのコメントへの応答:
悲しいかな、私が説明したことは単純です。物事には 2 つのタイプ (問題と解決策) しかありません。私は実際に約 9 つか 10 の異なる種類のモノを持っているので、あなたの戦略の下に 9 列から 10 列の外部キーがあるでしょう。単一テーブルの継承を使用したかったのですが、Things には共通点がほとんどないため、それらを 1 つのテーブルに結合するのは非常に無駄です。
architecture - システム統合はどのように行っていますか?
さまざまな人々がシステムの統合をどのように解決しているかに興味があります。ここ数年、システムを統合する作業がますます増えており、この種の作業の必要性も同様に増加していると感じています。
接続される独自の小さなサービスを開発して解決するのか、それとも何らかの製品 (WebSphere、BizTalk、Muleなど) を使用するのか疑問に思っています。また、これらの種類のソリューションがどのように管理および保守されているか (セキュリティ、計測などをどのように解決するか)、ソリューションでどのような問題を経験したかなどを知ることも興味深いと思います。
architecture - 名前空間/ソリューション構造
このような一般的な質問をしたことをお詫びしますが、それは私にとってやりがいのあることです。私のチームは、何年にもわたって進化してきたランダムな1回限りのコードベースをすべてまとめる大規模なプロジェクトに着手しようとしています。このプロジェクトは、会社全体の論理エンティティ(「顧客」、「従業員」)、小さなタスク、小さなタスクを制御する大きなタスク、およびユーティリティサービスを対象としているため、構造化するための最良の方法を見つけるのに苦労しています。名前空間とコード構造。
先に進むのに十分な詳細を提供していないと思いますが、ドメインを論理的に分割する方法についてのリソースやアドバイスはありますか?役立つ場合は、この機能のほとんどがWebサービスを介して公開されます。私たちは、最新のギズモとガジェットをすべて備えたMicrosoftショップです。
- 参照を簡単にするためにサブプロジェクトを使用した1つの大規模なソリューションについて議論していますが、それでは扱いにくくなりますか?
- レガシーアプリケーションの機能をまとめる必要がありますか、それとも名前空間に完全に依存しないままにする必要がありますか(たとえば、
OurCRMProduct.Customer
クラスとジェネリッククラスの作成)?Customer
- 各サービス/プロジェクトには独自の
BAL
とDAL
が必要ですか、それともすべてが参照する完全に別個のアセンブリである必要がありますか?
私はそのような広範囲にわたるプロジェクトを組織した経験がなく、1回限りのことなので、私が得ることができるガイダンスを探しています。