問題タブ [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 投票する
18 に答える
323340 参照

python - __init__() が常に __new__() の後に呼び出されるのはなぜですか?

私は自分のクラスの 1 つを合理化しようとしていて、flyweight デザイン パターンと同じスタイルでいくつかの機能を導入しました。

ただし、なぜ__init__が常に after と呼ばれるのかについては、少し混乱してい__new__ます。私はこれを期待していませんでした。なぜこれが起こっているのか、それ以外の方法でこの機能を実装する方法を教えてもらえますか? (実装を に入れることは別として、__new__これはかなりハックだと感じます。)

次に例を示します。

出力:

なんで?

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

asp.net - ASP.NET でのクラスの呼び出し

私は自分の ASP.NET を知っていますが、認めざるを得ません。また、彼らとはまだ仕事をしていませんが、やりたいです。しかし、私が知っていることは、再利用のためにコードを正しく保つことができる場所であるということですか? 私のクラスは私のコードでどのように見えますか?

これは、約 3 つのフォームで使用するコードですが、1 つの場所に保存して、btnSubmit をクリックしたときに呼び出したいだけです。

上記のコードを実行するには、ここに何を配置する必要がありますか?

エティエンヌ

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

c# - ASP.NET 部分ページ クラス名のベスト プラクティス

VS 2008 で新しい asp.net ページを作成し、コード ビハインドを選択すると、通常の aspx.vb または aspx.cs ファイルも一緒に作成されます。

これらのファイルの先頭で、VS は「部分クラス」の名前、ファイル構造および/または aspx ファイルの名前を指定します。

質問: これに対するベスト プラクティスはありますか? 各ページに一意の名前を付ける代わりに、アプリケーションのすべてのページまたは単一のディレクトリに単一のクラス名を使用できますか?

クリス

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

c++ - C++ ソースからクラス図を作成しますか?

C++ ソース ファイルからクラス ダイアグラムを生成するための無料のツールはありますか。可能であれば、mfc ソース ファイルにも使用できます。

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

java - メソッドをオーバーライドしてスーパークラスのスーパークラス メソッドを呼び出す方法は?

私の一部は、これは可能であってはならないと考えていますが (可能であっても)、とにかく質問します。

次のクラス階層が与えられた場合 (GrandparentおよびParentサード パーティからのものであるため、私の管理下にはありません)、オーバーライドされた実装をバイパスして の実装を呼び出すようにオーバーライドmyMethod()するにはどうすればよいでしょうか?ChildParentGrandparent

Parentクラスが他の多くの役立つ動作を提供し、 の階層の重要な要素であるふりをします (つまり、「のサブクラスをChild作成する」ことを探しているわけではありません。ChildGrandparent

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

class-design - N 層アーキテクチャによるクラス設計

この質問は、私が以前に尋ねた質問と非常に密接に関連していますが、それらが同じものだとは思わないので、それらを分割するのが賢明だと思いました (質問を聞いたとき、これは少し皮肉なことです)。

前の質問

2 つのプロジェクトに分割された Web アプリケーションがあります。

1) ASP.NET サイト 2) ビジネス オブジェクト、ロジック レイヤー メソッド、および DAL メソッドを含む DLL。それらは異なる名前空間に分割されていますが、すべて同じ DLL 内にあります。

それを見て開発を拡張すればするほど、私は間違った道を進んでいることに気づきました。職務を明確に分離できるように、それらを個別の DLL に分割したかったのです。

さまざまな DLL のコードを取得すると、多くのクラスが互いに呼び出していることに気付きました。たとえば、クライアント オブジェクトのリストが DAL で作成されると、companyDAL.cs も呼び出され、クライアントが属する会社のリストが取得されます。これで、互いに直接参照する 2 つのクラスができました。これはかなり悪いことのようです!臭いがしましたが、続けて、できる限り物を分離しようとしました.

そのために、すべてのオブジェクトをインターフェイスに取り出し、それらへのすべての参照をインターフェイスに変更しました。

