C# 在API设计中有调用私有方法的getter是正常的做法吗?

C# 在API设计中有调用私有方法的getter是正常的做法吗?,c#,api,static,static-methods,api-design,C#,Api,Static,Static Methods,Api Design,在API设计中,这样做是否常见: public ReadOnlyCollection GetCollection { get { // Get's read only collection here... } } 在get的主体中,这将调用填充集合的私有方法。所以我只向客户端公开一个一致的对象。让我困惑的是,让类及其成员保持静态是否正确?毕竟,我们返回的是一个对象,所以类也是不可变的(我一直认为不可变的类应该是静态的?)。我知道static不会暗示无状态。我认为静态对任何将集中为一个实体的事

在API设计中,这样做是否常见:

public ReadOnlyCollection GetCollection
{
get { // Get's read only collection here... 
}
}
在get的主体中,这将调用填充集合的私有方法。所以我只向客户端公开一个一致的对象。让我困惑的是,让类及其成员保持静态是否正确?毕竟,我们返回的是一个对象,所以类也是不可变的(我一直认为不可变的类应该是静态的?)。我知道static不会暗示无状态。我认为静态对任何将集中为一个实体的事物都是正确的(例如,公司细节)


谢谢

避免
静态
——这是过程编程的一个特点。仅用于实用方法和广泛可访问的常量

而且没有静电!=一成不变,他们没有共同点。静态是一种全局状态,它不是线程安全的,并且在应用程序中不能出现多个静态数据

不可变意味着对象实例不能更改其内部状态。例如,这就是
String
——一旦构建了它,就无法更改它。不过,这与静态无关


至于第一个问题——对于getter来说,公开内部集合,尤其是它的只读副本是完全可以的。

避免
静态的
——这是过程编程的一个特点。仅用于实用方法和广泛可访问的常量

而且没有静电!=一成不变,他们没有共同点。静态是一种全局状态,它不是线程安全的,并且在应用程序中不能出现多个静态数据

不可变意味着对象实例不能更改其内部状态。例如,这就是
String
——一旦构建了它,就无法更改它。不过,这与静态无关


至于第一个问题,对于getter来说,公开内部集合,尤其是它的只读副本是完全可以的。

根据型号要求,使用“智能”setter和getter是可以的。我认为您描述的“静态类”的用法在这里是不正确的。如果返回的是计算列表,则可能希望将其设置为不可修改的集合。这有助于(但不是您必须做的全部)使更改域对象的唯一方法是通过setter。

根据模型要求,使用“智能”setter和getter是可以的。我认为您描述的“静态类”的用法在这里是不正确的。如果返回的是计算列表,则可能希望将其设置为不可修改的集合。这有助于(但不是您必须做的全部)使更改域对象的唯一方法是通过setter。

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


选择静态或非静态与状态性或可变性无关。如果有的话,您想问这个类是否应该表示一个单例。如果它将“公司详细信息”作为一组常量保存,那么静态将是合适的。如果类基本上是一个DAO,并且在每个请求上重新获取对公司详细信息的最新更改,那么您可能需要一个非静态类。听起来您的示例更倾向于前者。

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


选择静态或非静态与状态性或可变性无关。如果有的话,您想问这个类是否应该表示一个单例。如果它将“公司详细信息”作为一组常量保存,那么静态将是合适的。如果类基本上是一个DAO,并且在每个请求上重新获取对公司详细信息的最新更改,那么您可能需要一个非静态类。听起来您的示例更倾向于前者。

这是Java还是C?在我看来它不像Java…这是Java还是C?在我看来,它不像Java…您可能希望确保组成集合的对象也是不可变的。我一直在问自己,当集合无法更改时,拥有实例对象有什么意义。我可能希望有一个私有构造函数和一个像工厂一样的Get()方法?您可能希望确保组成集合的对象也是不可变的。我一直在问自己,当集合无法更改时,拥有实例对象有什么意义。我可能想要一个私有构造函数和一个像工厂一样的Get()方法?仔细想想,我的类将是一个非常单一的类。这是一个小应用程序,我想要一个常用的集合。它不像一个人,每个人都是独一无二的。这似乎是不对的?使用单例模式几乎要求类(或至少是访问器方法)是静态的。不过,你可能对做“对”或“错”的事情压力太大了。很多软件设计都是主观的,而不是黑白的。听起来你处在一个灰色地带,在那里你可以走任何一条路,但仍然是受人尊敬的。所以,只要选一个,玩一会儿,如果你决定换一个方向的话,再进行重构。再仔细想想,我的班级将非常单身。这是一个小应用程序,我想要一个常用的集合。它不像一个人,每个人