2016-12-03 7 views
0

У меня есть проект, я использовал Coefirst. В моем проекте я хочу реализовать SoftDelete есть два пути.abstract class or Интерфейс для SoftDelete

первый: пользователя интерфейс Как belowe:

public interface ISoftDelete 
{ 
    bool IsDeleted { get; set; } 
} 

Если я использую этот путь, я должен выполнять все классы, которые я хочу softDelete.

второй: использовать абстрактный класс Как belowe:

public abstract class SoftDelete 
{ 
    public bool IsDelelted { get; set; } 
} 

Я не знаю, какой из них лучше, и нет подобного вопроса в Сети.

+0

Возможный дубликат [Интерфейс или абстрактный класс?] (Http://stackoverflow.com/questions/1165332/interface-or-abstract-class) –

ответ

0

Интерфейс - это договор передачи данных, и у вас нет реализаций, но абстрактный класс может иметь стандартные реализации. Если вы хотите иметь реализацию в базовом классе (здесь SoftDelete), вы должны использовать абстрактный класс.

0
  1. Сохраняет это красиво и просто, вам не нужна специальная обработка объектов IsDeleted.

  2. Вам необходимо обработать наследование в вашей базе данных, что означает реалистичную таблицу на каждое наследование типа. Я бы рекомендовал против этого для такого подхода, так как это усложнит запросы и миграции и может привести (по очереди) к проблемам с производительностью.

Так что я бы сказал, что один лучше, даже если это требует дублирования в коде, его, вероятно, собирается спасти вас от головной боли в дб.

0

согласно MSDN

Если функциональность вы создаете будет полезна в широком диапазоне разрозненных объектов, использует интерфейс. Абстрактные классы должны использоваться в основном для объектов, которые тесно связаны, тогда как интерфейсы лучше всего подходят для обеспечения общей функциональности для несвязанных классов.

Я думаю, что интерфейс является лучшим выбором

Recommendations for Abstract Classes vs. Interfaces