- - PR -
パッケージでのアクセス制限
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-30 11:02
現在、ASP.NET(VB.NET)で開発しています。
基本的な質問で恐縮です。 UMLでいうパッケージでアクセス制限をかけたいのですが 方法はないのでしょうか? あるクラスについては、同じパッケージからしか利用できないようにしたいのです。 VB.NETでは、名前空間がパッケージに相当すると思うのですが、 「あるクラスについて、同じ名前空間からしかアクセスできなくする」 という制限はできないと理解しています。 (取り違えているのかもしれませんが) もしそうなら、同じことを多少強引でもいいので実現するには どんな方法があるでしょうか? パッケージ毎にプロジェクトをわけるというのも考えましたが、プロジェクトの管理が大変になってしまうので、よろしくないと判断しました。 パッケージに役割をするクラスをつくり、そのクラスの中にクラスをつくる、 というのも考えましたが、クラスの中にクラスを作るというのが よく理解できていないため、混乱してしまいました。 みなさんはどうされているのでしょうか? 良い案がありましたら教えてください。 よろしくお願いします。 | ||||||||
|
投稿日時: 2006-03-30 11:37
・・・それはよろしいのですが、
こちらの方が遥かに大変です。(そんなクラスなんて管理したくないです) 素直に「アセンブリ」を分けて Friend (internal) にしましょう。 そもそも、ひとつのアセンブリにしてしまった以上、 その中でこういったアクセス制御をする必要性が感じられません。 名前空間の目的は衝突を防ぐことであって、同一アセンブリ内の都合は考えていないハズです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-30 11:42
いいえ。違います。 .NET では、名前空間はクラス名の一部でしかありません。 この辺は、Java と少し扱いが違います。
ということなら、管理単位は名前空間ではなく「アセンブリ」が適切です。 C# では internal キーワードを使用して、クラスの利用範囲を同一アセンブリ内にのみ限定します。 | ||||||||
|
投稿日時: 2006-03-30 11:56
ありがとうございます。やはり勘違いしていたようです。 では、例えば 社員ロジッククラスと、社員DBクラス(DBとやりとりするクラス) があって、 社員DBクラスは、社員ロジッククラスからしかアクセスできない ということを実現するのは無理なのでしょうか? パッケージなり、名前空間なり、クラスをいれる箱があって、 社員という箱の中に、社員ロジッククラスと社員DBクラスをいれて、 社員DBクラスは、その箱の中からしかアクセスできない のようなことができるとうれしいのですが。 細かい単位でそれをやりたいと思っているので、 アセンブリをわけるのはやりたくないと思っています。 | ||||||||
|
投稿日時: 2006-03-30 12:12
無理というのは御幣がありますが... ところで、アクセスレベルに拘るのは良いことですが、それでも完全には防げません。 リフレクションを使えば、プライベート メンバであっても呼び出せますから。
それだけ単純であれば、インナークラスにしてみてはいかがでしょう? でも、イメージ的に「利用する側・される側」だけでは内包関係としては正しくないんですよね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-30 13:29
そうですね。アクセスレベルにこだわりすぎたのかもしれません。 (できるだけ隠せるものは隠したかったので・・・) ありがとうございました。 |
1