問題タブ [software-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.
python - クラス階層のどこにインスタンスメソッドを書くべきですか?
これは、シミュレーションモデルに使用するクラス「階層」の一部です(私のコードはPythonですが、私の質問は言語に依存しないと思います)。
質問:move
インスタンスメソッドはどこに置くべきですか?
class Agent
の依存関係を、それ自体よりも階層の下位にあるクラス(つまり、インスタンスがインスタンスに含まれているクラス)に制限することになっていると思いましたAgent
。しかし、それは、地形などを記述するクラス(少なくとものインターフェイス)への依存関係を作成するため、move
メソッドを含めることができないことを意味します-したがって、への参照(したがって依存関係)を追加したほうがよいでしょう。これはソフトウェア設計の観点からは大丈夫ですか?class Agent
Agent
World
move
別の方法は、メソッドをに配置することです。このclass World
場合、追加の依存関係は発生しません。ただし、class World
ほとんどすべての作業を行うことになり、OOPの主なアイデア(すべての機能を1つの場所にまとめるのではなく、関連するクラスに含めることを理解しています)に反するように思われます。 。
パフォーマンスの考慮事項はわずかな懸念事項にすぎません(とにかく、パフォーマンスが2つのアプローチ間で異なるとは思いません)。
編集:上記の「クラス階層」という言葉を誤用しました。私は継承階層について言及しているのではなく、インスタンスが相互に含まれている一連のクラスについて言及していました。
architecture - セッターの連鎖:欠点はありますか?
私は、jQueryから採用された、セッターでのチェーンと呼ばれる手法を使い始めました。例:
複数のプロパティを非常に簡単に設定できるので、この方法が好きです。
欠点はありますか?私はこれについて何人かのJavaプログラマーに尋ねました、しかし彼らが言うことができるのはそれが「良くない」ということだけです、しかし彼らは私にその理由を適切に説明することができませんでした。
php - PHP でクラスを使用する理由
PHPでクラスを使用する理由を知りたいです。すべてのオープンソースで、クエリを実行するためにクラスを使用しているのを見てきました。mysql_query()
結果の取得、クエリの挿入などにクラスを使用することを意味します。これは一貫性と高速化のために使用されると思いますが、オブジェクトリンクを作成するのではなく、を使用してクエリを実行する$db->query
と、2番目のものと比較して高速に実行されます。関数に移動してそこで実行し、その後結果を返しますが、その場合はmysql_query()
同じ場所でクエリを実行します。だから私はmysql_query()
速く実行すると思います。では、なぜクラスとオブジェクトを使用してクエリを実行するのでしょうか? クラスを使用する利点は何でしょうか?
c++ - これはまずまずのソフトウェア設計ですか?
私は現在、C ++でゲームに取り組んでいます。ガベージ コレクターがないため、オブジェクトを常に慎重に削除し、削除されたオブジェクトがアクセスされないようにする必要があります。
プロジェクトが成長するにつれて、いくつかのオブジェクトがますます多くの場所から参照されるようになります。たとえば、ゲーム内のユニットは、レンダラー、シーン階層、選択メカニズム、HUD などから参照される場合があります。現在 - オブジェクトが削除された場合、このオブジェクトを参照する他のすべてのクラスに通知されるようにする必要があります。
または、逆に言えば、ユニットの1つを参照する可能性のある新しいクラスを作成する場合、ユニットのコード(またはユニットマネージャーまたはユニットを削除するモジュールのコード)も変更する必要があります。この新しいモジュールが、現在参照している特定のユニットがいつ削除されるかを確実に認識できるようにします。
今、私は、別のオブジェクトがサブスクライブできるベースクラスを作成することにより、この問題を解決するための単純なイベント駆動型の汎用アプローチがあると考えています。このようなもの:
それで、新しいクラスからこのクラスを継承するオブジェクトを参照する場合、自分自身をサブスクライバーとして追加するだけで、オブジェクトが他の場所から削除される場合、それについて通知されます。
これは「クリーンな」コーディング方法ですか?
zend-framework - Zend Framework 内で拡張機能/プラグインをどのように処理しますか?
私のクライアントの 1 人のために、CMS を開発する必要があります。たとえば、次の機能が必要です。
- スキン可能 (レイアウトと拡張機能)
- zip アーカイブをアップロードして処理できます (画像が含まれています)。
- クラシック ページ (wordpress、joomla の記事)
- お問い合わせフォーム
- カタログ
- カート
Zend Framework に慣れているので、Zf を使って開発したいと思っています。
非常にモジュール化されたアプリケーションを作成したいと考えています。Modx、Wordpress、Joomla、Magento で遊んだ経験が、悪い設計を回避するのに役立つことを願っています。
拡張機能/プラグインをプラグインし、定義された規則を使用してそれらをカスタマイズできる最小限のコア システムが必要です。
たとえば、私の「コア」機能の 1 つでも、これらの拡張機能の 1 つになることを望みます。
私の機能には次のものがあります。
- 管理インターフェース
- カスタム/デフォルトのスキン/テーマ
- モデル
- 必要な備品
- 構成ファイル (xml/ini)
- コントローラー
- ビュー
だから私の質問は、そのようなデザインをどのように処理しますか? いいですか?
拡張機能をアプリに登録する方法、レイアウトやコントローラー内で拡張機能を使用する方法について疑問に思っています。
設計がアプリケーションのすべての開発を定義するため、どのように開始すればよいかわかりません。
私はすでに ZF 1.1/2、Doctrine 2、jQuery/Dojo を使用することに決めました (Dojo についてはまだわかりません)。
data-structures - 図書館のデータ構造を借りる
まず、宿題の質問です。私は十分長い間、実装について熟考してきました。
次の機能を備えたライブラリソフトウェアを考えて実装する必要があります。
- 新しいサブスクライバーを追加/削除します。
- 本を借りる/返す。
- 次の購読者はどの本を持っていますか?
- 次の本を持っている加入者は誰ですか?
- ほとんどの本を持っている購読者のリスト。
ヒープと2つの赤黒木を実装することを考えましたが、問題はスペースの複雑さが高いことです。だから私は何かが足りないのだろうかと思っていました。
購読者はIDによって保存され、本にはコードネームがあります。1つの赤黒木は購読者用で、もう1つは借りた本用です。ヒープは、最後の要件を実装するための最大ヒープです。
データ構造以外は使えません。
洞察と回答をありがとう。
oop - 2つの観点からのドメインのモデリング
私は自分のシステムのドメインをモデル化しようとしていますが、出くわして問題が発生し、いくつかの助けを借りて行うことができます。
私の問題は視点の1つです。多数の注文エンティティを持つ顧客エンティティがあり、選択した顧客のすべての注文を一覧表示する必要があるシステムをモデル化しています(パースペクティブ1)。したがって、注文のコレクションを含むCustomerクラスをモデル化しました...単純です。ただし、システムはすべての注文を顧客の詳細(パースペクティブ2)とともに一覧表示する必要があることに気付きました。これは、各注文から1つの顧客参照があることを意味します。
問題は、それぞれの観点から、興味のないオブジェクトを作成するのに時間がかかることです。たとえば、注文のリストを表示すると、注文ごとに顧客インスタンスが作成されます。次に、Customerインスタンスは、彼らが行った注文のコレクションを保持します(この観点から、私は興味がありません!!)。
誰かが提案を手伝ってもらえますか?私は以前にこの問題に遭遇したことがありますが、適切なソリューションを設計するために時間をかけたことはありません。
よろしく、
JLove
python - python:抽象基本クラス'__init __():初期化または検証?
class ABC
「抽象基本クラス」です。class X
そのサブクラスです。
のサブクラスで実行する必要のある作業がいくつかありますがABC
、これは忘れたり、間違って実行したりするのが簡単です。私は次のABC.__init__()
いずれかでそのような間違いを見つけるのを手伝いたいと思います:
(1)その作業を開始する、または(2)それを検証する
super().__init__()
これは、が最初に呼び出されるか、最後に呼び出されるかに影響しX.__init__()
ます。
説明のための簡単な例を次に示します。
のすべてのサブクラスにABC
属性が必要registry
であり、それがリストである必要があるとします。ABC.__init__()
(1)初期化するregistry
か、(2)正しく作成されたことを確認することができます。以下は、各アプローチのサンプルコードです。
アプローチ1:ABCで初期化
アプローチ2:ABCで検証する
どちらがより良いデザインですか?
validation - ソフトウェア設計について: パラメータはどこで確認する必要がありますか?
ユーザーに名前、カテゴリ リストを要求するアプリケーションがあるとします。ユーザーが保存ボタンをクリックすると、アプリケーションは名前とカテゴリをデータベースに保存します。
UI から名前とカテゴリを取得するレイヤーがあります。このレイヤーは、名前 (長さ > 0 の文字列) があるかどうかを確認します。これが正しければ、カテゴリ名を別のレイヤーに渡します。注: カテゴリは、常に 1 つの項目が選択されているラジオボタン リストです。
この 2 番目のレイヤーでは、アプリケーションはカテゴリに応じて、名前を保存する適切なクラスを選択します。
最後のレイヤーでは、クラスはこの名前をデータベースに保存します。このクラスでは、名前が空かどうかを確認します。
私の質問は、メソッドの入力パラメーターを確認する適切な場所はどこですか? すべてのレイヤーで?たぶん、これらのレイヤーを他の開発で使用するつもりです。
私の例は正しいですか?たぶん、データベース層に検証を残して、UI 層に例外を発生させることができます。
com - comでの集約、封じ込め、および委任の説明
集約、封じ込め、委任の違いは何ですか?