クラスプロパティへのアクセスを同じ名前空間内にのみ制限する方法

StackOverflow https://stackoverflow.com/questions/1613965

  •  06-07-2019
  •  | 
  •  

質問

クラスプロパティへのアクセスを同じ名前空間内に制限するにはどうすればよいですか?次のクラスを検討してください。 Contentクラスはそれ自体を公開できず、代わりにContentServiceクラス 状態を公開に変更する前にいくつかのことを行います。

public class Content : Entity, IContent
    {
        public string Introduction { get; set; }

        public string Body { get; set; }

        public IList<Comment> Comments { get; set; }

        public IList<Image> Images { get; private set; }

        public State Status { get; } 
    }

public class ContentService
    {
        public IContent Publish(IContent article)
        {
            //Perform some biz rules before publishing   
            article.Status = State.Published;
            return article;
        }
    }

記事の状態を変更できるのはContentServiceクラスのみになるようにするにはどうすればよいですか?

これに対処するのに役立つ設計パターンはありますか?

役に立ちましたか?

解決

「内部」を使用できます。同じアセンブリ内のクラスのみがContentクラスのStateメンバーを変更できるように修飾子にアクセスします(ただし、他のアセンブリの誰でも値を取得できます)。

public State Status { get; internal set; } 

これで、ContentServiceは同じアセンブリにあるため状態を設定できるようになりましたが、外部の呼び出し元は状態を取得することしかできません(設定することは許可されていません)。

他のヒント

Javaには「パッケージが表示される」という概念があります。または「パッケージプライベート」。これは、実際には、可視性を指定しないもの( private または public )のデフォルトです。何らかの理由で、これを使用する人はほとんどいません。

ContentServiceを友達として宣言しますか?

また、Javaにはアクセス修飾子がありますそれは「パッケージプライベート」に相当します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top