web-dev-qa-db-ja.com

名前空間とクラス名の競合を回避する

電卓アプリケーションを開発しているとしましょう。 Calculatorというクラスが1つあります。したがって、私の名前空間の構造は次のようになります。

MyCompany.Calculator.Core.Calculator

残念ながら、名前空間とその型には同じ名前を使用してはならないため、これは正しくありません。これは this other SO question で完全に説明されています。 その質問への回答 の1つは、Utilネームスペースのサフィックス。これは次のようになります。

MyCompany.CalculatorUtil.Core.Calculator

これにより、プログラミング言語の命名のあいまいさが解決されます。ただし、この種の命名は、適切なDDD命名規則とは矛盾しています。Utilは、「イタチ語」のように見えるため ユビキタス言語での命名に関するこの記事 そしてこれらは避けられるべきです。

電卓の場合、ここで競合を回避する最良の方法は何ですか?

私が開発しているアプリケーションは、単純な計算機よりもはるかに複雑ですが、原則はまだ残っています。

7
w0051977

アプリケーションの名前は「電卓」ですか?その場合、その名前はすでに使用されていることがあります。

名前空間の一部としてmyCompanyを使用しないこともお勧めします。標準的な方法は知っていますが、会社名は変わります。

ただ持っている:

MyApplicationsRealName.App
MyApplicationsRealName.LibraryName.ClassName
2
Ewan

電卓アプリケーションを開発しているとしましょう。これには、Calculatorというクラスが1つあります。

クラス名Calculatorは何を表すと思いますか?その名前を読んだだけで、何がそこに見つかると思いますか? UI、ドメインロジック、データ、アプリケーション開始コード?このクラス名はあいまいすぎて意味がありません。

したがって、電卓アプリケーションを設計する場合は、UIのCalculatorDialogクラス、ドメインロジックのCalculatorControllerまたはCalculatorLogicCalculatorPresenterまたはCalculatorViewModel(MVPまたはMVVMアーキテクチャーを作成する場合)、およびCalculatorState(永続化のためにオブジェクトに明示的に状態を配置する場合)。アプリケーションのエントリポイントには、Programクラスなどのインフラストラクチャクラスがさらに存在する場合があります。しかし、Calculatorというクラスではなく、この名前は名前空間レベルでのみ意味があり、クラスレベルでは意味がありません。

これはこの特定の例に限定されません。プログラムまたはライブラリは常に異なる部分で構成されています。したがって、それらの部分にプログラム名と明確に区​​別できる名前を付け、他の部分と区別できるようにすると、問題は発生しません。

2
Doc Brown