Дизайн: доступ к детской коллекции, избегая родителей! - PullRequest
0 голосов
/ 24 августа 2009

Примечание: ранний уровень обучения WinForms C #!

Мне нужна помощь с наилучшим способом реализации ситуации в объектной среде C #. Я не могу опубликовать код, потому что он еще не существует, однако могу дать вам альтернативное сравнение в реальной жизни.

Проще говоря (потому что так я работаю), у меня есть класс Book. У меня есть коллекция (<List>) этих классов Книги. Внутри каждого класса Book у меня есть коллекция (<List>) классов Chapter. Класс Book и класс Chapter основаны на совершенно разных абстрактных классах. Они определяются на отдельном бизнес-уровне, а данные загружаются из уровня источника данных. Имейте в виду, что есть много книг и много глав.

Из уровня GUI я могу получить книгу и ее основные атрибуты на основе индекса / ключа коллекции. Я также могу получить все главы книги через класс Book.

То, что мне нужно сделать, - это получить любой класс Главы из любой Книги без необходимости проходить через класс Книги. Каков наилучший способ сделать это?

Спасибо, ребята и девочки

Ответы [ 3 ]

2 голосов
/ 24 августа 2009

Что вы подразумеваете под "получить". Ожидаете ли вы, чтобы все главы были в памяти? Или мы ищем базу данных?

Какую информацию идентифицирует Глава?

Предположим, что все главы (или, возможно, если не полный текст главы, а затем дескриптор главы) находятся в памяти. У вас есть коллекция глав с ключом ChapterIdentity (возможно, BookId + ChapterNumber).

Итак, это просто

ChapterCollection.getById(aChapterId);

Когда вы добавляете книгу, вам нужно добавить все ее главы в коллекцию.

Скорее всего, это исходит из базы данных. Таким образом, вы хотите возможность получить главы по идентификатору. Это все зависит от того, как вы делаете постоянство, но в принципе может выглядеть как пример в памяти с точки зрения ретривера.

1 голос
/ 24 августа 2009

Почему вы не хотите проходить учебный класс? На самом деле у вас есть только два варианта - поиск по спискам объектов класса книги или ведение вторичного объекта коллекции, который содержит все главы из всех книг. Я предполагаю, что будет определенный ключ, который вы будете искать, который является атрибутом класса главы? Если это так, вы можете использовать словарь (ключа, главы), который будет быстро искать, или сохранить список (главы) и использовать LINQ для поиска по нему. Это зависит от того, что вы ищете, и от причин, по которым вы избегаете учебного класса.

0 голосов
/ 24 августа 2009

Если вы не проходите через классы книг, вам нужно иметь коллекцию "library", которая содержит ссылки на все объекты главы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...