2009-11-13 2 views
2

Будет ли использование шаблона адаптера лучшим дизайном для использования, когда все, к чему вы пытаетесь адаптироваться, - это класс, в котором хранятся поля, а не методы или функции?Это лучшее использование шаблона адаптера?

Например, будет ли лучший способ приблизиться к этому? Я использую C#, если это имеет какое-то значение в ваших ответах.

NewClass 
    private Guid _guidId; 

    AdpaterClass : NewClass 
    private Guid _guidId; 

    LegacyClass : LegacyBaseClass 
    private Guid _guidId; 
    private String _stringDescription; 
    private DateTime _dateTimeValue; 

Почему я это делаю?

Я пытаюсь получить LegacyClass и другой класс до той же базовой линии, чтобы я мог использовать один общий метод сортировки/фильтрации на _guidId. Обычный метод привел бы список Guid's, проверит _GuidId и посмотрит, совпадает ли он, а затем перенесите на него какую-то функцию. Моя цель - не писать одну и ту же функцию sort/filter более одного раза, так как они будут почти идентичны.

Спасибо за ваши предложения.

+3

Что вы пытаетесь сделать точно? Почему вы адаптируете класс, чтобы иметь другую переменную частного экземпляра? –

+2

Я не вижу никаких свойств. Просто поля. Но уверен, что если бы у вас был интерфейс, определенный исключительно по свойствам, то для адаптации чего-либо к этому интерфейсу потребовался бы адаптер, который обнаруживал эти свойства ... – Shog9

+0

Почему бы и нет, свойство является просто синтаксическим сахаром для методов get/set. –

ответ

9

Я думаю, что вы ищете, что-то вроде следующего:

interface ICanHazGuidId { 
    Guid GuidId { get; } 
} 

class NewClass : ICanHazGuidId { 
    public Guid GuidId { get; private set; } 
    // etc. 
} 

class AdapterClass : ICanHazGuidId { 
    private LegacyClass legacy; 
    public Guid GuidId { 
     get { 
      // obtain and return legacy._guidId; 
     } 
    } 
    // constructor eating instance of LegacyClass etc. 
} 

Тогда просто реализовать IComparer<ICanHazGuidId> и т.д. Если да, то это было бы хорошо использовать шаблон адаптера.

+4

интерфейс ICanHazGuidID {...} – Juliet

+0

@Juliet: Это стоит изменить. – jason

+0

+1 для умного наименования интерфейсов, в то время как вы остаетесь запертым с рекомендациями по именованию MS (привести «я» для интерфейсов.) Хорошо сыграл. – jro

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