私はある種の DI を使用することを望んでいました (現時点ではそれについて学んでいます)。そのため、オブジェクトごとに、その DLL のファクトリーを取り込むコンストラクターを作成しました (このファクトリーは、クラスが可能にする各オブジェクトの新しいインスタンスを作成します)。必要とする)。また、常に 1 つのファクトリが使用されるように、デフォルト ファクトリを使用して DI コンストラクタを呼び出すデフォルト コンストラクタも追加しました。

それはすべてコンパイルされたので、スピンしてスタックオーバーフローを取得しました! これは、お互いを必要とする 2 つのクラスがある場合、もう一方なしではインスタンス化できないことを完全に認識していました。

  • 私はDIのことについてすべて間違っているのでしょうか、その工場のアイデアは大丈夫​​ですか?

  • お互いに必要なクラスを避けるにはどうすればよいですか? 現時点でそのようになっているのは、コードの繰り返しを避けるためです。よりクリーンな SQL を記述して、すべてを一度に、または少なくとも同じメソッドのいくつかのクエリで取得できると確信していますが、別の場所でコードを繰り返すことは避けようとしていました。

あらゆる提案に感謝します。

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

c# - クラス設計のヘルプ

私は次のデータベーステーブルを使用していますが、私は oop が初めてなので、ここで質問したいと思いました。

次のクラスを作成しました

また、Dal.Repository にアクセスし、各オブジェクトで crud メソッドを実行するオブジェクトごとに個別のサービス クラスを作成しました。すなわち

各オブジェクトのリポジトリもあります

すなわち

個人の割り当てと個人の詳細の両方を含む私の Web ページで、PersonService と PersonAssignmentService を呼び出していることに気づきました。

これは大変な作業のようです。私は何か間違ったことをしていますか?このようなものを設計するためのより簡単な方法があるかもしれませんが、私はそれを理解していません。

助けてくれてありがとう

ありがとう

0 投票する
11 に答える
8179 参照

class-design - プライベート フィールドとメソッドをクラスの先頭に置くのはなぜですか?

多くの言語の多くの場所でこのデファクト スタンダードを見てきましたが、理解したことがありません。プライベート フィールドとメソッドをクラス宣言の先頭に置くのはなぜでしょうか。比喩的に言えば、私的なものは一番下 (隠れている) に配置し、公開されているものはすべて一番上に配置する必要があるように見えます。そのため、クラスを上から下まで読むと、最初に公開インターフェイスが表示され、次に内部の仕組みが表示されます。

この背後にある理由は何ですか?

編集: 明確にするために、クラスの先頭ですべてのメンバーを宣言するという慣行を意味するのではなく、プライベート メンバー/メソッドをクラス宣言の先頭に配置し、パブリックの前に置きます。

0 投票する
11 に答える
10459 参照

c# - C# の静的メソッドと非静的メソッドのどちらを決定するか?

[編集]

私の最初の質問は、「なぜ静的か非静的かを決定するのですか?どちらも同じことをします...」でした。

残念ながら、私が本当に避けたかったC#固有の質問に編集されました。

だから、私はいくつかの追加をしましょう:

私がインターフェイスと言うとき、私は C# キーワード インターフェイスを意味するのではなく、C++ インターフェイスのようなものを意味します: オブジェクトを操作するための明確に定義された関数のセット。インターフェイスを弱めると言うときは、同じことを行うさまざまな関数 (静的/非静的) があることを意味します。同じことを行うさまざまな機能がある場合、私のインターフェースはもはや明確に定義されていません。

したがって、Bob the Janitor が投稿したように、Validate() 関数を実装できます。

だけでなく、

私の Copy() の例に戻るには、次のように Copy() を実装できます。

だけでなく、

また

私のドキュメントに属するすべてのファイルを含むフォルダーを考えるとき (この場合、私は具体的なインスタンスに依存していませんが、他のものに依存しています:))。

一般的に、静的クラスではなく静的メソッドについて話しているのです (申し訳ありませんが、言及するのを忘れていたら)。

しかし、Anton Gogolev が言ったように、私の Document クラスは良い例ではなく、適切に設計されていないと思うので、Single Responsibility Principle を確認する必要があると思います。

