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

时间:2009-10-23 14:49:09

标签: dns domain-driven-design

如何将对类属性的访问限制在同一名称空间中?考虑以下课程。 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类可以改变文章的状态?

是否有任何deisng模式可以帮助我解决这个问题?

3 个答案:

答案 0 :(得分:0)

Java具有“包可见”或“包私有”的概念。实际上,这是您未指定可见性(privatepublic)的任何内容的默认值。出于某种原因,几乎没有人使用过它。

答案 1 :(得分:0)

将ContentService声明为friend

或者,Java有一个access modifier,相当于“package-private”。

答案 2 :(得分:0)

您可以使用“内部”访问修饰符,以便只有同一个程序集中的类可以修改Content类的State成员(但是即使在其他程序集中的每个人都可以获取该值)。

public State Status { get; internal set; } 

所以现在ContentService可以设置状态,因为它在同一个Assembly中,但外部调用者只能获取状态(不允许它们设置)。