我正在为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属性的访问修饰符是公共的,因为我想从外部类(我的数据访问层)设置它。
我可以将此属性更改为内部属性,以便我的类可以像公共变量一样访问它,并且不允许我的其他应用程序访问来修改它。
这仍然感觉不对,因为它看起来像是一个公共财产。 公共访问修饰符在这种情况下是不是很糟糕? 任何提示或建议将不胜感激。
感谢。
答案 0 :(得分:1)
您可以随时定义您的属性:
public MessageType MessageType
{
get { return this._messageType; }
internal set { this._messageType = value; }
}
如果这就是你要找的东西,但有点不清楚你想要什么。什么是允许设置该属性的“管理员”?如果这意味着该属性应仅由代码由同一模块或“朋友”模块设置,那么这就是解决方案。
另一种方法是公开只公开一个接口IMessage
,只有一个getter,即MessageType MessageType { get; }
用于“公共”模块。在您的核心模块中,您将拥有完整的Message
类,您也可以在其中使用setter。
如果你的意思是“管理员”,它取决于当前用户的角色,如果可以设置属性(例如在GUI中),那么没有简单的解决方案可以通过简单的属性设置器来解决。你需要公开它。然后,您将必须编写一些花哨的权限管理,您将使用它来评估GUI的哪一部分将被启用,以及在将值保存到数据存储之前将再次使用哪一个进行验证。