DocumentClass で動作するある種の ManagerClass を実装することもできます。

例えば:

また

しかし、アプローチ 1 を参照すると、DocumentObject で何かを行う他のオブジェクト (DocumentManager) ではなく、自分自身でタスクを実行するオブジェクトを作成する傾向があります。

(これがOOPについての宗教的な議論の方向に向かわないことを願っています;))

[/編集]


古いバージョン:

最初は、これは「いつ静的メソッドを使用し、いつ使用しないか」などの非常に基本的な質問のように見えますが、これは私が時々直面するものです (そして、本当の問題が何であるかを説明するのは困難です; おそらくそれは単に1) を使用する (しない) 理由、または 2) を使用する (しない) 理由を取得します。

(私は C# 構文を使用していますが、これは C# 制限の問題ではありません)

OOP では、オブジェクトを操作する (とりわけ) 2 つのアプローチがあります。

1) オブジェクトに何かをさせたい場合は、そうするように伝えます。

物と話しているのと同じです。

2) または、静的メソッドのファンの場合:

ある意味で、静的関数は「気分が良くなる」だけだと思います。そのため、私は静的メソッドを頻繁に使用する傾向があります (具体的なインスタンスから独立するために - 独立性は常に良いことです)。

そのため、クラスを設計するときは、アプローチ 1) とアプローチ 2) のどちらを採用するかを決定しなければならないことがよくあります。

データベースに保存する必要があるドキュメントを表す "Document" クラスがあるとします。

文書

  • ファイルシステムからの 1 つまたは複数の画像ファイルで構成されます (これらは単一のドキュメント ページになります)
  • 参考文献のようなものがあります-ユーザーがドキュメントに関する情報を追加できるフィールド-追加のファイルに保存されます
  • Copy()、AddPage()、RemovePage() などの操作が必要です。

今、私はこのクラスを作成するいくつかの方法に直面しています:

私はこれが好きです: ドキュメントに自分自身をデータベース x にコピーするように指示すると、オブジェクトはそれ自体でコピーを行います。良い。

なぜだめですか?また、いいですね、とても便利に感じます...

では、どれを実装しますか?両方?それとも、一種のヘルパー クラスに静的アプローチを適用しますか? または、アプローチ 1) を選択し、ドキュメント クラスのインターフェイスを弱体化させないように固執しますか?

両方のアプローチについて考えると、(理論的には)任意の関数を静的関数として実装できるという結論に達しました。

非静的でもあります:

実際の例を挙げると、次のようになります。

[EDIT(パラメータ fromPath を追加「すみません、忘れました」)]

[/編集]

だけでなく:

または(一種のOOP-Overkill):

では、なぜ 1) を使用する (しない) か、または 2) を使用する (しない) のか?

(Document クラスの例にはあまり集中しません。これは、優れたクラス設計に関する一般的な質問だからです。)

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

nhibernate - マスターテンプレートをモデル化する:継承するかどうか?

説明するのが簡単ではないシナリオがありますが、それは非常に一般的な問題であると確信しています。私は問題を説明するために最善を尽くします。

調査を作成できるSurveyアプリケーションがあるとします。各調査には独自の構造があります(質問が含まれている、質問がグループ化されて順序付けられているなど)。これらの調査は管理者によって管理され、マスター調査テンプレートと呼ばれます。これで、ユーザーはこれらのマスターサーベイのいずれかを選択し、カスタマイズを行って、一部の人に対してサーベイを実行できます。

したがって、基本的に、すべて同じ構造(コレクション、プロパティなど)を共有する調査がありますが、データは異なる場合があります。

DBをどのようにモデル化しますか?

私の考えは、すべてを1つのテーブルに格納し、実行されたテンプレートからテンプレートを分離する列を作成することです。

クラスをどのようにモデル化しますか?

私の考えは次のとおりです。

重要:調査には、他のクラスと多くの関係があります。サブクラス化することにした場合。それらすべてをサブクラス化する必要がありますか(各オブジェクトのマスターからデータをコピーするため)?