2016-06-14 4 views
0

Я работаю над проектом 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() { ... } 
} 

Что я пытался сделать, это создать интерфейс и изменить все «Обратная связь» с «объектом», так что когда я реализовать интерфейс я изменить «объект» с «обратной связью», но он не сработал. Если у вас есть какие-то трюки, чтобы добиться такого факторизация я был бы заинтересован

+0

Вы ищете дженерики? 'public class Manager '? Ваш вопрос немного неясен. –

+0

Я также очень не понимаю, что вы хотите сделать. Это также похоже на то, что это скорее общая проблема C#, о которой вы спрашиваете. Существует несколько шаблонов проектирования, которые можно использовать, но без дополнительной информации о том, как вы хотите использовать код, вам трудно указать вас в правильном направлении. –

ответ

4
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(); 
} 
+0

Да, спасибо! Я всегда задавался вопросом, что такое ключевое слово «Т». Спасибо вам обоим! –

+0

Не проблема. T действительно может быть чем угодно, это просто стандарт, чтобы использовать его для представления общей концепции. Если T всегда будет представлять объект данных, вы можете вместо этого использовать T, TEntity или TKey, если общий будет использоваться как ключевое значение. Подробнее см. В этом документе: https://msdn.microsoft.com/en-us/library/512aeb7t.aspx –

+0

Поскольку мы играем «правильно больше», ваш 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() { ... } 
} 

что-то вдоль этих линий?

+1

Интерфейсы не могут определять поля или статические объекты. –

+0

Да, спасибо! Я всегда задавался вопросом, что такое ключевое слово «Т». Спасибо вам обоим! –

+0

удален статический в соответствии с комментарием, полностью пропустил его :) рад, что у нас есть csc, чтобы поймать этих плохих парней, слишком плохо, что он не работает здесь :) –

Смежные вопросы