0

DataAccessレイヤーにLINQtoSQLを使用しています。データアクセス層にあるものと同様のビジネスオブジェクトがあります。

データプロバイダーにメッセージ#23が表示されます。メッセージのインスタンス化時に、メッセージコンストラクターで、MessageTypeを取得し、MessageTypeクラスの新しいインスタンスを作成し、データベースからMessageType情報を入力します。

したがって; これでメッセージのMessageTypeの名前を取得したいと思います。

user.Messages[23].MessageType.Name

また、管理者にMessageTypeを設定してもらいたい

user.Messages[23].MessageType = MessageTypes.LoadType(3);

しかし、私はユーザーがMessageType.Nameを公に設定することを望んでいません。しかし、新しいMessageTypeインスタンスを作成すると、外部クラス(データアクセス層)から設定するため、Nameプロパティのアクセス修飾子はパブリックになります。

これをプロパティからinternalに変更して、クラスがパブリック変数のようにアクセスできるようにし、他のアプリケーションがアクセスして変更できないようにすることができます。

公共の財産のように見えるので、これはまだ正しく感じられません。この状況でのパブリックアクセス修飾子は悪いですか?ヒントや提案をいただければ幸いです。

ありがとう。

4

1 に答える 1

1

プロパティはいつでも次のように定義できます。

public MessageType MessageType
{
    get { return this._messageType; }
    internal set { this._messageType = value; }
}

それがあなたが探しているものである場合、しかしそれはあなたが何を望んでいるのか少し不明確です。そのプロパティを設定できる「管理者」とは何ですか?つまり、プロパティを同じモジュールまたは「フレンド」モジュールによってコードでのみ設定する必要がある場合は、それが解決策です。

もう1つの方法は、「パブリック」モジュールIMessageのゲッターアラのみを含むインターフェイスのみを公開することです。MessageType MessageType { get; }コアモジュールにMessageは、セッターもあるフルクラスがあります。

「管理者」とは、プロパティを設定できるかどうか(たとえばGUIで)、​​現在のユーザーの役割に依存することを意味する場合、単純なプロパティセッターで解決できる単純な解決策はありません。公開する必要があります。次に、GUIのその部分が有効になるかどうかを評価するために使用し、データストアに値を保存する前に検証するために再度使用する、いくつかの凝った権利管理をコード化する必要があります。

于 2010-04-01T07:29:45.547 に答える