Como restringir o acesso a uma propriedade de classe para apenas dentro do mesmo namespace
-
06-07-2019 - |
Pergunta
Como restringir o acesso a uma propriedade de classe para dentro do mesmo namespace? Considere a seguinte classe. A classe de conteúdo não pode publicar-se, em vez da classe ContentService vai fazer algumas coisas antes de alterar o estado para publicado.
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;
}
}
Como posso torná-lo tão somente a classe ContentService pode alterar o estado do artigo?
Existem padrões deisng para me ajudar a lidar com isso?
Solução
Você pode usar o modificador de acesso "interno" de modo que apenas as classes dentro da mesma Assembleia pode modificar Estado membro da classe de conteúdo (mas todos mesmo em outros conjuntos pode obter o valor).
public State Status { get; internal set; }
Então, agora ContentService pode definir o estado, porque ele está na mesma Assembleia, mas os chamadores externos só pode obter o estado (que não estamos autorizados a defini-lo).
Outras dicas
Java tem a noção de "pacote visível" ou "pacote privado". Esta é de facto o padrão para qualquer coisa onde você não especificar a visibilidade (private
ou public
). Por algum motivo, quase ninguém usa isso.
Declare ContentService como um amigo ?
Como alternativa, Java tem um acesso modificador isso equivale a "pacote-privadas".