C#编码模式问题

标签 c# .net design-patterns .net-4.0

我有以下代码:

protected void Initialize(){
  this.Fonts.Initialize();
  this.Screens.Initialize();
  this.Menu.Initialize();
}

protected void Update(){
  this.Screens.Update();
  this.Menu.Update();
}

写完之后,我将代码重构为:

protected void Initialize(){
  this.CallMethod<INeedInitialization>(
  (i) => { i.Initialize(); }
  , this.Fonts, this.Screens, this.Menu
  );
}

protected void Update(){
  this.CallMethod<INeedUpdating>(
   (i) => { i.Update(); }
    , this.Screens, this.Menu
  );
}

private void CallMethod<T>(Action<T> action, params T[] items){
  items.ToList().ForEach(i => action(i));
}

然后,我意识到在我的代码库中,有很多对 CallMethod<T> 的重用。类型的操作,所以我进一步重构为:

public static extensions{
  // I use object type as I can have INeedInitialization, INeedUpdate etc...
  public static void CallMethod<T>(this object obj, Action<T> action, 
params T[] items){
   items.ToList().ForEach(i => action(i));
  }
}

现在,我可以获得 CallMethod<T>在我的所有对象上,但不知何故在这样做之后,我觉得这段代码存在根本性的错误并且无法确定为什么我觉得它不正确。

另外 - 我怎样才能对泛型方法施加 OR 约束以仅接受 INeedUpdatingINeedInitialize对象类型而不是扩展基础 Object类型?

有人可以帮忙吗?

谢谢!

最佳答案

KISS principle !

这似乎是花式编码综合症的一个例子。我看不到从一般例程中获得任何好处,而且在维护、调试和测试的额外代码上花费了大量费用。

关于C#编码模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317505/

相关文章:

c# - MVC "UrlData[0]"

c# - Windows Azure 存储的默认顺序是什么?

design-patterns - 软件更新的设计模式

java - 如何在 Java 中创建具有相同类型参数的方法?

design-patterns - 关于最佳编程实践主题的循证研究?

c# - 如何强制对 xml 文件进行配置转换?

c# - 其他开发人员如何知道类库正在使用 app.config?还是我应该删除 app.config?

c# - 有没有一种方法可以在 C#/LINQ 中产生、发出或以其他方式实现以前为空的数组?

.net - 在 .NET 中以高速率发送 SMTP 电子邮件

c# - 为什么此 WCF 服务一次只能处理一个请求?