访问修饰符 - 业务对象上的属性 - 获取和设置

时间:2010-04-01 07:07:23

标签: c# data-access access-modifiers data-access-layer

我正在为DataAccess层使用LINQ to SQL。 我有类似于数据访问层中的业务对象。

我有数据提供者收到消息#23。在消息的实例化中,在消息构造函数中,它获取MessageType并创建MessageType类的新实例,并从数据库中填充MessageType信息。

因此;我想要这个获取消息的MessageType的名称。

user.Messages[23].MessageType.Name

我还希望管理员设置MessageType

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

但我不希望用户公开设置MessageType.Name。 但是当我创建一个新的MessageType实例时,Name属性的访问修饰符是公共的,因为我想从外部类(我的数据访问层)设置它。

我可以将此属性更改为内部属性,以便我的类可以像公共变量一样访问它,并且不允许我的其他应用程序访问来修改它。

这仍然感觉不对,因为它看起来像是一个公共财产。 公共访问修饰符在这种情况下是不是很糟糕? 任何提示或建议将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以随时定义您的属性:

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

如果这就是你要找的东西,但有点不清楚你想要什么。什么是允许设置该属性的“管理员”?如果这意味着该属性应仅由代码由同一模块或“朋友”模块设置,那么这就是解决方案。

另一种方法是公开只公开一个接口IMessage,只有一个getter,即MessageType MessageType { get; }用于“公共”模块。在您的核心模块中,您将拥有完整的Message类,您也可以在其中使用setter。

如果你的意思是“管理员”,它取决于当前用户的角色,如果可以设置属性(例如在GUI中),那么没有简单的解决方案可以通过简单的属性设置器来解决。你需要公开它。然后,您将必须编写一些花哨的权限管理,您将使用它来评估GUI的哪一部分将被启用,以及在将值保存到数据存储之前将再次使用哪一个进行验证。