Rom*_*ier 4 .net c# design-patterns
我有以下类型:
// incomplete class definition
public class Person
{
private string name;
public string Name
{
get { return this.name; }
}
}
Run Code Online (Sandbox Code Playgroud)
我希望使用某种专用控制器/构建器创建和更新此类型,但我希望它对其他类型保持只读.
每次由控制器/构建器更新事件时,此对象还需要触发事件.
总结一下,根据以前的类型定义骨架:
Person只能通过特定的控制器被实例化Person(name字段)的状态Person需要一个发送通知到世界其他地方发生时Person属性我该如何实现呢?我在这里谈论的是控制器/构建器,但欢迎所有其他解决方案.
注意:我可以依赖internal修饰符,但理想情况下我的所有东西都应该在同一个程序集中.
创建一个IReadOnlyPerson接口,它只公开get访问器.让人实施IReadOnlyPerson.将对Person的引用存储在控制器中.仅为其他客户端提供只读版本.
与大多数OO功能一样,这可以防止错误,但不能防止欺诈.如果客户碰巧知道(或怀疑)IReadOnlyPerson是由Person实现的,那么客户端可以运行时转换为Person.
根据评论更新:
Read Only接口也可以公开事件委托,就像任何其他对象一样.通常在C#中使用的习惯用法不会阻止客户端搞乱侦听器列表,但约定只是添加侦听器,因此这应该是足够的.在具有状态改变副作用的任何set访问器或函数内部,只需调用具有null(无侦听器)情况的保护的事件委托.
| 归档时间: |
|
| 查看次数: |
472 次 |
| 最近记录: |