При вызове общего метода для хранения объекта иногда приходится обрабатывать определенный тип по-разному. Я знаю, что вы не можете перегружать на основе ограничений, но любая другая альтернатива, похоже, представляет свои проблемы.Перегрузка общих методов
public bool Save<T>(T entity) where T : class
{ ... some storage logic ... }
То, что я хотел бы сделать что-то вроде следующего:
public bool Save<SpecificClass>(T entity)
{ ... special logic ... }
В прошлом наша команда создала «разовые» методы для сохранения этих классов следующим образом:
public bool SaveSpecificClass(SpecificClass sc)
{ ... special logic ... }
Однако, если вы не ЗНАЕЕ, что функция существует, и вы пытаетесь использовать общий (Сохранить), тогда вы можете столкнуться с множеством проблем, которые должен был исправить «одноразовый». Это может быть еще хуже, если появляется новый разработчик, видит проблему с общим и решает, что он исправит его с помощью своей собственной одноразовой функции.
Итак ...
Какие варианты для работы вокруг этого, казалось бы, общего вопроса?
Я посмотрел на и использовал UnitOfWork и сейчас, кажется, только вариант, который фактически решает проблему - но, похоже, атакует муху кувалдой.
В отличие от C++, C# не разрешает специализированную специализацию –
Являются ли эти методы Save() помещены в некоторый легкий вспомогательный класс или в некоторые классы сущностей? Я просто думаю о наследовании, но важно убедиться, что это правильный путь, потому что наследование не всегда правильно используется – sll
Возможный дубликат [Как сделать специализацию шаблона в C#] (http://stackoverflow.com/questions/600978/how -to-do-template-specialization-in-c-sharp) –