良い答え、すでに
私は多くの良い答えを読みました (たとえば、オブジェクト/概念の分離/組織と同様に、ドライブ フォルダーのイメージは良いものです)。
それでも、名前空間が代替案よりも優れている理由を説明するためではなく、名前空間が使用されない悪い理由を明らかにするために、「技術的」ではない他のいくつかの議論が役立つ可能性があります。
すべての C#、VB.NET、Java、C++ など、この地球上で有能な開発者は、名前空間/パッケージが優れていることを認めています。ねえ、彼らは Mozilla の JavaScript でもそれを検討しています。
スタックオーバーフローに関するあなたの質問には、「権限の引数」のタッチがあると思います... ^_^
古い習慣は死ぬのが難しい
あなたは「古い習慣」に陥っていると思います。
私は VB6 の古い習慣に対して VB.NET について直接経験したことはありませんが、C++ については単純化された C ライクな C++ に対して行います。
仕事半分…
従来の習慣に対処する場合、作業の半分は、認識せずに既に名前空間を使用していることを発見することです。
たとえば (これは、C++ 開発者が「昔ながらの」C ライクなコードと衝突する場合に最も当てはまりますが、どこでも実行可能だと思います)、シンボルに接頭辞を使用しますか。
彼らは持っていますか:
- アカウントユーザー
- 口座価格
- アカウントID
- ログインユーザー
- ログインパスワード
クラス/シンボル、およびアカウントの「ユーザー」はログインの「ユーザー」と同じではないことを説明し、それらを区別するためのプレフィックスは?
「パターン」は、シンボルにモジュールのプレフィックスを付けると、天井を通り抜けます(コードが十分に大きい場合、これは確かに当てはまります):
MyUtil DLL、MyKernel DLL および MyGui DLL はありますか? したがって、あなたは持っていますか:
- MyUtil_何か
- MyUtil_SomethingElse _
- MyKernel_YetAnotherObject _
- MyKernel_アナザーシング
- MyGui_ SomeGui
クラス/シンボル?
はいの場合は、すでに名前空間を使用していることを認める必要があります。
そうでない場合は、コードベースが小さすぎるか (ただし、「9 つのプロジェクト」ではそうではないと教えてくれます)、または名前の競合の問題が定期的に発生しています。名前空間。
残りの半分...
作業の残りの半分は、彼らの「名前空間」が言語に組み込まれているものよりも優れている理由を説明させることです (これは、致命的な暴露の脳死の推論のために、欲求不満で壁に頭をぶつけないようにする必要がある瞬間です) 。 .
繰り返しになりますが、Argument by Authority を使用できます (何? Microsoft のトップ ガン エンジニアよりもよく知っていると思いますか? ) 。彼らが使用する(または使用しない)もの。
VB.NET/.NET については、すでに十分な議論があり、C++ 名前空間の背後にあるものについては話題から外れるため、ここでは触れません。
しかし、少なくとも、組み込みの名前空間を使用すると、上記のプレフィックスはオプションになります。インターネットからの例を引用します (私は VB.NET についてあまり詳しくありません):
Imports MyWholeProject
Class HelloWorld
Public Sub Main()
Dim o As MyModuleAAA_MyObject = New MyModuleAAA_MyObject
Dim t As MyModuleBBB_MyThing = New MyModuleBBB_MyThing
Dim g As MyModuleCCC_MyGizmo = New MyModuleCCC_MyGizmo
REM etc.
End Sub
End Class
名前空間が有効になっているよりもかなり冗長です。
Imports MyWholeProject.MyModuleAAA
Imports MyWholeProject.MyModuleBBB
Imports MyWholeProject.MyModuleCCC
Class HelloWorld
Public Sub Main()
Dim o As MyObject = New MyObject
Dim t As MyThing = New MyThing
Dim g As MyGizmo = New MyGizmo
REM etc.
End Sub
End Class
そして、冗長性はコードをより不明瞭にし、その結果、バグにつながります。もちろん、MyModuleAAA を MMAAA のようなもっと短いものに置き換えることもできます...しかし、そうすると、よりあいまいなコードなどにつながります..
.NET での名前空間のその他の使用法は、次のように Google で検索できます。
プロジェクト/キャリア関連の理由
これらの理由は、プロジェクト/キャリア管理に関連しています...
メンテナンスはオプションではありません
アプリケーションが瀕死の老牛で、ラベルやコンボの内容を変更するのに 2 日間の作業が必要な場合 (実際に発生します)、リファクタリングの余分な作業を行う意味はおそらくありません。一方、リファクタリングが自動化されている場合は、とにかくそれを行う必要があります。
ただし、アプリケーションが将来使用されることになっている場合、それを妨害して過去に保持することは悪い考えです。あなたはいつかそれを支払うでしょう。メンテナンスを回避することで得られるはずの 1 時間は、それがやむを得なくなった日 (つまり、緊急で適切に実行する時間がない日) には 2 倍または 10 倍に支払われます。
自分自身を最新の状態に保つことはオプションではありません
この議論は、キャリアがあり、仕事を続けなければならないエンジニア向けです。アプリケーションと同様に、ソフトウェア エンジニアも時代遅れになる可能性があります。
そしてそれは、時代遅れの開発者が別の仕事に応募するときにも失うことを意味します. 名前空間のような単純なものを手に入れられない人に誰がお金を払いたいのでしょうか?
経験は、現在の最先端の知識と相まって良いことです。そうでない場合、それは、「オブジェクトのようなすべてのギズモを必要としなかった私の時代には、どのように優れていたのか(読み方:より単純だった)」についての恐竜時代の冷笑的で役に立たないとりとめのないものです。
自分自身を最新の状態に保つことはオプションではありません (マネージャー側)
言語の新しい機能に適応することを拒否することにより (通常、「私たちはよく知っているからです」)、エンジニアはコンクリートの靴を履いているだけであり、競合他社はおそらくランニング シューズを履いています。これは、時代遅れのチームによって作成されたアプリケーションが最終的に失われることを意味します。限目。
同様の方法で、チームは新しいエンジニアを採用します。彼らはおそらく機能を知っており、何十年も前に祖母が行ったようにプログラミングしているだけであるという事実に驚き、不満を抱くでしょう。時代遅れのチームは、新しいエンジニア (少なくとも、給料に見合うもの) をあまり長く雇用しません。
廃止された製品に取り組んでいると、トップレベルのマネージャーが最初から書き直す方が簡単だと判断しやすくなることに注意してください...そしておそらく、より給料の低いエンジニアやマネージャーがいるどこかで...