Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 22.06.2012
Сообщений: 244
1

Выбор между абстрактным классом, интерфейсом и простым классом

15.05.2013, 01:13. Показов 712. Ответов 8
Метки нет (Все метки)

Здравствуйте.
Помогите определиться, что следует выбрать в следующей ситуации, а главное почему следует выбирать именно это.

Ситуация:
есть два класса, оба они представляют сущности из базы данных.
И оба имеют метод, который добавляет запись о этой сущности в таблицу БД.
Отличаются они, соответственно, набором полей и набором аргументов метода, который добавляет в БД.

Нужно как-то привести данную программу к канонам ООП.
Что следует выбрать? И почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2013, 01:13
Ответы с готовыми решениями:

Магия с абстрактным классом
Предположим, есть абстрактный класс Funk: abstract public class Func Есть класс Funk1, который...

Нюансы работы с абстрактным классом
Добрый день. Вот создаю я абстрактный класс и хочу сделать от него производный. Вопрос такой,...

Разница между структурой и классом
Подскажите почему при вызове метода переменная структуры change не изменяет свое изначально...

Обмен данными между формой и классом
Добрый день. Есть форма Window1 и класс Server. Я пишу в форме Server s = new Server(); и...

8
1039 / 871 / 228
Регистрация: 15.06.2012
Сообщений: 3,466
Записей в блоге: 1
15.05.2013, 08:32 2
Цитата Сообщение от Void-87 Посмотреть сообщение
И оба имеют метод, который добавляет запись о этой сущности в таблицу БД.
Меня учили делать третий класс, который будет работать с добавлением/чтением в БД. Так сказать, отделяем логику от сущности.
1
2 / 2 / 1
Регистрация: 22.06.2012
Сообщений: 244
16.05.2013, 20:28  [ТС] 3
Цитата Сообщение от Wolfdp Посмотреть сообщение
Меня учили делать третий класс, который будет работать с добавлением/чтением в БД. Так сказать, отделяем логику от сущности.
То есть примерно так:
Классы представляющие сущности содержат только поля и методы, относящиеся непосредственно к сущности, а третий класс содержит все поведение, как здесь например добавляет в базу, принимая в качестве аргументов объекты первых двух классов. Так вы имеете ввиду?
0
212 / 214 / 44
Регистрация: 20.12.2011
Сообщений: 635
16.05.2013, 20:42 4
Цитата Сообщение от Void-87 Посмотреть сообщение
Классы представляющие сущности содержат только поля и методы, относящиеся непосредственно к сущности, а третий класс содержит все поведение
я бы так и делал
у Ваших классов должен быть общий ID - можно вынести это в интерфейс
и этот третий класс может реализовывать интерфейс c набором CRUD-операций(выборка, удаление, добавление)
+ все методы буду принимать не конкретный тип сущности, а этот интерфейс
0
1039 / 871 / 228
Регистрация: 15.06.2012
Сообщений: 3,466
Записей в блоге: 1
16.05.2013, 20:53 5
Я сегодня узнал о существовании Dependency Injection, и думаю что это было бы самое оно. Вот только сложно >_<. И кстати, это немного напоминает модель, предложеную Fler.
0
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.05.2013, 21:02 6
Void-87, если есть общие только методы - интерфейс. Если имеются общие поля - то класс. Абстрактный естественно. Интерфейс удобней, потому что не надо писать миллион override и они не лишают возможности наследовать от другого полезного класса.

Добавлено через 2 минуты
Wolfdp, стандартный IoC же
0
1039 / 871 / 228
Регистрация: 15.06.2012
Сообщений: 3,466
Записей в блоге: 1
16.05.2013, 21:06 7
Цитата Сообщение от Psilon Посмотреть сообщение
Wolfdp, стандартный IoC же
Для меня это ой как не стандартно. Прям откровение сегодня какое-то было, когда читал про этот подход... До этого как-то всё решалось через дополнительные классы/параметры и наследование.
0
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.05.2013, 21:08 8
Wolfdp, да я что-то похожее на днях делал с IFlyBehaviour, поищите. Скажете мне, что я совсем не про то гооврю

Добавлено через 37 секунд
Вроде вот:
Применение интерфейса
0
2 / 2 / 1
Регистрация: 22.06.2012
Сообщений: 244
17.05.2013, 01:52  [ТС] 9
Цитата Сообщение от Psilon Посмотреть сообщение
Wolfdp, да я что-то похожее на днях делал с IFlyBehaviour, поищите. Скажете мне, что я совсем не про то гооврю

Добавлено через 37 секунд
Вроде вот:
Применение интерфейса
Да це же паттерт "стратегия". Верно?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2013, 01:52

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Перевод сообщения между классом и формой
Всем привед. Суть вопроса такова: у нас есть класс который находится в отдельном файле и из...

Передача текстовой строки между UserControl и Классом
Не могли бы вы подсказать почему не выполняется код. Класс: class ClassLID { ...

Как взаимодействуют методы между базовым классом и потомком
Немного запутался в возможностях наследования и не понимаю как реализовать, чтобы базовый класс в...

"Cannot implicitly convert type DbSet to ObjectSet" при попытке сконектить класс с абстрактным классом
Полный код ошибки: Cannot implicitly convert type...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.