Хорошая ли идея - интерфейсы и абстрактный класс

Я бы хотел сделать что-то вроде следующего:

//non-generic
var MyTable = new Table();
string name = MyTable.Name;
IEnumerable<String> rows = MyTable.Rows;

//generic
var MyTableGeneric = new Table<MyType>();
string name = MyTableGeneric.Name;
IEnumerable<MyType> rows = MyTableGeneric .Rows;

Было бы что-то вроде этого слишком много:

http://img81.imageshack.us/img81/427/diagramcm3.jpg

или было бы лучше:

http://img301.imageshack.us/img301/4136/presentation1nh9.jpg

Извините, если мне трудно понять, что я пытаюсь понять, в основном у меня есть два объекта, которые будут иметь общие свойства, за исключением коллекций строк, которые будут общими. Я бы хотел сделать это максимально чисто.

Простите за дрянные схемы, сделанные в powerpoint :)

Кстати: это отличный инструмент для создания диаграмм в Интернете: yuml.me/diagram/scruffy/class/samples

Marek 12.04.2010 11:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
499
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я бы сказал, что второй дизайн лучше. Меньше элементов и более простой путь наследования.

Первый дизайн имеет ненужные интерфейсы, которые вам действительно не нужны, если вы не реализуете что-то еще, что реализует интерфейс, но не наследуется от базового класса.

В чем разница между Table и Table<string>? Другими словами, нельзя ли просто использовать Table<string> в качестве неуниверсальной формы?

Если вы делать выберете второй вариант, я бы посоветовал переименовать одно из ваших свойств Rows - возможно, вам удастся избежать использования двух свойств разных типов путем скрытия и т. д., Но это будет неприятно.

Какое поведение на самом деле будет у вашего типа Table? Если это на самом деле просто контейнер, вам может не понадобиться интерфейс, но если он имеет значительную логику, вы можете захотеть иметь интерфейс, чтобы вы могли имитировать таблицу при тестировании класса, который его использует.

Я бы использовал универсальные шаблоны в строках, не используя строку в базовом классе, и имел бы неуниверсальные наследования класса Table. Не используйте абстрактный класс.

Table<T> -> Table:Table<string>

Другие вопросы по теме