問題タブ [class-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.

0 投票する
5 に答える
322 参照

oop - 非正規化された値をビジネス オブジェクトにどのように取り込んでいますか?

私は2つのテーブルを持っています。

注文 - 列 OrderID、OrderStatusID を持つ
OrderStatus - 列を持つ OrderStatusID、説明

データベースを呼び出し、コードで使用するためにそのプロパティを入力する Order オブジェクトがあります。現在、Order.OrderStatusID にアクセスできますが、アプリケーションでは「説明」フィールドにアクセスする必要があります。

優れた OO 設計でこれをどのようにエレガントに処理しますか?

0 投票する
2 に答える
969 参照

c# - POCO オブジェクトの Not-Null 制約

私は現在、金融アプリケーションを作成しており、非常に標準的な顧客テーブルがあります。多くの必須フィールドと、Cell/Fax などのオプション フィールドで構成されています。NHibernate を ORM として使用しており、すべてのマッピングが正しく行われています。すでに機能しています。

コメントせずにフィールドがnullではないことをコードで「表現」するにはどうすればよいのでしょうか。これを文書化した hbm.xml ファイルがありますが、このようなことを調べるのはちょっと厄介です。

他に思いつくのは、レポジトリが自分のロジックで NHibernate 例外をスローしないようにすることです。そのため、コントローラーで検証ルートに進む必要があるかもしれません。それでも、一部のフィールドが null になる可能性があることを POCO コードで表現するにはどうすればよいでしょうか?

クラス図

ご覧のとおり、携帯電話とファックスはオプション、電話は必須にしたいと考えています。これらはすべて単なる複合マッピングであるため、マッピング ファイルでは、それぞれの単一要素が非 null でなければならないことを指定しているだけですが、NullReferenceException が発生するのを避けるために、Person.Cellular != null チェックを常に実行するのは嫌いです。

0 投票する
2 に答える
1589 参照

class-design - POJO/POCO のリッチ ドメイン モデルを構成するものは何ですか?

違いは何ですか

  • 単純なフィールド アクセサー ミューテータークラス
  • 豊富なモデル化されたクラス

ビジネス ドメイン クラスのリッチ モデリングを構成する要素は何ですか?

0 投票する
5 に答える
155 参照

oop - 意味的に関連する入力を収集するためのオブジェクトに最適な名前は?

HTML フォーム生成ライブラリを作成しています。最上位に Form クラスがあり、最下部には HTML フォーム入力オブジェクトの各タイプ (Select、Textfield、Radio など) のクラスがあります。間に、意味的に関連する 1 つ以上の入力オブジェクトのグループを保持するクラスがあります。

たとえば、このクラスの 1 つのタイプを「Login」と呼び、Textfield 入力と Password 入力を含めることができます。別の例として、フォーム ライブラリの主な用途はオンライン アンケートの生成であるため、中間クラスはさまざまな種類のアンケートの質問になります。

私の質問は、これらの中間レベルのクラスを一般的に何と呼ぶか​​です。私たちのワーキング グループ内で提案されたものには、「セット」、「フィールドセット」、「グループ」、「ブロック」、「チャンク」、および「集塊」があります。

これらの提案のいくつかは「大丈夫」ですが、どれも「これで終わりです」とは言えません。割り込み。(最も近いのは後者ですが、それは(a)長すぎ、(b)スペルミスの可能性が高すぎます。)誰かより良い提案はありますか?

0 投票する
7 に答える
3762 参照

c++ - 非メンバー非フレンド関数構文

メンバー関数と同じ「ドット」表記を使用して、オブジェクトで非メンバー非フレンド関数を使用する方法はありますか?

(任意の) メンバーをクラスから取り出して、ユーザーにいつもと同じように使用させることはできますか?

より長い説明:

Scott Meyersや Herb Sutter などは、非メンバー非フレンド関数はオブジェクトのインターフェイスの一部であり、カプセル化を改善できると主張しています。私は彼らに同意します。

しかし、最近この記事を読んだ後: http://www.gotw.ca/gotw/084.htm構文の意味に疑問を感じています。

その記事で、Herb は、単一insertの 、erase、およびreplaceメンバーと、同じ名前の複数の非メンバー非フレンド関数を持つことを提案しています。

これは、私が思うように、いくつかの関数はドット表記で使用し、他の関数はグローバル関数として使用する必要があると Herb が考えていることを意味するのでしょうか?

編集:

非常に有益な回答をありがとうございますが、私の質問のポイントが見落とされていると思います。

演算子の特定のケースと、演算子が「自然な」表記をどのように保持するかについては特に言及しませんでした。また、すべてを名前空間にラップする必要もありません。これらのことは、私がリンクした記事に書かれています。

質問自体は次のとおりでした。

記事の中で、Herb は、1 つの insert() メソッドをメンバーにし、残りを非メンバー、非フレンド関数にすることを提案しています。

これは、insert() の 1 つの形式を使用するにはドット表記を使用する必要があり、他の形式では使用しないことを意味します。

それは私だけですか、それともクレイジーに聞こえますか?

おそらく単一の構文を使用できると思います。(Boost::function が mem_fun の *this パラメーターを取る方法を考えています)。

0 投票する
1 に答える
316 参照

class-design - コードの「設計の望ましい特性」の完成

私には漠然としているように見えるポイントは次のとおりです。
「ハイファンイン」:特定のクラスを使用するクラスが多数あります。下位レベルでのユーティリティ クラスの適切な使用。
「低ファンアウト」: 特定のクラスで他のクラスをあまり使用しないでください。
それは、特定のクラスでいくつかの小さなユーティリティ クラスを使用することさえできないということですか?

0 投票する
6 に答える
6203 参照

c# - 「パブリック」ネストされたクラスかどうか

クラス'Application'があるとします。初期化するには、コンストラクターで特定の設定が必要です。また、設定の数が多すぎて、独自のクラスに配置する必要があると仮定しましょう。

このシナリオの次の2つの実装を比較してください。

実装1:

実装2:

私にとっては、2番目のアプローチが非常に望ましいです。2つのクラス間の関係を強く強調しているため、読みやすくなっています。どこでもApplicationクラスをインスタンス化するコードを書くと、2番目のアプローチはよりきれいに見えます。

ここで、Settingsクラス自体に同様の「関連」クラスがあり、そのクラスにも同様のクラスがあると想像してみてください。そのようなレベルを3つだけ実行すると、「ネストされていない」場合にクラスの命名が手に負えなくなります。ただし、ネストした場合でも、物事はエレガントなままです。

上記にもかかわらず、StackOverflowで、ネストされたクラスは外部に表示されない場合にのみ正当化されると言っている人を読んだことがあります。つまり、それらが含まれているクラスの内部実装にのみ使用される場合です。よく言われる反対意見は、クラスのソースファイルを含むサイズを肥大化させることですが、部分的なクラスはその問題の完璧な解決策です。

私の質問は、ネストされたクラスの「公開された」使用になぜ警戒するのかということです。そのような使用に反対する他の議論はありますか?

0 投票する
4 に答える
9508 参照

c++ - Visual Studio 2005の「エラーC2039:'{ctor}':のメンバーではありません」を解決するにはどうすればよいですか?

Visual Studio2005でC++を使用してテンプレートクラスを拡張しています。次のコマンドを使用してテンプレート基本クラスを拡張しようとすると、エラーが発生します。

オブジェクトをインスタンス化しようとすると、2番目のエラーが発生します。

エラー1:

** redblacktreeopengl.hpp(27):エラーC2039:'{ctor}':[K = double、D = std::string]の'RedBlackTree'のメンバーではありません**

エラー2:

main.cpp(50):コンパイル中のクラステンプレートインスタンス化'RedBlackTreeOGL'への参照を参照してください

0 投票する
6 に答える
8558 参照

oop - コピーコンストラクタの何が問題になっていますか?なぜCloneableインターフェースを使用するのですか?

C ++をプログラミングするとき、私たちは必要に応じてコピーコンストラクターを作成していました(またはそう教えられました)。数年前にJavaに切り替えたとき、代わりにCloneableインターフェースが使用されていることに気づきました。C#は、ICloneableインターフェイスを定義する同じルートをたどりました。クローン作成はOOPの定義の一部であるように私には思えます。しかし、なぜこれらのインターフェイスが作成され、コピーコンストラクターが削除されたように見えるのでしょうか。

考えてみると、(基本型への参照のように)型がわからないオブジェクトのコピーを作成する必要がある場合、コピーコンストラクタは役に立たないだろうと思いました。これは論理的なようです。しかし、私が知らない他の理由があるのではないかと思います。その理由として、Cloneableインターフェースがコピーコンストラクターよりも好まれてきました。

0 投票する
1 に答える
1219 参照

iphone - iPhone 開発 - 親にデータを返す UIImagePickerController のようなクラスの作成

複数のビュー (個人情報 -> プロフェッショナル情報 -> プロセス完了など) を使用してユーザーから入力を取得する必要がある状況があります。

ユーザーからの入力を受け取り、データを親クラスに返す UIImagePickerController のようなクラスをどのように構築できますか? ビューもこのクラスによって処理されることに注意してください。