具有相同方法的多个类 - 最佳模式

Ton*_*ion 9 c# design-patterns class function

我目前的项目中有几个课程,需要验证电子邮件/网站地址.这样做的方法都是一样的.

我想知道实现这个的最佳方法是什么,所以我不需要将这些方法复制到任何地方?

类本身不一定相关,它们只有那些共同的验证方法.

Mar*_*ell 17

如何添加界面和使用扩展方法?

public interface IFoo { }

public class A : IFoo {}
public class B : IFoo {}
public class C : IFoo {}

public static class FooUtils {
    public static void Bar(this IFoo foo) { /* impl */ }
}
Run Code Online (Sandbox Code Playgroud)

那样:

  • 没有不必要的继承
  • 没有重复

  • 看起来像扩展方法滥用给我.为什么你需要所有需要电子邮件验证的类来实现一些(空的)接口并在其上做一些扩展方法魔术,如果他们可以简单地调用EmailUtils类的静态方法(或者创建一个EmailValidator对象并调用Validate方法)在上面)?看起来他似乎只需要类中的电子邮件验证代码 - 这不应该要求实现接口. (2认同)

Fru*_*ner 8

您可能希望将所有验证代码放入Validator类中,然后在需要验证的任何地方使用该类.可能通过单一方法访问验证Validate(object Something).我认为这被称为"组合"(就设计模式而言).

稍后,您可以使用Validator的子类,这些子类可能更具体或可以进行不同类型的验证.

您还可以让所有需要验证的类扩展基类或抽象类,其中包含90%的验证.


juh*_*arr 6

听起来你只需要一个带静态方法的静态类

public static class Utilities{
    public static bool validEmail(string email)
    {
        //Your code here
    }
}
Run Code Online (Sandbox Code Playgroud)