【问题标题】:How to factorize this code如何分解此代码
【发布时间】:2016-06-14 11:52:53
【问题描述】:

我从事 MVC C# 项目,我有一些始终相同的类。我想做的是找到一种方法来分解代码,以便我可以在每次需要时快速实现它。

这是其中一个类的示例

public class FeedbackManager
{
   public List<Feedback> List = new List<Feedback>();
   public FeedbackManager(){}
   public List<Feedback> GetAll() { ... }
   public Feedback GetById(string id) { ... }
   public void Edit(string id, Feedback item) { ... }
   public void Delete(string id) { ... }
   public void Add(Feedback item) { ... }
   public void Serialize() { ... }
   public static FeedbackManager DeSerialize() { ... }
}

我试图做的是创建一个接口并用“object”更改所有“Feedback”,这样当我实现接口时,我用“Feedback”更改“object”,但没有成功。如果你有一些技巧来实现这种分解,我会很感兴趣

【问题讨论】:

  • 您在寻找仿制药吗? public class Manager&lt;T&gt;?你的问题有点不清楚。
  • 我也很不清楚你想做什么。这看起来更像是您要询问的通用 c# 问题。有几种设计模式可以使用,但如果没有关于如何使用代码的更多信息,很难为您指明正确的方向。

标签: c# asp.net factorization


【解决方案1】:
public interface IManager<T>
{
   public List<T> GetAll();
   public T GetById(string id);
   public void Edit(string id, T item);
   public void Delete(string id);
   public void Add(T item);
   public void Serialize();
}

public abstract class AbstractManager<T>
{
   public List<T> List;

   protected AbstractManager(){
        List = new List<T>();
   }

   public abstract List<T> GetAll();
   public abstract T GetById(string id);
   public abstract void Edit(string id, T item);
   public abstract void Delete(string id);
   public abstract void Add(T item);
   public abstract void Serialize();
}

【讨论】:

  • 好的,谢谢!我一直想知道那些“T”关键字是什么。谢谢你们!
  • 没问题。 T 实际上可以是任何东西,它只是用来表示一个通用概念的标准。如果 T 将始终表示数据实体,则可以使用 T、TEntity 代替,如果将泛型用作键值,则可以使用 TKey。详情请见:msdn.microsoft.com/en-us/library/512aeb7t.aspx
  • 由于我们正在玩“更正确”,您的 GetById 将返回一个与非抽象类耦合的具体类型。 @TimothyStepanski
  • 哎呀,没有把它拉出来。很好的收获。
【解决方案2】:

根据对您答案的 #1 评论,这听起来完全是泛型的一个很好的用例:

public interface IManager<T>
{
   public List<T> List = new List<T>();
   public List<T> GetAll() { ... }
   public T GetById(string id) { ... }
   public void Edit(string id, T item) { ... }
   public void Delete(string id) { ... }
   public void Add(T item) { ... }
   public void Serialize() { ... }
}

类似的东西?

【讨论】:

  • 接口不能定义字段或静态任何东西。
  • 好的,谢谢!我一直想知道那些“T”关键字是什么。谢谢你们!
  • 根据评论删除了静态,完全错过了 :) 很高兴我们有 csc 来抓那些坏人,可惜它没有在这里运行 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 2021-07-10
  • 1970-01-01
相关资源
最近更新 更多