微软作为一个框架设计指南,properties应该彼此独立,而不是依赖于以任何特定的顺序设置.
假设你有一个需要支持缩小和面积计算的三角形类.你会怎么模拟这个?
这当然是被认为是设计,因为区域依赖于基础和高度首先设置:
class Triangle{ public double Base {get;set;} public double Height {get;set;} public double Area { get{ return (Base * Height) / 2; } } }
假设你使用一个构造函数,你可以确保这种情况下的默认值,但这是正确的方法吗?
class Triangle{ public Triangle(double b,double h){ Base = b; Height = h; } public double Base {get;set;} public double Height {get;set;} public double Area { get{ return (Base * Height) / 2; } } }
您仍然拥有一个依赖于其他属性的属性.为了成为纯粹主义者,我只能看到几种方法(我猜他们可以结合起来):
>使Base / Height具有只能在构造函数中设置的只读成员
>使区域计算成一个方法.
>使用某种工厂模式只读成员来确保尽管可能存在依赖关系,但这些值只能通过实例化Triangle类的方法来设置.
问题:
>指导方针是否可行(您必须为您的课程建立大量复杂性才能支持)?
[例如,sqlConnection类允许您初始化连接字符串属性,但允许您更改其各个部分,如命令超时]
>如何管理您的属性彼此独立?
>对于使用Silverlight / MVVM类型体系结构的用户,您是否接受属性中的依赖关系,因为数据绑定对象的作用方式?例如,绑定在屏幕上显示高度,基数和面积的三角形实例.