在API Design中,通常会这样做:
public ReadOnlyCollection GetCollection
{
get { // Get's read only collection here...
}
}
在get的主体中,这会调用一个填充集合的私有方法。所以我只向客户公开一个一致的对象。令我困惑的是,如果让班级及其成员保持静态是正确的吗?毕竟,我们正在返回一个对象,所以类也是不可变的(我一直认为不可变类应该是静态的?)。我知道静态不会暗示无国籍。我是否认为静态适用于任何集中为一个实体(例如公司详细信息)的东西?
由于
答案 0 :(得分:1)
避免static
- 这是程序编程的特征。仅用于实用方法和广泛可访问的常量。
没有 - 静态!=不可变,他们没有任何共同之处。静态是一种全局状态,它不是线程安全的,并且您的应用程序中不能出现多次静态数据。
不可变意味着对象实例无法更改其内部状态。例如String
- 一旦你构造它,你就无法改变它。但它与静电无关。
关于第一个问题 - getter暴露内部集合,特别是它的只读副本是完全没问题的。
答案 1 :(得分:0)
取决于型号要求,拥有'智能'设置器和吸气器是好的。我不认为你所描述的'静态类'的用法在这里是正确的。如果要返回计算列表,则可能需要将其设置为不可修改的集合。这有助于(但不是所有你需要做的)使它成为改变域对象的唯一方法是通过setter。
答案 2 :(得分:0)
getter方法的目的只是返回一个值,以完全黑盒的方式返回值来源。在getter方法中添加额外的代码是很常见的,您所谈论的具体示例听起来像一种称为“延迟初始化”的技术。这根本不违反任何OO原则。
选择静态或非静态并不是因为有状态或可变性。如果有的话,你想问一下这个班级是否代表一个单身人士。如果它将“公司详细信息”作为一组常量保留,那么静态就是合适的。它本质上是一个DAO,并且在每个请求中重新获取公司详细信息的最新更改,然后您可能需要一个非静态类。听起来你的榜样更倾向于前者。