0

我将 LINQ to SQL 用于 DataAccess 层。我有与数据访问层类似的业务对象。

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

所以; 我希望它获得消息的 MessageType 的名称。

user.Messages[23].MessageType.Name

我还希望管理员设置 MessageType

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

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

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

这仍然感觉不对,因为它似乎是公共财产。在这种情况下,公共访问修饰符是否不好?任何提示或建议将不胜感激。

谢谢。

4

1 回答 1

1

你总是可以这样定义你的财产:

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

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

另一种方法是只公开一个接口IMessage,该接口只有一个 getter á laMessageType MessageType { get; }用于“公共”模块。在您的核心模块中,您将拥有完整的Message课程,其中还有一个二传手。

如果您所说的“管理员”是指是否可以设置属性(例如在 GUI 中)取决于当前用户的角色,那么没有简单的解决方案可以通过简单的属性设置器来解决。您需要将其公开。然后,您将不得不编写一些精美的权限管理代码,您将使用它来评估 GUI 的该部分是否将被启用,并且您将在将值保存到数据存储之前再次使用它来验证。

于 2010-04-01T07:29:45.547 回答