在API设计中调用私有方法的getter是否正常?

时间:2010-09-29 18:31:32

标签: c# api static static-methods api-design

在API Design中,通常会这样做:

public ReadOnlyCollection GetCollection
{
get { // Get's read only collection here... 
}
}

在get的主体中,这会调用一个填充集合的私有方法。所以我只向客户公开一个一致的对象。令我困惑的是,如果让班级及其成员保持静态是正确的吗?毕竟,我们正在返回一个对象,所以类也是不可变的(我一直认为不可变类应该是静态的?)。我知道静态不会暗示无国籍。我是否认为静态适用于任何集中为一个实体(例如公司详细信息)的东西?

由于

3 个答案:

答案 0 :(得分:1)

避免static - 这是程序编程的特征。仅用于实用方法和广泛可访问的常量。

没有 - 静态!=不可变,他们没有任何共同之处。静态是一种全局状态,它不是线程安全的,并且您的应用程序中不能出现多次静态数据。

不可变意味着对象实例无法更改其内部状态。例如String - 一旦你构造它,你就无法改变它。但它与静电无关。

关于第一个问题 - getter暴露内部集合,特别是它的只读副本是完全没问题的。

答案 1 :(得分:0)

取决于型号要求,拥有'智能'设置器和吸气器是好的。我不认为你所描述的'静态类'的用法在这里是正确的。如果要返回计算列表,则可能需要将其设置为不可修改的集合。这有助于(但不是所有你需要做的)使它成为改变域对象的唯一方法是通过setter。

答案 2 :(得分:0)

getter方法的目的只是返回一个值,以完全黑盒的方式返回值来源。在getter方法中添加额外的代码是很常见的,您所谈论的具体示例听起来像一种称为“延迟初始化”的技术。这根本不违反任何OO原则。

选择静态或非静态并不是因为有状态或可变性。如果有的话,你想问一下这个班级是否代表一个单身人士。如果它将“公司详细信息”作为一组常量保留,那么静态就是合适的。它本质上是一个DAO,并且在每个请求中重新获取公司详细信息的最新更改,然后您可能需要一个非静态类。听起来你的榜样更倾向于前者。