C# 具有多个方法的类的设计模式
我正在构建一个调用各种API的应用程序,作为一个了解坚实原则和类应该如何承担单一责任的新手,我希望在设计类时牢记坚实原则C# 具有多个方法的类的设计模式,c#,oop,methods,solid-principles,C#,Oop,Methods,Solid Principles,我正在构建一个调用各种API的应用程序,作为一个了解坚实原则和类应该如何承担单一责任的新手,我希望在设计类时牢记坚实原则 Internal class API_Caller { public static getInfor1() { // do something in here } public static getInfo2() {// do something } public static getInfo3() {// do something} }
Internal class API_Caller
{
public static getInfor1()
{
// do something in here
}
public static getInfo2()
{// do something }
public static getInfo3()
{// do something}
}
如果我的班级有不止一种方法,那么它是否遵循固体和
另一种方法是,如果所有方法都是私有的,那么我将尽可能少地公开()但这是一种好的设计模式,还是我应该将这些方法分成不同的类
internal class API_Caller
{
public Static CALL_APIs (API_Name)
{
switch (API_Name)
{
case "getinfo1":
getInfor1();
break;
case "getinfo2":
getinfo2();
break;
}
}
private static getInfor1(){// do something}
private static getInfo2(){// do something}
private static getInfo3(){// do something}
}
这三种方法相关吗?它们是彼此的替代品吗?它们是否独立变化 如果每种方法都代表了实现同一目标的不同方式,并且可以单独使用,那么使用可以将它们分开。假设你从谷歌或亚马逊获得天气预报,你可以这样做:
interface IWeatherProvider
{
//SomeReturnType Get();
}
class AmazonWeatherProvider : IWeatherProvider
{
// Implementation
}
class GoogleWeatherProvider : IWeatherProvider
{
// Implementation
}
在上面的例子中,每个类代表了实现相同职责的不同方式
但是如果您有两种方法:GetWeeklyForecast
和GetDailyForecast
。您可以在同一类(或接口)中使用这两个。这通常不会违反SRP,他们都负有相同的责任(获取天气预报)
如果这些方法完全不相关,并且可能由于不同的原因或由不同的客户机使用而更改,那么您也可以将它们划分为不同的类
注意你是如何看待公共/私有方法的。您可以根据需要公开任意数量的公共方法(这些是您与使用API的任何人共享的契约)。如果更改私有方法的参数类型,则不会有破坏性的更改。但是,如果您更改公共方法的参数类型,您将有一个突破性的更改!您的所有客户现在都需要更改其代码 这三种方法相关吗?它们是彼此的替代品吗?它们是否独立变化 如果每种方法都代表了实现同一目标的不同方式,并且可以单独使用,那么使用可以将它们分开。假设你从谷歌或亚马逊获得天气预报,你可以这样做:
interface IWeatherProvider
{
//SomeReturnType Get();
}
class AmazonWeatherProvider : IWeatherProvider
{
// Implementation
}
class GoogleWeatherProvider : IWeatherProvider
{
// Implementation
}
在上面的例子中,每个类代表了实现相同职责的不同方式
但是如果您有两种方法:GetWeeklyForecast
和GetDailyForecast
。您可以在同一类(或接口)中使用这两个。这通常不会违反SRP,他们都负有相同的责任(获取天气预报)
如果这些方法完全不相关,并且可能由于不同的原因或由不同的客户机使用而更改,那么您也可以将它们划分为不同的类
注意你是如何看待公共/私有方法的。您可以根据需要公开任意数量的公共方法(这些是您与使用API的任何人共享的契约)。如果更改私有方法的参数类型,则不会有破坏性的更改。但是,如果您更改公共方法的参数类型,您将有一个突破性的更改!您的所有客户现在都需要更改其代码 它被称为单一责任,而不是单一方法。一个类可以有多个公共方法,并且只有一个职责。SOLID只是常识。您不会“仅仅因为”在不同的类中提取方法。你这样做是因为他们在一起看起来很丑——他们所做的事情完全不同,很明显他们不应该在一起。或者一个单一的方法太长,做了太多的事情,很明显,它应该是分开的。我投票结束这个问题,作为离题,因为它属于这个问题。它不是一个强硬的路线,什么是,不是一个“单一的责任”。我发现最好的解释是,一个班级应该只有一个改变的理由,但那就是工资。我还想看看它们是否和模式一样重要。想想谁会使用这个接口——如果GETIfF1和GETInFrO2不能一起使用,那么考虑接口隔离原则,它被称为单一责任,而不是单一方法。一个类可以有多个公共方法,并且只有一个职责。SOLID只是常识。您不会“仅仅因为”在不同的类中提取方法。你这样做是因为他们在一起看起来很丑——他们所做的事情完全不同,很明显他们不应该在一起。或者一个单一的方法太长,做了太多的事情,很明显,它应该是分开的。我投票结束这个问题,作为离题,因为它属于这个问题。它不是一个强硬的路线,什么是,不是一个“单一的责任”。我发现最好的解释是,一个班级应该只有一个改变的理由,但那就是工资。我发现它们和模式一样重要。想想谁会使用这个接口——如果getInfor1和getInfor2不能一起使用,考虑接口隔离原则,用私有方法并公开一种称为私有的公共方法是好的经验法则吗??@ RezaDel,我没有听说过这样的规则。您可以根据需要公开尽可能多的公共方法(这些是您与使用API的人共享的契约)。如果更改私有方法的参数类型,则不会有破坏性的更改。但是,如果您更改公共方法的参数类型,您将有一个突破性的更改!您的所有客户现在都需要更改其代码!让方法私有,只公开一个称为privates one的公共方法,这是一个好的经验法则吗?@RezaDel我没有听说过这样的规则。您可以根据需要公开尽可能多的公共方法(这些是您与使用API的人共享的契约)。如果更改私有方法的参数类型,则不会有破坏性的更改。但是,如果您更改公共方法的参数类型,您将有一个突破性的更改!您的所有客户现在都需要更改其代码!