Dns 如何将对类属性的访问限制为仅在同一命名空间内

Dns 如何将对类属性的访问限制为仅在同一命名空间内,dns,domain-driven-design,Dns,Domain Driven Design,如何将对类属性的访问限制在同一命名空间内?考虑下面的类。内容类不能发布自身,而应发布ContentService类 在将状态更改为“已发布”之前,将执行一些操作 public class Content : Entity, IContent { public string Introduction { get; set; } public string Body { get; set; } public IList<Comment

如何将对类属性的访问限制在同一命名空间内?考虑下面的类。内容类不能发布自身,而应发布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类可以更改文章的状态


有什么设计模式可以帮助我解决这个问题吗?

Java有包可见或包私有的概念。事实上,这是任何未指定可见性“私有”或“公共”的情况下的默认设置。出于某种原因,几乎没有人使用过它。

将ContentService声明为


或者,Java具有相当于包私有的属性。

您可以使用内部访问修饰符,以便只有同一程序集中的类可以修改内容类的状态成员,但即使是其他程序集中的每个人都可以获得该值

public State Status { get; internal set; }
因此,现在ContentService可以设置状态,因为它位于同一程序集中,但外部调用方只能获得不允许设置的状态。

我不确定我是否得到了这样的信息:您是否在寻求一种方法来保护实现,使其不被自己使用不当?我一定错过了什么。。。